汇编SUB和MUL的CF位
2015-10-28 18:52
204 查看
在汇编减法中,CF=INVERT(carry out of the MSB),原因如下。
考虑减法运算的实际过程。对于A - B操作,有
result=A+B¯+1=A+(M−1−B)+1=A−B+M
其中M = MAX + 1。(比如,若A为int类型,则MAX = 32767, M = 32768)
那么,便可以分情况讨论:
1. 则A - B + M >= M,A >= B,即被减数大于等于减数。此时CF = INVERT(1) = 0
2. 否则CF = 0,A - B + M < M,即被减数小于减数。此时CF = INVERT(0) = 1
通过总结,我们发现,CF = 0对应被减数大于等于减数(无借位);CF = 1对应被减数小于减数(有借位)。这说明,对于ADD,CF表示进位;而对于SUB,CF表示借位。
同时,这也解释了对于NEG指令,Any nonzero operand causes the Carry flag to be set。
而对于汇编乘法中的CF位,The Carry flag indicates whether or not the upper half of the product contains significant digits.
考虑减法运算的实际过程。对于A - B操作,有
result=A+B¯+1=A+(M−1−B)+1=A−B+M
其中M = MAX + 1。(比如,若A为int类型,则MAX = 32767, M = 32768)
那么,便可以分情况讨论:
1. 则A - B + M >= M,A >= B,即被减数大于等于减数。此时CF = INVERT(1) = 0
2. 否则CF = 0,A - B + M < M,即被减数小于减数。此时CF = INVERT(0) = 1
通过总结,我们发现,CF = 0对应被减数大于等于减数(无借位);CF = 1对应被减数小于减数(有借位)。这说明,对于ADD,CF表示进位;而对于SUB,CF表示借位。
同时,这也解释了对于NEG指令,Any nonzero operand causes the Carry flag to be set。
而对于汇编乘法中的CF位,The Carry flag indicates whether or not the upper half of the product contains significant digits.
相关文章推荐
- 开源操作系统和必备工具网站收集
- g++编译 参数 .
- 函数调用时函数栈状态分析
- 汇编调用c函数为什么要设置栈
- 汇编指令大全【转】
- 理解ORG指令
- X86汇编详解
- 汇编指令集
- __asm__ __volatile__内嵌汇编用法简述
- 这是我转载摘录的一篇《学习汇编的重要性》
- 8086汇编算术运算指令
- 8086汇编-转移指令
- ARM汇编EQU伪指令
- ARM汇编AREA伪指令
- 关于signed和unsigned的%d和%u
- 想请教如何深入学习汇编
- 汇编小抄:常用指令
- 《Linux 内核分析》课程作业(1)——计算机基本原理和汇编基础
- ARM汇编指令
- 反编译C程序为汇编代码,汇编代码执行过程的分析与思考