X86汇编的加减法和循环
X86汇编的加减法和循环
加法:add
减法:substract
寄存器:register (8/16)
内存:memory (8/16)
立即数:immediate (8/16)
加减法
CPU内部有一个标志寄存器(eflags),它的第0位就是CF位,用来保存进位和借位,当计算结果出现进位和借位时,CF会被置一
1 | ; 不产生进位的加法 |
第一次加法时cf小写为,所以值位0,不产生进位
第二次加法CF大写,产生进位
减法同理
循环
loop循环
每次执行到loop时,会判断CX寄存器是否为0,不为0则跳到标号处继续执行,并自动将CX-1。直到CX为0
1 | 标号 |
计算1+2+…+100
1 | ; 设定循环次数 |
自增和自减
自增:incease = add ax, 1
自减:decease
inc和dec虽然也是加减法,但是它们并不影响CF标志位
16位寄存器处理32位加减法
解决思路时两个相加或者相减的数,都用2个寄存器来保存,然后分别把高位和高位相加减,低位和低位相加减,但是低位相加可能会产生进位,相减可能会产生借位,此时add/sub指令就不能满足要求了,此时需要两个指令
adc = add with carry = 被加数+加数+CF
sbb = sub with carry = 被减数-减数-CF
1 | ; bx:ax = 0x0001f000 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ansore!






