-
十三、直接、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址
2019-01-19 17:58:44计算机只容许使用bx、si、di、bp寄存器做间接和相对寻址 其中bx为基址存储器,si、di为变址存储器 内存寻址方式:确定访问内存存储单元偏移地址的方式称为寻址...相对基址变址寻址:[基址寄存器+变址寄存器+...计算机只容许使用bx、si、di、bp寄存器做间接和相对寻址
其中bx为基址存储器,si、di为变址存储器
内存寻址方式:确定访问内存存储单元偏移地址的方式称为寻址方式。
直接寻址:[偏移地址]
寄存器间接寻址:[基址寄存器/变址寄存器]
寄存器相对寻址:[基址寄存器/变址寄存器+偏移量值]
基址变址寻址:[基址寄存器+变址寄存器]
相对基址变址寻址:[基址寄存器+变址寄存器+偏移量值]
注意:
a 格式上的注意,正确区分寻址方式
b 五种寻址中,均可以使用段前缀 //ds:[0001H]
c masm编译器编译时,代码中的直接寻址必须采用段前缀的形式
指针寄存器包括堆栈寄存器SP(stack pointer)和基数指针寄存器BP(base pointer),变值寄存器包括源变址寄存器SI(source index)和目的变值寄存器DI(destination index)。这4个寄存器都是16位寄存器,这些寄存器在运算过程中也可以用来存放操作数(只能以字为单位),但经常的用途是在段内寻址时提供偏移地址,SP,BP一般与段寄存器SS联用,以确定堆栈寄存器中某一单元的地址,SP用以指示栈顶的偏移地址,而BP可作为堆栈区中的一个基地址,用以确定在堆栈中的操作数地址。SI,DI一般与段寄存器DS联用,以确定数据段中某一存储单元的地址,SI,DI具有自动增量和自动减量的功能,这一点使在串操作指令中用做变址非常方便,SI作为隐含的源变址DS联用,DI作为隐含的目的变址和ES连用,从而达到在数据段和附加段中寻址的目的。
BX+SI
BX+DI
BP+SI
BP+DI1. 直接寻址
偏移地址值直接出现在执行代码中。
mov 寄存器,[偏移地址] mov [偏移地址],寄存器
2. 寄存器间接寻址
偏移地址通过寄存器取得使用
mov 寄存器,[寄存器] mov [寄存器],寄存器
实例:
assume cs:daima daima segment mov ax,2000H mov ds,ax mov ax,1122H mov cx,3344H mov bx,0000H mov [bx],ax ;将ax值放入ds 2000:0000 mov bx,0002H mov [bx],cx ;将cx值放入ds 2000:0002 mov ax,4c00H int 21H daima ends end
3. 寄存器相对寻址
偏移地址值通过[寄存器+偏移量值]的形式运算后获得。
mov 寄存器,[寄存器+偏移量值] mov 寄存器,ds:[寄存器+偏移量值] mov [寄存器+偏移量值],寄存器 mov ds:[寄存器+偏移量值],寄存器
实例1:
assume cs:code,ds:data data segment db 'abc' data ends code segment start: mov ax,data mov ds,ax mov bx,0000H mov ah,[bx+0000H] mov al,[bx+0001H] mov ax,4c00H int 21H code ends end start
实例2:
;交换ds中偏移地址1和4,2和5,3和6的数据 assume cs:code,ds:data data segment db 'abcdef' data ends code segment start: mov ax,data mov ds,ax mov bx,0000H mov cx,3 A: mov ah,ds:[bx] mov al,ds:[bx+0003H] mov [bx+0003H],ah mov [bx],al inc bx loop A mov ax,4c00H int 21H code ends end start
实例3:
assume cs:code,ds:data data segment db 'abc' db 0H,0H,0H data ends code segment start: mov ax,data mov ds,ax mov si,0000H mov di,0003H mov cx,3 A: mov ah,[si] mov [di],ah inc si inc di loop A mov ax,4c00H int 21H code ends end start
4. 基址变址寻址方式
偏移地址值通过[基址寄存器+变址存储器]的形式运算后获得。
格式:
mov 寄存器,[基址寄存器+变址寄存器] mov [基址寄存器+变址寄存器],寄存器
例如:
mov ax,[bx+si] mov ax.[bx+di] ;不可以这样 mov ax,[si+di]
实例:
;累计相加偏移地址0002H 3次。 assume cs:code,ds:data data segment db 1H,1H,2H data ends code segment start: mov ax,data mov ds,ax mov ah,00H mov bx,0000H mov si,0002H mov cx.3 A: mov al,[bx+si] add ah,al inc bx dec si loop A mov ax,4c00H int 21H code ends end start
5. 相对基址变址寻址
偏移地址值通过[基址寄存器+变址寄存器+偏移量值]的形式运算后获得。
格式:
mov 寄存器,[基址寄存器+变址寄存器+偏移量值] mov [基址寄存器+变址寄存器+偏移量值],寄存器
实例:
;取出1H、3H放入ah、al assume cs:code,ds:data data segment db 0H,0H,0H,1H,2H,3H data ends code segment start: mov ax,data mov ds,ax mov bx,0000H mov si,0001H mov ah,[bx+si+0002H] mov di,0003H mov al,[bx+di+0002H] mov ax,4c00H int 21H code ends end start
-
2、指令寻址与数据寻址(直接寻址、间接寻址、寄存器寻址、寄存器间接寻址、隐含寻址、基址寻址、变址寻址、...
2020-10-16 14:53:472、指令寻址与数据寻址指令寻址思维导图顺序寻址跳跃寻址数据寻址直接寻址间接寻址寄存器寻址寄存器间接寻址隐含寻址立即寻址总结偏移寻址基址寻址变址寻址相对寻址堆栈寻址比较 指令寻址 思维导图 顺序寻址 由于...指令寻址
思维导图
顺序寻址
由于主存按字编址,所以指令地址每次+1;0-1-2-3-4-5-6-7-8
由于指令字长=2B,主存按字节编址,所以每条指令间隔地址为2;此时PC+1实际上是加了俩个地址;
由于采用变长指令字结构,所以指令字长不确定;当读取指令时,先通过操作码判断是几地址指令,然后在将剩余的操作数取出。此时每条地址指令间隔不定。
跳跃寻址
数据寻址
直接寻址
间接寻址
寄存器寻址
寄存器间接寻址
隐含寻址
立即寻址
总结
偏移寻址
基址寻址
1、用专用的基址寄存器保存程序首地址;或者用通用寄存器指明程序首地址(需要在逻辑地址中取几位指明用哪个通用寄存器作为基址寄存器);
2、物理地址 = 逻辑地址 + 基址地址变址寻址
与基址寻址的区别:
1、基址寄存器只能由操作系统管理用户不能管理;而变址寄存器用户可以管理
2、变址寄存器中的内容作为偏移量,形式地址作为基地址;(与基址寻址刚好相反)
PS:基址&变址复合寻址
相对寻址
1、当程序内代码片段移动时,跳转指令采用直接寻址会出现错误;若采用相对寻址,则不论怎么移动都只与PC有关。
2、实际位置与PC指针与偏移量有关
3、硬件如何实现数的“比较”?
堆栈寻址
硬堆栈:不需要访存
软堆栈:每次访问都需要进行访存比较
-
寻址方式 寄存器寻址方式 立即数寻址方式 存储器寻址方式...基址变址寻址方式 串操作寻址方式 I/O端口寻址方式
2015-11-24 14:29:53存储器寻址方式:( 直接寻址方式,寄存器间接寻址方式,变址和基址寻址方式,基址变址寻址方式) 串操作寻址方式 I/O端口寻址方式8086采用的是变字长指令格式,指令长度为1~6个字节,第一个字节包含操作码,第二...寻找操作数地址的方法
共有八种:
寄存器寻址方式
立即数寻址方式
存储器寻址方式:( 直接寻址方式,寄存器间接寻址方式,变址和基址寻址方式,基址变址寻址方式)
串操作寻址方式
I/O端口寻址方式8086采用的是变字长指令格式,指令长度为1~6个字节,第一个字节包含操作码,第二个字节通常表示寻址方式,第三个到第六个字节表示位移量,立即数。
1,寄存器寻址方式:指令所需的操作数在寄存器中,按指令给出的寄存器地址去获取操作数
指令代码: 操作码 REG (RI操作数)
在汇编指令中,寄存器地址直接用寄存器名表示
2,立即数寻址方式
指令所需的操作数直接在指令代码中,随着取指令一起取到BIU的指令队列中。
执行速度快,常用来提供常数
在汇编指令中,立即数只能作为源操作数
在宏汇编中,字符常量的存取 MOV AH,’A’
字符串常量的存取 MOV DX,”AB”3,存储器寻址方式
以下几种寻址方式,操作数在存储器中。
汇编中,存储单元地址使用逻辑地址: 段基值:偏移量
存储器寻址方式:形成操作数逻辑地址的偏移量
有效地址: 按指令中存取器寻址方式计算,得到的偏移量称为有效地址EA
有效地址EA是三个地址分量的某种组合:
(1)位移量:指令代码中的一个8/16位二进制数
(2)基地址:BX或BPD的内容
(3)变址量:SI或DI的内容根据三个地址分量的不同组合,有4中不同的存储器寻址方式:
a 直接寻址方式:指令中所需要的操作数直接放在存储器中,操作数的有效地址为有指令代码中的位移量提供
直接寻址方式可用数值地址或符号地址来表示:
I 数值地址:MOV BX,[1000H]
指令中也可以指定跨越前缀来取得其他段中的数据。
数值地址表示IDE直接寻址方式
II 符号地址 要区分是字或字节地址
MOV BX, VAR
符号地址表示的直接寻址方式
MOV DAB,0FH;DAB是字节地址
MOV CL ,DAB+3
上述2条指令分别等价于:
MOV DS:DAB,0FH
MOV CL,DS:DAB+3MOV AX,ES:DAW;DAW是字地址
b,寄存器间接寻址方式:指令所需的操作数在存储器中,操作数的有效地址EA 直接从SI,DI,BX,BP中获得
使用SI,DI,BX间接寻址时,隐含使用DS;
BP间接寻址,则隐含使用SS
MOV CH,[SI] = MOV CH,DS:[SI]
MOV [DI],AX = MOV DS:[DI],AX
MOV AL,[BX] = MOV AL,DS:[DX]
MOV [BP],DX = MOV SS:[BP],DX
寄存器间址可用来访问表,一位数组中的元素c,变址寻址和基址寻址方式:指令所需的操作数在存储器中,操作数的有效地址EA是两个地址分量之和
变址寻址:操作数的EA是SI或者DI内容与位移量之和
基址寻址:操作数的EA是BX或BP内容与位移量之和
变址或基址使用SI,DI,BX址时,隐含使用DS;
BP间接寻址,则隐含使用SS
MOV CH,10H[SI] = MOV CH,DS:10H[SI]
MOV TAB[DI],AX = MOV DS:TAB[DI],AX
MOV AL,ARY[BX] = MOV AL,DS:ARY[DX]
MOV STR[BP],DX = MOV SS:STR[BP],DX
用基址变址寻址方式可以方便的访问二维数组
位移量 数组首地址
基址寄存器 数组元素行址
变址寄存器 数组元素列址段基值 —-隐含有SS提供
用基址变址寻址方式访问二维数组
MOV AL, ARRAY[BP][SI]存储器操作数寻址方式地址计算小结:
4,串操作寻址方式
数据段中的源串有效地址隐含由SI提供,附加段中的目的串有效地址隐含由DI提供
SI => 源串有效地址EA
DI =>目的串有效地址EA
没完成一次串操作,指令按标志位DF自动修改SI/DI,使其指向下一个串元素的存储单元:
如:DF = 0,每完成一次字节串操作,SI/DI自动增量1
如:DF = 1,每完成一次字节串操作,SI/DI自动减量15,I/0端口寻址方式
-
间接寻址与寄存器寻址,基址寻址与变址寻址
2017-06-21 16:58:46基址寻址与变址寻址的比较基址寻址主要用于为程序或数据分配存储空间,故基址寄存器的内容通常由操作系统或管理程序确定,在程序运行过程中,值是不可变的,而指令字中的地址码是可变的。变址寻址间接寻址和寄存器寻址的比较
间接寻址
优点
扩大了操作数的寻址范围
便于编制程序,方便地完成子程序的返回缺点
访存次数多,执行时间长
寄存器寻址
优点
无须访存,减少执行时间
指令字短,节省存储空间基址寻址与变址寻址的比较
基址寻址主要用于为程序或数据分配存储空间,故基址寄存器的内容通常由操作系统或管理程序确定,在程序运行过程中,值是不可变的,而指令字中的地址码是可变的。
变址寻址中,变址寄存器的内容是用户自己设定的,在程序运行过程中是可变的,而指令字中的地址码是不可变的。编制寻址主要用于处理数组等问题,并且特别适合编制循环程序。
-
几个寄存器寻址方式
2020-12-29 21:49:34寻址方式名称: sa:[idata]直接寻址 sa:[bx]寄存器间接寻址 sa:[bp]寄存器间接寻址 ...sa:[bx+si]基址变址寻址 sa:[bx+di] 基址变址寻址 sa:[bp+si] 基址变址寻址 sa:[bp+di] 基址变址寻址 sa:[bx+si+idata -
Linux汇编----变址寻址与间接寻址
2016-08-14 13:13:59经常会把AT&T汇编语法中的变址寻址与寄存器间接寻址搞混。 变址寻址特别适合于访问内存中的一系列连续数据,即数组。表达式格式为 base_address(offset_address,index,size) -
基址寻址与变址寻址的区别
2018-12-21 09:31:01基址寻址与变址寻址都类似于相对寻址,它们的有效地址EA = 基址+指令字中形式地址A。 1、基址寻址 计算公式:EA = (BR) + A 有效地址是将CPU中基址寄存器BR的内容加上指令字中形式地址A。BR的内容由操作系统决定... -
寄存器与寻址
2015-07-22 15:06:592个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP) ,32位CPU增加2个16位的段寄存器:FS和GS。 4个段寄存器(ES、CS、SS和DS) 1个指令指针寄存器(IP) 1个标志寄存器(Flags) AX――累加器(Accumulator),... -
80386 寄存器和寻址
2018-11-06 15:26:53ebx是基址 [ebx+100h] 这就是地址 也可以[ebx+esi(ebi)+100h]作为源变址 和目的变址 ecx 计数 和 loop 连用 ebp 是栈底 esp 是栈顶 段寄存器 变成了这样 RPL是特权分段 TI=0找GDT TI=1找LDT 首先CS... -
寄存器相对寻址方式
2016-08-27 10:35:54操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、D I)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,有下列规定: 若有效... -
基址寻址和变址寻址的不同
2020-05-13 15:46:32基址寻址作用:1.可扩大寻址范围 2.有利于多道程序 3.基址寄存器内容由操作系统或管理程序确定 变址寻址的特点: 1.可扩大寻址范围 2.IX的内容由用户指定 3.便于处理数组问题 -
寄存器寻址方式
2019-11-19 22:29:13微机系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等。其中,后五种寻址方式是确定内存单元有效... -
七种寻址方式(寄存器相对寻址方式)
2018-01-22 19:12:33操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、D I)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,有下列规定: 若... -
详细解释基址寻址和变址寻址区别
2020-06-16 21:49:16变址寻址 定义:指令给出一个寄存器号和形式地址,寄存器的内容作为偏移量,形式地址作为基准地址。基准地址加上偏移量得到有效地址。 思考 从两者定义来看,感觉没有多大区别。只是寄存器中存放基准地址还是偏移... -
举例说明计算机中常用的变址寻址,堆栈寻址,从形式地址到得到操作数的寻址处理过程。
2020-04-24 12:28:54变址寻址,形式地址为变址寄存器名(或编号)和变址偏移值,把变址寄存器中的内容与变址偏移值相加得到操作数的地址,再读一次内存得到操作数; 堆栈寻址,通常形式地址为将写入堆栈的,或接受堆栈读出内容的寄存器... -
80386与8086在寄存器与寻址方式上的区别
2016-10-04 23:12:10寄存器区别: 1. 寄存器变成32位的。 2.多了一些系统程序用的寄存器:系统地址寄存器、控制寄存器、调试寄存器、测试寄存器。... 3....基址寄存器和 变址寄存器更灵活,常数偏移量可为 32位。 -
汇编寄存器和寻址方式简介
2009-06-11 12:52:001 寄存器:1)数据寄存器:AX,BX,CX,DX2)段寄存器 DS CS SS ES FS GS DS 数据段(BX,SI,DI) CS 代码段(IP) SS 堆栈段(SP) ES,FS,GS 附加段3) 变址(指示)寄存器:SI(源变址寄存器),DI (目标变址寄存器)4) ... -
汇编第一节-寄存器与内存寻址
2019-10-04 08:50:441. 内存寻址方式: 确定访问内存存储单元偏移地址方式,称为寻址方式。 名称 格式 直接寻址 [偏移量值] 寄存器简介寻址 [基址寄存器/变址寄存器] ...寄存器相对寻址 [基址...基址变址寻址 [基址寄存器... -
汇编语言中间接寻址(间接操作数)与变址寻址(变址操作数)的区别
2020-04-24 19:11:04间接寻址 间接寻址就是使用寄存器作为指针,控制该寄存器的值来寻到数组中的元素,如: array byte 10h,20h,30h; 定义数组 ...变址寻址 通过在原地址上增加一个寄存器、或者在原地址的基础上加上常数等方... -
基址加变址寻址方式
2016-08-27 10:37:19操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS... -
相对基址加变址寻址方式
2016-08-27 10:38:22操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中... -
七种寻址方式(基址加变址寻址方式)
2018-01-22 19:13:08操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS... -
计算机组成原理————寄存器寻址方式大总结
2020-03-17 17:24:09常见的寻址方式有立即寻址、直接寻址、间接寻址、寄存器寻址、寄存器间接寻址、相对寻址和变址寻址等。在立即寻址方式中,操作数包含在指令中;在直接寻址方式中,操作数存放在内存单元中;在寄存器寻址方式中,操作... -
七种寻址方式(相对基址加变址寻址方式)
2018-01-22 19:13:34操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中... -
8086寻址方式
2017-09-04 22:57:42寄存器变址寻址 寄存器相对变址寻址 8086寻址方式8086寻址方式主要分为三种,立即数寻址方式,寄存器寻址方式,存储器寻址方式。 寻址:就是寻找操作数的过程。注:获取操作数采用的寻址方式,会影响机器运行效率。...