小谈16位汇编NEG求补指令
来源:互联网 发布:帝国cms采集规则下载 编辑:程序博客网 时间:2024/05/19 20:45
16位汇编,看到别人写的3行代码对一个32位数求补,举例子论证
NEG是求补指令,把他之后的操作数求补(先求反再加1)
本指令影响标志位CF、OF、SF、PF、ZF及AF.
有一个32位的数
高16位存储在Dx
低16位存储在Ax,写出指令对其求反
NEG DX
NEG AX
SBB DX,0
NEG后面的操作数,如果值不为0,CF就总为1
让我死都不明白的是为什么NEG指令要这样设置,为什么如果NEG后面操作数不为0就让那个CF等于1?当操作数为0时,取反加1还是0进了一位,当操作数为0的时候CF才应该等于1啊,而其他数求补都没有进位,为什么CF就等于1了呢?
后来发现在这道题中就可以看出这样设置非常正确
举个例子,假如DX和Ax中的数都不为0,
设Dx= 0000 0000 0000 1000
AX= 0000 0000 0000 0010
这个数完整的是
0000 0000 0000 1000 0000 0000 0000 0010
求补
1111 1111 1111 0111 1111 1111 1111 1110
分别求反两个数
则DX=1111 1111 1111 1000
AX=1111 1111 1111 1101
这个数完整写出来
1111 1111 1111 1000 1111 1111 1111 1101
对比正确求反结果,DX多加了一个1(注:求反与求补不同)
NEG指令设置的是后面的操作数只要不为0则CF为1
所以在SBB(sub with borrow)的时候,把CF减了进去
我们再来看当其中DX和AX其中一个为0的时候
我们就设DX= 0000 0000 0000 1000
AX=0000 0000 0000 0000 0000
NEG DX
则dx=1111 1111 1111 1000
NEG AX
AX仍然为0,且CF=0
SBB DX,0
DX<- DX-0-CF
即:DX<- DX-0-0
DX的值不变
得到1111 1111 1111 1000 0000 0000 0000 0000
我们来求补0000 0000 0000 1000 0000 0000 0000 0000 这个数
先求反1111 1111 1111 0111 1111 1111 1111 1111
加1
1111 1111 1111 1000 0000 0000 0000 0000
得出的结果是正确的
其实现在看这个问题不是很难,不过我们知道了为什么NEG指令对后面操作数如果不是0,CF就等于1,和平常的无符号数溢出有点不一样
- 小谈16位汇编NEG求补指令
- 研究16位汇编NEG求补指令
- 带借位减法指令SBB,求补指令NEG
- 汇编指令NEG释疑,取补?取反?
- 【16位汇编】neg+sbb算术运算代替逻辑跳转
- 汇编求补8位二进制数
- 16位汇编指令
- neg指令
- neg+sbb指令
- NEG指令妙用思考题
- 16位汇编中的伪指令
- 关于汇编指令:NEG 用C\C++如何操作的问题
- 关于汇编中的NEG指令正解!(补码,反码,原码)现实意义
- 16位汇编第六讲汇编指令详解第二讲
- 汇编总结 标志位/指令
- 汇编指令与标志位
- 汇编中的位操作指令
- 32位汇编指令笔记
- 王垠:我和Google的故事
- servletcontext,session,request的生命周期
- 硬盘和软盘的引导扇区结构
- C++中的空类,编译器默认可以产生哪些成员函数
- 2.创建一个抽象类A,该类中包含一个求两个数之和抽象方法。创建一个子类B,在B中重写求和方法,且使用方法重载使得方法可以分别计算整数、双精度、字符串
- 小谈16位汇编NEG求补指令
- Thinking in Java之匿名内部类
- 函数指针的应用(三)
- 运用C#编程通过OPC方式实现PC机与西门子PLC通讯 --异步通讯篇
- 包、访问权限、对象的组合
- 138 - Street Numbers//暴力or解方程
- 纯Java文件操作工具,支持文件、文件夹的复制、删除、移动
- 差分约束系统详解
- ubuntu上编译内核模块