(1) 不考虑借位的减法指令SUB
格式: SUB dest, src
操作: dest←(dest)-(src)
注:
指令例子:
SUB AL,60H
SUB [BX+20H],DX
SUB AX,CX
2. 减法指令
1
SBB指令主要用于多字节的减法。
格式: SBB dest, src
操作: dest←(dest)-(src)-(CF)
指令例子:
SBB AX,CX
SBB WORD PTR[SI],2080H
SBB [SI],DX
(2) 考虑借位的减法指令SBB
2
例:x、y、z均为32位数,分别存放在地址为X, X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现wx+y+24-z,结果放在W, W+2单元中。
MOV AX, X
MOV DX, X+2
ADD AX, Y
ADC DX, Y+2 ; x+y
ADD AX, 24
ADC DX, 0 ; x+y+24
SUB AX, Z
SBB DX, Z+2 ; x+y+24-z
MOV W, AX
MOV W+2, DX ; 结果存入W, W+2单元
3
作用类似于C语言中的”--”操作符。
格式:DEC dest
操作: dest ←(dest)-1
指令例子:
DEC CL
DEC BYTE PTR[DI+2]
DEC SI
(3) 减1指令DEC
4
减一指令通常用于存储器寻址地址指针向低地址方向修正或用于循环过程计数器记数指针修正。
例将数据段偏移地址为2000H开始100字节内容传送到同段偏移地址为2050H开始100个字节单元中去。
5
格式: NEG dest
操作: dest ← 0-(dest)
利用NEG指令可得到负数的绝对值。
例:若(AL)=0FCH,则执行 NEG AL 后,
(AL)=04H,CF=1
本例中,0FCH为-4的补码,执行求补指令后,即得到4(-4的绝对值)。
(4) 求补指令NEG
6
例已知内存BUFF开始,存放有100个字节型带符号数,每个单元数据求其绝对值并存回原处。
7
格式: CMP dest, src
操作: (dest)-(src)
CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。
指令例子:
CMP AL,0AH
CMP CX,SI
CMP DI,[BX+03]
(5) 比较指令CMP
8
根据标志位来判断比较的结果
1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。
2)若两个数不相等,则分两种情况考虑:
①比较的是两个无符号数
若CF=0,则dest>src;
若CF=1,则dest<src。
②比较的是两个有符号数
若OF⊕SF=0(两标志位同状态),则dest>src;
若OF⊕SF=1(两标志位异状态),则dest<src。
9
(6)压缩BCD码减法调整指令DAS
指令格式: DAS
指令功能: 对AL中两个压缩的BCD码相减后的结果进行调整。(类似DAA)
10
《微型计算机系统原理及应用》指令系统(减法指令) 来自淘豆网m.daumloan.com转载请标明出处.