写出对存放在DX和AX中双字长数求补的指令序列解决方案

写出对存放在DX和AX中双字长数求补的指令序列
写出对存放在DX和AX中双字长数求补的指令序列:
答案:
NEG DX
NEG AX
SBB DX,0
为啥还要跟个 sbb dx,0?
------解决方案--------------------
检查是否有借位
------解决方案--------------------
这个,看指令的介绍,NEG 是 0 减去源操作数得到结果。这个是运算逻辑,和 cpu 的具体实现上不一定一致。
NEG (DX:AX) -> 00000000 - (DX:AX) -> (0000 - DX) 和 (0000 - AX) 两组。(0000-DX) 就是 NEG DX;(0000-AX) 就是 NEG AX。但 (0000-AX) 在 AX 非 0 时,就需要从高位字 (即 NEG DX 后的 DX) 借位;怎么借位呢,最简单的自然就是 SBB DX, 0 了。
------解决方案--------------------
检测carry flag?
------解决方案--------------------
经过百度得知   NEG指令是取反指令.   NEG AX   等于   0减去AX    所以喃运算出来的结果比实际结果大一,  再因为这个指令要影响标志寄存器.所以用带进位的减法减去标志位..SBB AX,0  就相当于AX-0-CF.就是这样的..