1,已知在AX,BX中放32位有符号的二进制数,求其绝对值送入CX,DX中,其中AX,CX放高位。
分析:就是 AX: BX双字的绝对值放到CX: DX的双字中
(1)先判断AX,BX是不是为正,为正直接绝对值给CX,DX
(2)假如AX,BX为负求绝对值
(3)负数求绝对值 就是对这个数求补指令NEG opr;0减opr操作数
(4)这是个双字,系统只有16位,先0-低四位有借位,0-高位时还要减去借位。
(5)求补指令NEG 求补就是取反加一 低四位取反加一可以用,高四位取反加一不能用,
一个双字负数绝对值是这四条指令
NOT DX ;低位取反加一
NOT CX
ADD DX,1 ;低位取反加一
ADC CX,0;高位加上进位位
2,在1的基础上又另一题:已知BUF单元中字是低位,BUF+2单元中字是高位,双字32位求补。将BUF缓冲区中的32位数据取绝对值存回原单元。
MOV AX,BUF+2
CMP AX,0
JNS L ;AX为正转L
MOV BX,BUF
NOT BX;低位取反
ADD BX,1
MOV BUF,BX
NOT AX ;高位取反
ADC AX,0 ;考虑低位部分的进位
MOV BUF+2,AX
L:..
3,判断16位字value正负,求绝对值
分析:16位是一个字,直接NEG求补就行
MOV AX,VALUE
TEST AX,AX;是负数吗同时CF=0
JNS L ;AX为正转L
NEG AX ;求补求绝对值
L:...
4,