首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2013-01-25 
写出对存放在DX和AX中双字长数求补的指令序列写出对存放在DX和AX中双字长数求补的指令序列:答案:NEG DXNEG

写出对存放在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.就是这样的..

热点排行