欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 采用间接寻址方式心得体会

采用间接寻址方式心得体会

时间:2019-07-04 23:40

关于8086寻址方式

8086一共有7种寻址方式~~1 就是 指令中的操作数在操作码的后面 例如 MOV AL,09H2寄存器寻址 指令的操作数存放在寄存器里例如 MOV AX,BX3例如MOV AL,[0005]3MOV AL,[BX]4相对MOV AL,[BX]+1 或是MOV AL,[BX+1]在或是 MOV AL,1[BX]5相对变址寻址MOV AL,[DI]+1.....6基址变址寻址MOV AL,[BX]+[DI]+1.....

间接寻址是什么意思,说的详细一些,举个例子

间接寻址 相对于直接寻址而言的,指令地址字段的形式地址D不是操作数的真正地址,而是操作数地址的指示器,或者说是D单元的内容才是操作数的有效地址。

附:间接寻址 间接寻址是在直接寻址的基础上面建立起来的,也就是直接寻址得到的数据是一个地址,通过这个地址找到最终的数据,也就是两次寻址,第一次得到的是地址,第二次才是目标数据。

寄存器间接寻址: 如mov eax,[ebx] 第一次寻址得到寄存器ebx的值,这个值是一个地址,再通过这个地址,第二次寻址得到存数器数据. 3.1地址的概念我们知道,完整的一条指令,应该包含指令符+操作数(不包括那些单指令)。

其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。

在PLC中存在各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、资料区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。

当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。

由此我们可以得到,要描述一个地址,至少应该包含两个要素:1、存储的区域2、这个区域中具体的位置比如:A Q2.0,其中的A是指令符,Q2.0是A的操作数,也就是地址。

这个位址由两部分组成:Q:指的是映像输出区;2.0:就是这个映像输出区第二个字节的第0位。

因此一个确切的地址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:DBX0.0。

其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。

这样,一个确切的地址组成,又可以写成:地址标识符 + 确切的数值单元 3.2 间接寻址的概念寻址,就是指定指令要进行操作的地址。

给定指令操作的位址方法,就是寻址方法。

所谓直接寻址,简单的说,就是直接给出指令的确切操作数,像上面所说的,A Q2.0,这样看来,间接寻址就是间接的给出指令的确切操作数。

比如:A Q[MD0] ,A T[DBW4]。

程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的位址,这两个语句中的MD0和DBW4称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。

间接由此得名。

3.3 间接寻址的两种方法西门子的间接寻址方式有两大类型:内存间接寻址和寄存器间接寻址。

3.3.1内存间接寻址内存间接寻址的地址给定格式是:地址标识符+指针。

指针所指示存储单元中所包含的数值,就是地址的确切数值单元。

内存间接寻址具有两个指针格式:单字和双字。

单字指针是一个16bit的结构,从0-15bit,指示一个从0-65535的数值,这个数值就是被寻址的存储区域的编号。

双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。

指针可以存放在M、DI、DB和L区域中,也就是说,可以用这些区域的内容来做指针。

单字指针和双字指针在使用上有很大区别。

单字指针只应用在地址标识符是非位的情况下。

的确,单字指针前面描述过,它确定的数值是0-65535,而对于byte.bit这种具体位构来说,只能用双字指针。

这是它们的第一个区别,单字指针的另外一个限制就是,它只能对T、C、DB、FC和FB进行寻址,通俗地说,单字指针只可以用来指代这些存储区域的编号。

相对于单字指针,双字指针就没有这样的限制,它不仅可以对位地址进行寻址,还可以对BYTE、WORD、DWORD寻址,并且没有区域的限制。

不过,有得必有失。

(在对非位的区域进行寻址时,必须确保其0-2bit为全0

)总结一下:单字指针的内存间接寻址只能用在地址标识符是非位的场合;双字指针由于有位格式存在,所以对地址标识符没有限制。

也正是由于双字指针是一个具有位的指针。

(因此,当对字节、字或者双字存储区地址进行寻址时,必须确保双字指针的内容是8或者8的倍数。

)现在,我们来分析一下下面例子中的A I[MD104] 为什么最后是对I1.2进行与逻辑操作。

通过L L#+10 ,我们知道存放在MD104中的值应该是:MD104:0000 0000 0000 0000 0000 0000 0000 1010当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的位址,因此:0000 0000 0000 0000 0000 0000 1010 = 1.23.3.2 地址寄存器间接寻址在先前所说的内存间接寻址中,间接指针用M、DB、DI和L直接指定,就是说,指针指向的存储区内容就是指令要执行的确切地址数值单元。

但在寄存器间接寻址中,指令要执行的确切地址数值单元,并非寄存器指向的存储区内容,也就是说,寄存器本身也是间接的指向真正的地址数值单元。

从寄存器到得出真正的地址数值单元,西门子提供了两种途径:1、区域内寄存器间接寻址2、区域间寄存器间接寻址地址寄存器间接寻址的一般格式是:〖地址标识符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5] 或 M[AR1,P#0.0] 。

〖寄存器,P#byte.bit〗统称为:寄存器寻址指针,而〖地址标识符〗在上帖中谈过,它包含〖存储区符〗+〖存储区尺寸符〗。

但在这里,情况有所变化。

比较一下刚才的例子:DIX [AR1,P#1.5] X [AR1,P#1.5] DIX可以认为是我们通常定义的地址标识符,DI是背景数据块存储区域,X是这个存储区域的尺寸符,指的是背景数据块中的位。

但下面一个示例中的M呢

X只是指定了存储区域的尺寸符,那么存储区域符在哪里呢

毫无疑问,在AR1中

DIX [AR1,P#1.5] 这个例子,要寻址的地址区域事先已经确定,AR1可以改变的只是这个区域内的确切地址数值单元,所以我们称之为:区域内寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域内寻址指针。

X [AR1,P#1.5] 这个例子,要寻址的地址区域和确切的地址数值单元,都未事先确定,只是确定了存储大小,这就是意味着我们可以在不同的区域间的不同地址数值单元以给定的区域大小进行寻址,所以称之为:区域间寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域间寻址指针。

既然有着区域内和区域间寻址之分,那么,同样的AR1中,就存有不同的内容,它们代表着不同的含义。

【AR的格式】地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。

当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的内存间接寻址中的双字指针,也就是:其0-2bit,指定bit位,3-18bit指定byte字节。

其第31bit固定为0。

AR:0000 0000 0000 0BBB BBBB BBBB BBBB BXXX,这样规定,就意味着AR的取值只能是:0.0 ——65535.7。

例如:当AR=D4(HEX)=0000 0000 0000 0000 0000 0000 1101 0100(B),实际上就是等于26.4。

而在区域间寄存器间接寻址中,由于要寻址的区域也要在AR中指定,显然这时的AR中内容肯定于寄存器区域内间接寻址时,对AR内容的要求,或者说规定不同。

AR:1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX比较一下两种格式的不同,我们发现,这里的第31bit被固定为1,同时,第24、25、26位有了可以取值的范围,这是用于指定存储区域的。

对,bit24-26的取值确定了要寻址的区域,它的取值定义如下:区域标识符 26、25、24位 P(外部输入输出) 000 I(输入映像区) 001 Q(输出映像区) 010 M(位存储区) 011 DB(数据块) 100 DI(背景数据块) 101 L(暂存资料区,也叫局域资料) 如果我们把这样的AR内容,用HEX表示的话,那么就有:当是对P区域寻址时,AR=800xxxxx当是对I区域寻址时,AR=810xxxxx当是对Q区域寻址时,AR=820xxxxx当是对M区域寻址时,AR=830xxxxx当是对DB区域寻址时,AR=840xxxxx当是对DI区域寻址时,AR=850xxxxx当是对L区域寻址时,AR=870xxxxx因此可以得出结论:如果AR中的内容是8开头,那么就一定是区域间寻址;如果要在DB区中进行寻址,只需在8后面跟上一个40。

84000000-840FFFFF指明了要寻址的范围是:DB区的0.0——65535.7。

我们看到,在寄存器寻址指针 [AR1\\\/2,P#byte.bit] 这种结构中,P#byte.bit又是什么呢

3.3.3 P#指针P#中的P是Pointer,是个32位的直接指针。

所谓的直接,是指P#中的#后面所跟的数值或者存储单元,是P直接给定的。

这样P#XXX这种指针,就可以被用来在指令寻址中,作为一个“常数”来对待,这个“常数”可以包含或不包含存储区域。

我们发现,当对P#只是指定数值时,累加器中的值和区域内寻址指针规定的格式相同(也和内存间接寻址双字指针格式相同);而当对P#指定带有存储区域时,累加器中的内容和区域间寻址指针内容完全相同。

事实上,把什么样的值传给AR,就决定了是以什么样的方式来进行寄存器间接寻址。

在实际应用中,我们正是利用P#的这种特点,根据不同的需要,指定P#指针,然后,再传递给AR,以确定最终的寻址方式。

在寄存器寻址中,P#XXX作为寄存器AR指针的偏移量,用来和AR指针进行相加运算,运算的结果,才是指令真正要操作的确切地址数值单元

无论是区域内还是区域间寻址,地址所在的存储区域都有了指定,因此,这里的P#XXX只能指定纯粹的数值.3.3.3指针偏移运算法则在寄存器寻址指针 [AR1\\\/2,P#byte.bit] 这种结构中,P#byte.bit如何参与运算,得出最终的地址呢

运算的法则是:AR1和P#中的数值,按照BYTE位和BIT位分类相加。

BIT位相加按八进制规则运算,而BYTE位相加,则按照十进制规则运算。

例如:寄存器寻址指针是:[AR1,P#2.6],我们分AR1=26.4和DBX26.4两种情况来分析。

当AR1等于26.4, AR1:26.2 + P#: 2.6 = 29.7 这是区域内寄存器间接寻址的最终确切地址数值单元3.3.3 AR的地址资料赋值通过前面的介绍,我们知道,要正确运用寄存器寻址,最重要的是对寄存器AR的赋值。

同样,区分是区域内还是区域间寻址,也是看AR中的赋值。

对AR的赋值通常有下面的几个方法:1、直接赋值法L DW#16#83000320LAR1可以用16进制、整数或者二进制直接给值,但必须确保是32位资料。

经过赋值的AR1中既存储了地址数值,也指定了存储区域,因此这时的寄存器寻址方式肯定是区域间寻址。

2、间接赋值法L [MD100]LAR1可以用内存间接寻址指针给定AR1内容。

具体内容存储在MD100中。

3、指针赋值法LAR1 P#26.2使用P#这个32位“常数”指针赋值AR。

总之,无论使用哪种赋值方式,由于AR存储的资料格式有明确的规定,因此,都要在赋值前,确认所赋的值是否符合寻址规范。

单片机中堆栈指令是什么寻址方式

1. 立即寻址方式( immediate addressing) 如 MOV AX, 3064H 中的源操作数2. 寄存器寻址方式( register addr es sing) 如 MOV AX, 3064H 中的目的操作数3. 直接寻址方式( direct addressing)如 MOV AX, [ 2000H ]4. 寄存器间接寻址方式( register indirect addressing) 如MOV AX, [BX]5 寄存器相对寻址方式( register rela tive addressing ) (或称直接变址寻址方式)如MOV AX, COUN T[ SI ]6. 基址变址寻址方式( based indexed addr essing)MOV AX, [BX] [DI ]7. 相对基址变址寻址方式( relative based indexed addressing)8. 比例变址寻址方式( scaled indexed addressing )9. 基址比例变址寻址方式( based scaled indexed addressing)

MCS-51共有哪7种寻址方式

各有什么特点

(1)立即寻址:操作数就包含在指令代码中,在操作码之后,称为立即数,用“#”表示。

(2)直接寻址:直接使用数所在单元的地址找到了操作数,所以称这种方法为直接寻址。

操作 数在SFR、内部RAM、位地址空间。

(3)寄存器寻址:对选定的工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR中 的数进行操作。

(4)寄存器间接寻址:把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单 元中取数据。

(5)变址寻址(基址+变址):以DPTR或PC为基址寄存器,累加器A为变址寄存器。

把两者内容相 加,结果作为操作数的地址。

(6)相对寻址:将PC中的当前内容与指令第二字节给出的数相加,结果作为跳转指令的转移地址 (转移目的地址)。

(7)位寻址:对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式。

8086\\\/8088的指令有哪些寻址方式

概念: 1.指令集:cpu能够执行的指令的集合。

2.指令:cpu所能够执行的操作。

3.操作数:参加指令运算的数据。

4.寻址方式:在指令中得到操作数的方式。

现在就重点讨论寻址方式,说白了也就是cpu怎么样从指令中得到操作数的问题。

另外再强调一点操作数还分种类:1)数据操作数:全都是在指令当中参加操作的数据。

1.立即操作数:它在指令中直接给出。

2.寄存器操作数:它被放到寄存器中。

3.存储器操作数:当然在存储器也就是内存中。

4.i\\\/o操作数:它在你给出的中。

2)转移地址操作数:在指令当中不是参加运算或被处理的数据了,而是转移地址。

还可以按照下面分类方式:1)源操作数src2)目的操作数dst源操作数都是指令当中的第2个操作数,在执行完指令后操作数不变。

而目的操作数是指令当中的第1个操作数,在执行完操作指令后被新的数据替代。

我们就围绕这几种操作数,也就是操作数所在的位置展开讨论。

先说数据操作数,它分3大类共7种。

1)立即数寻址方式:是针对立即操作数的寻址方式。

在指令当中直接给出,它根本就不用寻址。

例1:mov ax,1234h mov [bx],5678h在这里1234h和5678h都是立即操作数,在指令当中直接给出。

2):是针对寄存器操作数的寻址方式,它在寄存器中我们就用这中方式来找到它。

例2:mov bx,ax mov bp,[si]在这里ax,bx,ds都算是寄存器寻址,例1中的ax也是。

3)存储器寻址方式:针对在内存中的数据(存储器操作数)都用这种方式来寻找,一共有5种(这是我自己的说法,便于记忆)。

不得不提及以下的概念:由于8086\\\/8088的字长是16bit,能够2的16次方也就是64kb,而地址总线是20bit,能够2的20次方也就是1M空间,所以把内存分为若干个段,每个段最小16byte(被称为小节),最大64kb,它们之间可以相互重叠,这样一来内存就被分成以16byte为单元的64k小节,cpu就以1小节为单位寻址:在段寄存器中给出段地址(16bit),在指令当中给出段内(16bit),然后把段地址左移4bit再与求和就得到数据在内存当中的实际物理地址了,因而可以找到数据。

1.存储器方式:在指令当中以 [地址] 的方式直接给出数据所在内存段的。

例3:mov ax,es:[1234h] mov dx,VALUE mov dx,[VALUE]在这里[1234h]和VALUE就是在指令中直接给出的数据所在内存段的偏移地址(16bit)。

VALUE是符号地址,是用伪指令来定义的,它代表一个在内存中的数据(也就是它的名字)。

es:是段前缀符,用来指出段地址,在这之前应该将段地址添入段中,本例中是es,默认是ds,也就是不需给出。

应该注意 [地址] 与的区别,在直接给出的数据两边加 [] 表示存储器直接寻址,以区别。

另外 VALUE=[VALUE]。

2.:不是在指令中直接给出数据在内存中的偏移地址,而是把偏移地址放到了寄存器中。

例4:mov ax,[bx]这里[bx]就是,bx中应方入段内偏移地址。

其中:若使用bx,si,di默认段地址为ds,若使用bp则默认段地址为ss,并且允许段跨越,也就是加段前缀符。

注意:在寄存器两边加 [] 以与寄存器寻址区别。

3.寄存器间接:偏移地址是bx,bp,si,di中的内容再与一个8bit或16bit 的位移量之和。

例5:mov ax,[bx]+12h mov ax,[si]+5678h mov ax,[bp]+1234h在这里[bx]+12h,[si]+5678h,[bp]+1234h都是寄存器间接。

12h是8bit位移量,1234h和5678h是16bit位移量。

若使用bx,si,di则默认段寄存器是ds,若使用bp则默认段寄存器是ss,并且允许段跨越。

4.基址变址寻址:偏移地址是一个和一个内容的和,既:bx或bp中的一个与si或di中的一个求和而得到。

例6:mov ax,[bx+si] mov ax,[bp+di]上面[bx+si]和[bp+di]都是基址变址寻址。

若使用bx做则默认段地址为ds,若使用bp为则默认段为ss,允许段跨越。

5.基址变址:偏移量是一个基址寄存器一个只和再与一个8bit或一个16bit位移量只和得到。

例7:mov ax,[bx+si]+12h mov ax,[bp+di]+1234h[bx+si]+12h和[bp+di]+1234h就是基址变址相对寻址。

若使用bx做基址寄存器则默认段是ds,若使用bp做基址寄存器则默认段为ss。

允许段跨越。

下面是转移地址操作数的寻址方式:1)段内直接转移 1.段内直接短转移:cs(代码段)内容不变,而ip(指令指针寄存器)内容由当前ip内容+(-127~127),在指令中直接给出。

例8:jmp short SHORT_NEW_ADDR其中,short是段内短转移的操作符,用以指出是转移到当前位置前后不超过±127字节的地方。

而NEW_ADDR是要转移到的符号地址,它的位置应该在当前ip指针所在偏移地址不超过±127的地方。

否则语法出错。

2.段内直接近转移:cs内容不变,而ip内容由当前ip内容+(-32767~32767),在指令中直接给出。

例9:jmp near ptr NEAR_NEW_ADDR其中near ptr是段内近转移的操作符,用以指出转移到当前位置前后不超过±32767的地方。

NEAR_NEW_ADDR是要转移到的符号地址。

2)段内间接转移:cs的内容不变,而ip的内容放在寄存器中或者存储器中给出。

例10:jmp bx jmp word ptr [bx]+1234h这种寻址方式是在寄存器或存储器中找到要转移到的地址,而地址是16bit的,因而寄存器必须为16bit,如:bx,我们用word ptr来指定存储器单元也是16bit的。

注意:它是间接的给出,只能使用类似于数据操作数中的除以外的6种寻址方式(就在上面)。

3)段间直接寻址:cs和ip的内容全都变化,由指令当中直接给出要转移到的某一个段内的某一个偏移地址处。

例11:jmp 1234h:5678h jmp far ptr NEW_ADDR1234h送入cs中作为新的段地址,5678h送入ip中作为新的偏移地址。

far ptr是段间直接转移操作符,NEW_ADDR是另外一个段内的偏移地址,在这个指令中把NEW_ADDR的段地址送入cs(不用你给出),把它的段内偏移地址送入ip中作为新的偏移地址。

4)段间间接寻址:cs和ip的内容全变化,由指令当中给出的一个4字节连续存储单元,其中低2字节送入ip作为偏移地址,高2字节送入cs作为段地址。

例12:jmp dword ptr [bx][si]+1234h jmp dword ptr [1234h] jmp dword ptr [si]dword ptr是双字(4个字节连续存储单元)操作符,用来指出下面的存储单元是4个字节的。

由于它是4个字节的,所以只能使用类似于数据操作数中的存储器寻址方式(共5种,还记得吗

)。

另外作为特殊的寻址方式还有三种:I\\\/O寻址,串寻址,隐含寻址。

它们都分别针对I\\\/O指令,串操作指令以及无操作数的指令,而且都比较简单,读者自行总结。

到此为止说明了8086\\\/8088cpu中的所有寻址方式,我这里只是个总结,具体的细节还要大家自己钻研课本,才能理解。

写的有些仓促可能有些遗漏或错误,还请谅解。

汇编语言中操作数寻址方式有哪些,各自有什么特点,怎么区分呢

形成操作数的有址的方法,称作数的寻址方式。

  例如,一种单地址指令的结构如示,其中用X、I、D各字段组成该指令的操作数地址 操作码OP 变址X 间址I  形式地址D  指令中操作数字段的地址码是由形式地址和寻址方式特征位等组合形成,因此,一般来说,指令中所给出的地址码,并不是操作数的有效地址。

因此,寻址过程就是把操作数的形式地址,变换为操作数的有效地址的过程。

一、隐含寻址   在指令中不明显的给出而是隐含着操作数的地址。

例如,单地址的指令格式,没有在地址字段中指明第二操作数地址,而是规定累加寄存器AC作为第二操作数地址,AC对单地址指令格式来说是隐含地址。

二、立即寻址  指令的地址字段指出的不是操作数的地址,而是操作数本身。

这种方式的特点是指令执行时间很短,不需要访问内存取数。

   例如:单地址的移位指令格式为   OP(移位)  F  D这里D不是地址,而是一个操作数。

F为标志位,当F=1,操作数进行右移;当F=0时,操作数进行左移。

三、直接寻址  直接寻址特点是:在指令格式的地址字段中直接指出操作数在内存的地址D。

点击演示  采用直接寻址方式时,指令字中的形式地址D就是操作数的有效地址E,既E=D。

因此通常把形式地址。

点击演示 D又称为直接地址。

此时,由寻址模式给予指示。

如果用S表示操作数,那么直接寻址的逻辑表达式为 S=(E)=(D)四、间接寻址  间接寻址的情况下,指令地址字段中的形式地址D不是操作数的真正地址,而是操作数地址的指示器,D单元的内容才是操作数的有效地址。

  如果把直接寻址和间接寻址结合起来,指令有如下形式: 操作码  I  D  寻址特征位I=0,表示直接寻址,这时有效地址E=D;I=1,表示间接寻址,这时有效地址E=(D)。

  间接寻址方式是早期计算机中经常采用的方式,但由于两次访存,影响指令执行速度,现在已不大使用。

五、寄存器寻址方式和寄存器间接寻址方式  当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。

此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。

   寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。

六、相对寻址方式  相对寻址是把程序计数器PC的内容加上指令格式中的形式地址D而形成操作数的有效地址。

程序计数器的内容就是当前指令的地址。

“相对”寻址,就是相对于当前的指令地址而言。

点击演示  采用相对寻址方式的好处是程序员无须用指令的绝对地址编程,所编程序可以放在内存任何地方。

  此时形式地址D通常称为偏移量,其值可正可负,相对于当前指令地址进行浮动。

七、基址寻址方式 基址寻址方式是将CPU中基址寄存器的内容加上指令格式中的形式地址而形成操作数的有效地址。

点击演示 它的优点是可以扩大寻址能力。

同形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。

八、变址寻址方式  变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效地址。

但使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律性变化。

九、块寻址方式  块寻址方式经常用在输入输出指令中,以实现外存储器或外围设备同内存之间的数据块传送。

块寻址方式在内存中还可用于数据块搬家。

块寻址时,通常在指令中指出数据块的起始地址(首地址)和数据块的长度(字数或字节数)。

  如果数据块是变长的,可用三种方法指出它的长度:  (1)指令中划出字段指出长度;  (2)指令格式中指出数据块的首地址与末地址;  (3)由块结束字符指出数据块长度。

 操作码 首地址 标志位 末地址十、段寻址方式  微型机中采用了段寻址方式,例如它们可以给定一个20位的地址,从而有1M存储空间的直接寻址能力。

为此将整个1M空间存储器以64K为单位划分成若干段。

在寻址一个内存具体单元时,由一个基地址再加上某些寄存器提供的16位偏移量来形成实际的20位物理地址。

这个基地址就是CPU中的段寄存器。

在形成20位物理地址时,段寄存器中的16位数会自动左移4位,然后以16位偏移量相加,即可形成所需的内存地址。

  这种寻址方式的实质还是基址寻址。

点击演示

汇编语言的寻址方式怎么判断?

汇编语言的寻址方式就是寻找操作数所在地址的方法,有七种:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址。

1、立即寻址:操作数在指令中,如:MOV AL,12H(源操作数)2、寄存器寻址:操作数在指令中的寄存器中,如:MOV AL,BH(源操作数)3、直接寻址:操作数所在存储器的有效地址在指令中,如:MOV AL,[12H](源操作数)4、寄存器间接寻址:操作数所在存储器的有效地址在指令中的寄存器中,如:MOV AL,[BX](源操作数)5、寄存器相对寻址:操作数所在存储器的有效地址为指令中的寄存器加位移量,如:MOV AL,[BX+12H]或MOV AL,DAVL[BP](源操作数)6、基址变址寻址:操作数所在存储器的有效地址为指令中的基址寄存器加变址寄存器,如:MOV AL,[BX+SI]或MOV AL,[BX][SI](源操作数)7、相对基址变址寻址:操作数所在存储器的有效地址为指令中的基址寄存器加变址寄存器,再加位移量,如:MOV AL,[BX+SI+12H]或MOV AL,DAVL[BX][SI](源操作数)。

MOV DAVL[BP],AX 中目的操作数是寄存器相对寻址,源操作数是寄存器寻址。

PLC中何时用间接寻址编程无静态参数时FB与FC用法一样吗

问:PLC中何时用间接寻址编程无静态参数时FB与FC用法一样吗答:不一样。

FC分两种,一种是不带参数功能的FC(一般为绝对寻址,OB1一般只调用一次,为了优化OB1结构更美观、清爽),一种是带参数功能的FC(需要编辑对外管脚in,out,in_out等)这种FC能多次调用,但必须保证功能一样,如水泵1,水泵2,水泵3等,功能一样,比如3个都是星型启动10秒后转三角形启动或3个都是正转10秒后反转。

FB也分两种,一种是带静态参数FB(有初始值),一种是不带静态参数FB(无初始值)可以当做FC一样理解,唯一区别是FB多了一个背景数据块DB,DB就相当于FB的大脑。

就像我们上面讲的的3个水泵,它们是不需要背景数据块的,是死的,固定模式,启动10秒后自动转三角型,死的直接调用FC。

如我们有个储罐,一个泵进水,一个泵出水,我们要控制储罐的液位,这时候就不能用功能FC,必须使用功能块FB,因为控制液位需要大脑DB思考的,所有在控制过程中产生的背景数据是要零时储存在DB内等下一个周期再储存时覆盖的。

无静态参数你可以理解为第一次调用FB或断电后FB里的BD背景数据被清空。

带静态参数的就是第一次调用FB或断电后FB里的BD背景数据第一次参与计算时使用静态参数。

总结:FC,死的,不参与自由动态控制。

FB活的,参与自由动态控制,有大脑DB。

FB可以替代FC,但FC不能替代FB。

小提示:每一个FB必定对应一个DB(共享数据块)或DI(背景数据块)。

背景数据块DI内的数据只针对对应的FB调用,不对外调用。

共享数据块DB内的数据可以对外调用。

纯个人理解并手打整理,若有理解错误请各位提示出来。

望采纳。

51单片机最小系统板的设计的毕业论文怎么写

8051单片机共有7种寻址方式。

寻址方式是指令中确定操作数的形式,用来确定操作数所处的存储空间。

1.立即寻址:在指令中直接给出操作数 MOV A, #80H 8位操作数 MOV A, #2000H 16位操作数 2.直接寻址:指令中直接给出操作数地址 (1)SFR,这一存储空间只能使用直接寻址 MOV PSW, #50H (2)内部数据RAM,这一存储空间可以使用直接寻址和寄存器间接寻址 MOV A, 30H 3.寄存器寻址:以通用寄存器的内容作为操作数(通用寄存器包括A, B, DPTR, R0~R7) INC DPTR 注意:A、B既是通用寄存器,也是SFR(直接寻址) 4.寄存器间接寻址:以寄存器中的内容作为操作数的地址 能够用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP 区分内部数据RAM寻址和外部数据RAM寻址:外部数据RAM寻址指令上采用MOVX 对内部数据RAM寻址:使用8位的R0或者R1即可 MOV @R0, A 对外部数据RAM寻址:使用P2端口提供高8位地址,使用R0或者R1提供低8位地址;或者使用16位的DPTR提供地址 MOVX A, @R1 MOVX @DPTR, A 5.变址寻址:以基址寄存器PC或者DPTR与变址寄存器A中的内容之和作为操作数的地址 变址寻址只能对程序存储器中的数据进行寻址,由于程序存储器是只读的,因此变址寻址只有读操作,指令上采用MOVC MOVC A, @A+DPTR MOVC A, @A+PC 6.相对寻址:用于修改PC的值,使得PC加上指令中给出的一字节的偏移量 由于转移指令有两字节和三字节这两种形式,因此偏移量的范围分别为-126~+129和-125~+130 SJMP 80H 7.位寻址:以位地址中的内容为操作数 SETB 20H MOV 32H, C 总结一下各种寻址方式的使用场合: 立即寻址:常数 直接寻址:SFR和内部数据RAM 寄存器寻址:寄存器区 寄存器间接寻址:内部数据RAM和外部数据RAM 变址寻址:程序存储器 相对寻址:PC 位寻址:位地址区

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片