标志位的问题!希望大家帮忙

381612 2004-01-27 02:44:55
杨季文80X86汇编教程P37
的例子我不理解向各位大大请教

mov AX,7896H

ADD AL,AH ;AL=0EH,AH=78H CF=1(这里是不是因为有进位啊)

ADD AH,AL ;AH=86H,AL=0EH SF=1,AF=1,OF=1
; (SF=1是不是因为8h=1000b最高位和SF位相同?)
;那么AF=1这个辅助进位是怎么来得啊?
;86H+0EH怎么会溢出的啊?

初学汇编希望大家指教
...全文
158 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sexboyohyeah 2004-02-02
  • 打赏
  • 举报
回复
看了看书还是浪迹天涯说得对
of分为加法和减法
我只注意了加法以为就是一种情况呢^_^
csder 2004-01-30
  • 打赏
  • 举报
回复
睡觉了,马上就要开工了,感觉真不爽,呵呵
csder 2004-01-30
  • 打赏
  • 举报
回复
减法的OF位的设置方法为
若两个数的符号相反,而结果的符号与减数相同,则 OF=1
除此之外 OF=0
OF=0 说明带符号数的减法OVERFLOW,结果是错误的.
381612 2004-01-30
  • 打赏
  • 举报
回复
彻底明白谢谢各位
结贴
sexboyohyeah 2004-01-29
  • 打赏
  • 举报
回复
想这类标志的问题最近有好多我再次发表一下个人观点主要也是验证大家的观点
of 的 问题 当且仅当 两个操作数的最高有效位相同且结果的最高有效位与之相反的时候of=1
这与你的指令是否是算数指令是否是有符号运算都不相干
cf 的 问题 只有在运算过程中最高有效位进位借位的情况下cf=1
这两个标志都是与最高有效位的情况密切相关的
381612 2004-01-29
  • 打赏
  • 举报
回复
可是书上的答案是
OF=1
奇怪了!?
这是为什么啊?
是不是减法有奇异的地方?
sexboyohyeah 2004-01-29
  • 打赏
  • 举报
回复
bx=48fb=0100100011111011
8f34=1000111100110100
b9c7=1011100111000111
因为两个操作数的最高有效位不一样所以of=0
因为从最高有效位上产生借位了所以cf=1
其他标志位就不解释了

381612 2004-01-29
  • 打赏
  • 举报
回复
按照各位高见
;BX=48FBH
SUB BX ,8F34H
;结果为BX=B9C7H
哪各个标志位为什么呢?
也请告诉我理由,谢谢大家!!
sexboyohyeah 2004-01-29
  • 打赏
  • 举报
回复
哦补充一下除了直接操作flagreg的指令除外呀!!!
csder 2004-01-28
  • 打赏
  • 举报
回复
按照TRW2000的逻辑,
FF+40 第7位向第8位进位, OF=1
可实际情况却不是这样的
trw2000 2004-01-28
  • 打赏
  • 举报
回复
ADD AL,AH ;AL=0EH,AH=78H CF=1(这里是不是因为有进位啊)<--对,这里是因为第8位有进位

ADD AH,AL ;AH=86H,AL=0EH SF=1,AF=1,OF=1
;(SF=1是不是因为8h=1000b最高位和SF位相同?)<--SF=1表示计算结果最高位为1
;那么AF=1这个辅助进位是怎么来得啊?<--这是因为低4位有进位,AF就是表示这个
;86H+0EH怎么会溢出的啊?<--运算时是78H+0EH=86H,第7位向第8位有进位,所以溢出标志要置1
csder 2004-01-28
  • 打赏
  • 举报
回复
OF 在加法中的设置是针对带符号数溢出的
根据操作数的符号及其变化情况来设置的

如果两个操作数的符号相同,而结果的符号与之相反时OF=1

例子中:78H+0EH 两个都是正数,,结果86H 是负数,所以OF=1
caesar22 2004-01-28
  • 打赏
  • 举报
回复
INTEL没有权力做二值逻辑,但是它可以定义OF什么时候等于1,或等于零哎。
sexboyohyeah 2004-01-28
  • 打赏
  • 举报
回复
标志的问题最近两天太多了查查最近的贴就能找到详细的解释
W32API 2004-01-27
  • 打赏
  • 举报
回复
楼主可先看看计算机原理。

至于小刀同志可去看离散数学,二值逻辑不是 INTEL 定义的。
caesar22 2004-01-27
  • 打赏
  • 举报
回复
至于OF怎么用,具体要看你的运算是不是有符号数的运算。单纯地说溢出是没有意义的。至于你要问为什么OF=1,那就有必要给INTEL写封信,问问CPU的总设计师干吗非得这样。
caesar22 2004-01-27
  • 打赏
  • 举报
回复
---------ADD AL,AH ;AL=0EH,AH=78H CF=1(这里是不是因为有进位啊)
对,,有进位! 78h+96h=10Eh
----------ADD AH,AL ;AH=86H,AL=0EH SF=1,AF=1,OF=1
当0Eh+86h=94h时,Eh+6h=14h,AF为半进位标志位,也就是低四位若有进位,就置1
这里的溢出,并不代表你的运算出错了.
1:如果你是把86h看成有符号数,那么它就是-6h,而-6h+0Eh=08h.结果应该是正的,可是实际你的运算结果却时94h,94h的最高位是1,别忘记了你的前提是做有符号数相加,所以94h就被CPU认为是一个负值,而你想得到的结果是08h.....此时OF的意义就在于当你做有符号运算时,看看你的运算结果是否正确!!!此处运算是错误的,故OF=1
2:如果你的程序中做的是无符号运算,那么就不用管它是不是溢出了!!!!


21,459

社区成员

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

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