assembly 如何在此添加后不设置溢出标志?

s6fujrry  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在学习x86汇编(更具体地说是8086),我对标志的概念感到困惑,我试着在网上搜索它,发现了这张图片:

根据该图像,在两个16位数的加法运算之后,OF标志仍然被清除为0。
但我了解到,如果要相加的两个数字的MSB是off(即0),而结果的MSB是1,则发生了溢出。
链接到我从中了解到这一点的网页:http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt
有人能解释一下为什么OF仍然是0吗?

qltillow

qltillow1#

用手算一下
同时设置它们

0110 0101 1101 0001
+ 0010 0011 0101 1001
=========================

                    1
  0110 0101 1101 0001
+ 1101 1100 1010 0110
=======================

两个都开始工作

10 0010
  0110 0101 1101 0001
+ 0010 0011 0101 1001
=========================
              10 1010

                 1111
  0110 0101 1101 0001
+ 1101 1100 1010 0110
=======================
                 1000

但它们已经不匹配了

11111 1011 0000 1111
  0110 0101 1101 0001
+ 1101 1100 1010 0110
=======================
  0100 0010 0111 1000

无借位,因此借位标志= 1,进位标志= 1(借位的反相)。输入和输出的msbit相同,因此无带符号溢出。非零,因此无零标志。并且msbit为零,因此负标志为零。

相关问题