通用数据传输指令
MOV
POP PUSH
XCHG
CBW(convert byte to word)
CWD:
AX的内容扩展到DX中,形成DX:AX中的双字,即如果(AX)的最高有效位为0,则(DX)=0,若(AX)的最高有效位为1,则(DX)=0FFFFH
算术指令
ADD
SUB
对于减法对于标志位的影响:
CF是表示无符号数 减法的溢出(是否溢出)
OF是带符号数 减法的溢出
CF=1表示被减数的最高位有 向更高位的借位,否则则位0
OF=1表示两个操作数相反,而结果却与减数相同(你也可以直接记住特殊情况:正-负=负/负-正=正,这两个异常情况就是溢出)
关于NEG
在计算机系统当中,数值一律采用补码来表示。
NEG指令(求补)也就是补码的非:可以看作用0减取后面的数,并利用减法来判断对标志位的影响。(其实也就是补码的相反数)
(值得一提的是,在手算的过程中,补码的非是将所有位都取反,末尾加1)
与not不同的是,neg最后会有个末尾加1
对于NEG对于标志位的影响就可以看作0-操作的减法操作
首先给出neg对标志位的影响结论:
- CF:只有当操作数为0的时候,CF才为0,很好理解,毕竟CF考虑的是无符号数,那么肯定要借位的。
- OF:在学习补码的运算的时候,如果是8位时,原码的计算范围位-127~127,而补码的范围位-128 ~127(不做解释了,自己去学吧)
- 那么当0-(-128(1000 0000,补码的0唯一表示:0000 0000))时得到128,但128超过了补码的表示范围,此时就溢出,因此-128/-32768都会溢出。记住这两个就行了。
NEG的应用
求绝对值
MOV AX,A
MOV DX,A+2
CMP DX,0
JNS ZHENSHU
NEG DX
NEG AX
SBB DX,0;带进位减CF,也就是NEG AX(0-AX)
ZHENSHU:
MOV B,AX
MOV B+2,DX
INT 20H;结束程序
MUL与IMUL 以及符号扩展
DIV IDIV
习题
编程题:
1.编写程序段:(X+Y*Z-158)/X,其中X、Y、Z均是16位带符号数,已分别装入X、Y、Z单元中,要求上式计算结果的商存入AX,余数存入DX寄存器
MOV AX,Y
IMUL Z
MOV CX,AX
MOV BX,DX
MOV AX,X
CWD
ADD AX,CX
ADC DX,BX
SUB AX,158
SBB DX,0
IDIV X