.data
val1 BYTE 10h
val2 WORD 8000h
val3 DWORD 0FFFFh
val4 WORD 7FFFh
如果使用ADD指令将val2递增1,则进位值将是多少 并签署标志?
如果使用ADD指令将val4加1,那么Over-的值是多少? 流和标志标志?
我回答了两个问题并且错了。为什么答案是什么?
答案 0 :(得分:13)
想象一下它是一种模拟时钟。在一个真正的时钟中,时间"六五十五" (55)和"五到七" (-5)是相同的。这只是你定义的一个问题,时钟本身并不知道你的定义,而是绕着圆周运行......与CPU一样。请查看以下内容" CPU-clock":
我选择了一个4位时钟,但每个其他位组(BYTE,WORD,DWORD等)的原理相同。
进位标志将在时钟从15跳到0后置位。在这种情况下,是无符号溢出的标志。
时钟从7跳到-8后,将设置溢出标志。它标记有符号的溢出。
符号标志标记一个可以解释为负数的值。
如果向下计数,标志的行为会略有不同:
答案 1 :(得分:1)
试图总结大多数评论中已经讨论过的内容......
x86,以及到目前为止我见过的所有其他处理器架构,都没有签名和无符号数字的真实概念。 您的解释确定16位值8000h
是+32768(无符号)还是-32768(签名)。
没有单独的有符号和无符号指令可以加减;再次,你决定7FFFh + 0001h
是有效(无符号)加法还是溢出(因为7FFFh
是16位二进制补码中的最大有符号整数)
为帮助您作为程序员,算术运算为两个解释设置标志。操作完成后,您将测试相应的标志。经验法则:
示例:
7FFFh + 1
溢出,而无符号时(CF = 0)溢出;签名后结果8000h为负(SF = 1)FFFFh + 1
在无符号(CF置位)时溢出,而不是在签名时溢出(OF = 0);结果0000h不是负数(SF = 0)答案 2 :(得分:0)
1.specify平台标志可以在不同的平台上设置不同
2.那么使用的指令有多宽?
8000h
+0001h
------
8001h -> Carry=0,Sign16=1
7FFFh
+0001h
------
8000h -> Carry=0,Sign16=1