MOV AX,[BX+6] ;偏移值写在括号内
6 基址变址寻址
操作数的有效地址为:
EA1 = BX + SI / DI
或 EA2 = BP + SI / DI
当基址寄存器选用BX时,数据隐含存于数据段中;当基址寄存器选用BP时,数据隐含存于堆栈段中,即操作数的物理地址为:
PA1 = DS × 10H + EA1 或 PA2 = SS × 10H + EA2 7 相对基址变址寻址 操作数的有效地址为:
EA1 = BX + SI/DI + 8位/16位 disp 或 EA2 = BP + SI/DI + 8位/16位 disp
当基址寄存器选用BX时,数据隐含存于数据段中;当基址寄存器选用BP时,数据隐含存于堆栈段中,即操作数的物理地址为:
PA1 = DS × 10H + EA1 或 PA2 = SS × 10H + EA2
8086/8088指令系统按其功能可分6类: 1. 数据传送指令 2. 算术运算指令 3. 逻辑指令 4. 串操作指令 5. 控制转移指令 6. 处理机控制指令 ①MOV指令传送数据的位数由寄存器或立即数决定,dst和src数据位数必须相同?下面的一些用法是错误的: MOV ES,AL; MOV CL,4321H?
②MOV指令中的dst和src两操作数中必有一个是寄存器,不允许用MOV实现两存储单元间的传送?若需要时,可借助一个通用寄存器为桥梁,即:
MOV AL,[SI]; 通过AL实现(SI)和(DI)所指的两存储单元间的数据传送 MOV [DI],AL?
③不能用CS和IP作目的操作数;
④不允许在段寄存器之间直接传送数据; ⑤不允许用立即数作目的操作数;
⑥不能向段寄存器送立即数,要对段寄存器初始化赋值,必须通过CPU的通用寄存器? 例如:
MOV AX,DATA; 将数据段地址DATA通过AX装入DS中 MOV DS,AX?
例:以下指令均为合法的传送指令,括号中为目标操作数与源操作数的寻址方式。 1) MOV AL,5 ;(寄存器,立即数) 2) MOV AX,BX ;(寄存器,寄存器) 3) MOV DS,AX ;(段寄存器,寄存器) 4) MOV AX,DS ;(寄存器,段寄存器)
5) MOV ES:VAR,12 ;(存储器,立即数) 6) MOV WORD PTR [BX],12 ;(存储器,立即数)
其中:VAR为符号地址;WORD PTR指明存储器的属性是字属性。 ) 进栈指令PUSH 格式: PUSH src
src可以是:r16、seg、m16
功能:堆栈指针减2,并将寄存器、段寄存器或存储器中的一个字数据压入堆栈。 即:① SP ← SP - 2
② (SP+1,SP) ← (src)
执行过程可描述为:先减后压 ) 出栈指令POP 格式: POP dest
dest可以是:r16(除CS外)、seg、m16
功能:将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。 即: ① (dest) ← (SP+1,SP) ② SP ← SP + 2
执行过程可描述为:先弹后加
由于XCHG指令不允许同时对两个存储单元进行操作,因而必须借助于一个通用寄存器。①先把一个存储单元中的数据传送到通用寄存器;②再将通用寄存器中的内容与另一个存储单元内容进行交换;③把通用寄存器中的内容回传给第一个存储单元。 换码指令 XLAT 格式:XLAT
源操作数、目标操作数均隐含。
功能:把数据段中偏移地址为BX+AL的内存单元的内容传送到AL中,即:AL←(BX + AL)。
1) 对外设端口操作时,当端口地址在0~255范围内,寻址方式可选用直接寻址,也可选用间接寻址;当端口地址大于255时,只能选用间接寻址,并且地址寄存器只能用DX。 (2) 数据寄存器只能用AL(字节操作)或AX(字操作)。当使用AX时,对IN指令来说:是将port或DX所指向的端口数据读入AL,将port+1或DX+1所指向的端口数据读入AH;对OUT指令来说:是将AL寄存器内容送port或DX所指向的端口,将AH寄存器内容送port+1或DX+1所指向的端口。
数据传送指令除SAHF、POPF指令对标志位有影响外,其余指令对标志位无影响。
串操作指令共有5条,串传送指令MOVS、串装入指令LODS、串送存指令STOS、串比较指令CMPS、串扫描指令SCAS。
控制转移指令包括:转移指令、循环控制指令、过程调用指令和中断指令等4类。 (1) 中断调用指令 INT n 格式:INT n
功能:产生一个类型为n的软中断 操作:
① 标志寄存器入栈;
② 断点地址入栈,先CS入栈,后IP入栈;
③ 从中断向量表中获取中断服务程序入口地址,即: IP ← (0000:4n+1,0000:4n) CS ← (0000:4n+3,0000:4n+2) (2) 溢出中断指令 INTO 格式:INTO
功能:检测OF标志位,当OF=1时,产生中断类型为4的中断;当OF=0时,不起作用。 操作:
① 标志寄存器入栈;
② 断点地址入栈,先CS入栈,后IP入栈;
③ 从中断向量表中获取中断服务程序入口地址,即: IP ← (0000:0011H,0000:0010H) CS ← (0000:0013H,0000:0012H) ) 中断返回指令IRET 格式:IRET
功能:从中断服务程序返回断点处,继续执行原程序。IRET指令是中断服务程序执行的最后一条指令。 操作:
① 断点出栈,先IP出栈,后CS出栈; ② 标志寄存器出栈;