求教:写两条连续的指令来同时设置进位标志和溢出标志位的值。谢谢大家

zjpgg 2007-08-06 04:43:31
加精
这个是intel汇编语言程序设计(第四版)上面的一道题,实在是不会啊。
书上说,只有无符号数之间的计算才会有可能产生进位值,只有有符号数之间的运算才有可能产生溢出,这个,脑子转不过来。
其实就是有符号数和无符号数还是搞不明白,比如有一道题是这样的:
.data
val2 WORD 8000h 如果使用add指令对val2加1,那么进位标志和符号标志的值分别是什么? 我原来想当然的就认为都是零,因为我觉得不产生进位阿,也没有符号变化啊,可是事实证明我的理解是错误的,我放到程序里面一验证,符号标志是1,后来我想了想,改加1为加0,符号标志位也是1,现在是似懂非懂状态,朦朦胧胧。所以发个帖子问问大家,请大家指点阿,谢谢!
...全文
894 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwxwxw1235 2010-05-05
  • 打赏
  • 举报
回复
lz 菜逼。这样的帖子也行?
lumeng394356779 2009-09-24
  • 打赏
  • 举报
回复
菜鸟,在学习中

建立一个群,欢迎高手、菜鸟,一起来学习,一起讨论,一起进步

群号:85864592

新群,人员还不多
myouuu 2008-12-15
  • 打赏
  • 举报
回复
不错,
收藏
RealFiona 2007-11-20
  • 打赏
  • 举报
回复
就是和正数相加变负数 负数相加变正数一个道理的吧
czlyc006 2007-08-06
  • 打赏
  • 举报
回复
补充一下,上面的两种格式中忽略了位5进位对位6造成的影响,不过为了描述简便我还室那样写了,只要理解了CPU的判断原则,室可以举一反三的。
czlyc006 2007-08-06
  • 打赏
  • 举报
回复
mov al,0c0h
add al,80h

既然是学习CPU指令,就要以机器的思维来考虑一切问题,不能带有人的先入为主的思想。

书上P86页说得很清楚:OF标志位是根据位6的进位和位7的进位来进行异或的结果。那么这就是满足题目要求的操作数的构造条件。由此可知,想要造成溢出,则位6与位7的进位值必须相反(位6进位7不进,或位7进位6不进),所以满足该原则的两操作数(二进制表示)格式应该是:
01xx xxxx
+ 01xx xxxx
-----------

10xx xxxx
+ 1xxx xxxx
-----------
同时题目又要求设置CF,则较易判断出之后第二种格式可以同时设计CF和OF。

对于LZ的第二个问题,首先看80h的二进制表示,即1000 0000,其最高位(作有符号数时也就是符号位)为1,SF当然=1了,即便你加1(结果是1000 0001)还是加0(结果不变),最高位都为1,SF自然总为1。

其实关于有符号数与无符号数的问题,需要深刻理解书上的一句经典描述:“CPU并不知道一个数字是有符号的还是无符号的,它只是在操作之后机械地设置各种状态标志...程序员自己来选择解释哪些标志和忽略哪些标志”,这也就成为我们要使用“机器”思维的原因。

对于一个数,CPU在操作SF符号位时总把其当作是有符号数,而在处理CF符号位时总视其为无符号数,故而在处理各种标志位时,CPU采用的其实是不同的判断前提,也就割裂了符号位之间的关系,所以才会让“程序员自己来选择解释哪些标志和忽略哪些标志”,因为只有程序员自己才知道究竟是想处理无符号数还是有符号数。
zara 2007-08-06
  • 打赏
  • 举报
回复 1
两条连续的指令同时设置进位标记和溢出标记, 这样的?
mov al, 80h
add al, 80h

标记寄存器中的符号位的设置, 是根据运算结果作为符号数来说是否为负数来进行设置的, 并不是数据的符号是否发生了变化而进行设置

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧