寻找操作数地址的方法
共有八种:
寄存器寻址方式
立即数寻址方式
存储器寻址方式:( 直接寻址方式,寄存器间接寻址方式,变址和基址寻址方式,基址变址寻址方式)
串操作寻址方式
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+3
MOV 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自动减量1
5,I/0端口寻址方式