微机复习第三章 3

1.除法指令

1)无符号除法指令

DIV  OPRD

若OPRD是字节数,则执行AX/OPRD  AL=商 AH=余数

若OPRD是双字节(字)数,则执行 DXAX/OPRD AX=商 DX=余数

 指令要求被除数是除数的双倍字长

对6个标志位均无影响

2.BCD码(十进制)运算调整指令

共6条,均为隐含寻址方式,隐含的操作数是     AL或AL、AH;

不能单独使用,要紧跟在相应的算术运算指令    之后(加法、减法、除法)或之前(乘法);

执行结果为压缩BCD码或扩展BCD码表示的十进制数。

(1)压缩BCD码加法的十进制调整指令DAA

MOV  AL,48H     

ADD  AL,27H     

DAA

(AL)=75H,AF=1,CF=0

DAA指令影响CF、SF、PF、AF、ZF    不影响OF

(2)非压缩BCD码加法的十进制调整指令AAA

若(AL)中低4位 >9 或 AF=1     则(AL)+6 →(AL),(AH)+1,    并使AF=1

屏蔽掉(AL)中高4位,     即(AL)←(AL)∧0FH,CF ←AF

MOV  AL,09H ;BCD数9
	MOV  BL,04H;BCD数4
	ADD  AL,BL  
           		;(AL)=09H+04H=0DH
	AAA  
    			;(AL)=0DH+06H=03H  
			;		(高4位清0)
			;(AH)=1;(CF)=1

AAA指令只影响AF和CF标志    

(3)非压缩BCD码减法的十进制调整指令DAS

 若(AL)中低4位 >9 或 AF=1

 则(AL)— 06H →(AL),并使AF=1

若(AL)中高4位 >9 或 CF=1    

则(AL) — 60H →(AL),并使CF=1

DAS指令影响CF、SF、PF、AF、ZF    不影响OF

逻辑运算和移位类

1.逻辑运算

逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数

除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0

1)“与”指令AND

格式:  AND  OPRD1,OPRD2

实现两操作数相与的运算

使目标操作数的某些位不变,某些位清零

 在操作数不变的情况下使CF和OF清零

源操作数可以是立即数、寄存器或存储器 目标操作数可以是寄存器或存储器

应用实例
AND  AL,0FH 
AND  CX,0FF00H
AND  AX,BX
AND  AX,[BX]DATA

AND  AX,AX
		;AX不变,CF=OF=0

2)“或”指令OR

OR  OPRD1,OPRD2

操作:  两操作数相“或”,  结果送目标地址。

		OR  AL,20H
		OR  AX,00FFH
		OR  [BX],AL

应用

实现两操作数相“或”的运算

使某些位不变,某些位置“1”

在不改变操作数的情况下使OF=CF=0

3)“非”运算指令NOT

格式:NOT  OPRD

操作:操作数按位取反再送回原地址

指令中的操作数不能是立即数

指令的执行对标志位无影响

4)“异或”运算指令XOR

格式:  XOR  OPRD1,OPRD2

操作:  两操作数相“异或”, 结果送目标地址。

5)“测试”指令TEST

格式: TEST  OPRD1,OPRD2

操作: 执行“与”运算,但运算的结果 不送回目标地址。

应用:常用于测试某些位的状态

2. 移位指令

1) 非循环移位指令

算术左移和逻辑左移SAL(有符号数)/SHL(无符号数)

SAL  OPRD,1

SAL  OPRD,CL

SHL  OPRD,1

SHL  OPRD,CL

最高位或最低位移入CF

移动一位后,若CF与最高不相等,则OF=1;否则OF=0

区别:SHL将操作数视为无符号数,SAL将操作数视为有符号数。        

 OF=1对SHL指令不表示左移溢出,对SAL指令表示左移后超出了符号数的表示范围。

逻辑右移SHR

格式:     SHR  OPRD,1     SHR  OPRD,CL

移动一位后,若次高位与最高位不相等,则OF=1;否则OF=0

SHR 指令影响标志位CF和OF。

 如果移动次数为1,且移位之后新的最高位和次高位不相等,则标志位OF=1,否则OF=0。若移位次数不为1,则OF状态不定。

SHR相当于无符号数整除以2的i次方

算术右移SAR

格式: SAR  OPRD,1      SAR  OPRD,CL

SAR  AL,1

SAR  SI,CL

SAR WORD PTR[BX],1  

SAR 指令影响标志位:CF、OF、PF、SF和ZF,AF值不变。

SHR相当于有符号数整除以2的i次方

2) 循环移位指令

不带进位位的循环左移指令ROL

指令格式:         ROL  OPRD,1         ROL  OPRD,CL

 ROL指令影响标志位CF和OF。

如果移动次数为1,且移位之后新的最高位和次高位不相等,则标志位OF=1,否则OF=0。

若移位次数不为1,则OF状态不定。

 

不带进位位的循环右移指令ROR

指令格式:         ROR  OPRD,1         ROR  OPRD,CL

 

带进位位的循环左移指令RCL

指令格式:         RCL  OPRD,1         RCL  OPRD,CL

 带进位位的循环右移指令RCR

 

2.程序控制指令

1.无条件转移指令  JMP

通过修改指令的偏移地址或段地址及偏移地址实现程序的转移

格式: JMP  OPRD 目标地址

(1)无条件段内直接转移

段内直接短转移

偏移地址为8位,转移范围为–128~+127B,在标号前加运算符SHORT;

段内直接近转移

偏移地址为16位,转移范围为–32768~+32767B,在标号前加运算符NEAR,缺省时为近转移。

(2)无条件段内间接转移

 指令中的操作数是16位的寄存器或者存储器地址;

可以采用各种寻址方式;

  指令的执行是用指定的寄存器内容或者两个存储器单元内容作为目标的偏移地址来代替原来的IP的内容。

2、条件转移指令

在满足一定条件下,程序转移到目标地址继续执行

条件转移指令均为段内短转移,即转移范围为:-128~+127

C标志  JB/JNAE/JC   ;C=1转移即低于转移

JNB/JAE/JNC  ;C=0转移即高于转移

Z标志  JE/JZ   ;Z=1转移即相等或等于零转移

JNE/JNZ  ;Z=0转移即不等或不为零转移

S标志  JS      ;S=1转移即符号为负转移

JNS     ;S=0转移即符号为正转移

P标志  JP/JPE  ;P=1转移即偶转移

JNP/JPO ;P=0转移即奇转移

O标志  JO  ;O=1转移即溢出转移

JNO     ;O=0转移即未溢出转移

3. 循环控制指令

控制程序在以当前IP为中心的-128~+127范围内循环执行

循环次数由CX寄存器指定

不影响标志位

(1)无条件循环指令LOOP

格式:        LOOP  LABEL

循环条件:         CX ≠ 0

操作: DEC  CX                JNZ   符号地址

4.过程调用返回指令

 

 调用指令的执行过程

将调用指令的下一条指令的地址(断点)压入堆栈

获取子过程的入口地址(子过程第1条指令的偏移地址)

(执行子过程,含相应参数的保存及恢复)

将断点偏移地址由堆栈弹出,返回原程序

(1)段内直接调用

子过程与原调用程序在同一代码段,在调用之前只需保护断点的偏移地址

 格式:CALL  NEAR  PROC

执行过程:     

(SP)    ← (SP)-2     

(SP)+1← (IPH)     

(SP)    ← (IPL)   

 (IP)      ← (IP)+ 16位偏移量

(2)段内间接调用

指令格式:          CALL OPRD         OPRD为16位寄存器内容或者两个存 储器单元内容。

CALL  AX  ;(IP)←(AX)         

CALL WORD PTR[BX]          ;(IP)←((BX+1):(BX))

 返回指令

从堆栈中弹出断点地址,返回原程序

格式:RET    RET n

RET指令一般位于子程序的最后

RET指令不影响标志位

中断指令

中断指令的用途: 用户程序可通过中断指令调用操作系统提供的特殊子程序(称为系统功能调用)。

用来实现一些特殊的功能。如调试程序时单步、断点等。

调用BIOS提供的硬件低层调用。

(1)INT指令

格式:      INT  n

将FLAGS压入堆栈

(TF)←0, (IF)←0

将INT指令下一条指令的CS、IP压栈

取中断服务程序入口地址

(IP)   ←  ((n×4+1): (n×4))         (CS)  ← ((n×4+3): (n×4 +2))

 (2) 溢出中断指令INTO

格式:          INTO 相当于 INT 4

若OF=1,则启动一个类型为4的中断过程,给出一个出错标志,如果OF=0,不做任何操作。

INTO指令通常安排在有符号数加减运算指令之后。

(3) 中断返回指令

格式:      IRET

中断服务程序的最后一条指令,负责回复断点 恢复标志寄存器内容

指令的操作  

(IP)  ← ((SP+1): (SP)), (SP) ← (SP)+2

  (CS)   ← ((SP+1): (SP)), (SP) ← (SP)+2  

(FLAGS) ← ((SP+1): (SP)), (SP) ← (SP)+2

 指令对对各标志位均有影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值