组装 - 进位标志VS溢出标志

Tom*_*m O 17 assembly

我有下一个代码:

mov al, -5
add al, 132
add al, 1
Run Code Online (Sandbox Code Playgroud)

当我检查时,溢出标志和进位标志将在第一个操作中设置,而在第二个操作中,仅设置溢出.

但我不明白为什么:

  1. 在无符号数字中,结果为143(8FH),为此适合8位无符号数(小于255)=>不应设置进位标志.在带符号的数字中,结果为127,它适合8位有符号,并且不应设置溢出.

怎么了?谢谢.

小智 26

当添加两个正数的结果为负或添加两个负数的结果为正时,会发生溢出.例如: +127+1=?

+127=0111 1111
  +1=0000 0001
     ---------
     1000 0000 
Run Code Online (Sandbox Code Playgroud)

当我们查看两个操作数的符号位和结果的符号位时,我们发现溢出发生且答案不正确.


Oli*_*rth 16

在无符号算术中,您已添加0xFB0x84,即251 + 132,其确实大于8位,因此进位标志已设置.

在第二种情况下,您将+127添加到1,这确实超过了有符号的8位范围,因此设置了溢出标志.

  • @Tom O:将所有值转换为带符号的8位.在第一个`add`中,你做-5 + -124,超过-128.在第二个`add`中,你正在做+127 + +1,超过+127. (3认同)