首页
社区
课程
招聘
[旧帖] 求教两个汇编新手问题 0.00雪花
发表于: 2012-5-5 10:21 3672

[旧帖] 求教两个汇编新手问题 0.00雪花

2012-5-5 10:21
3672
第一个问题:
(-85)+76 用8位二进制补码计算 结果用16进制数表示。
我的理解是这样的:(-85)+76=[85]求补后加76
85的二进制表示为:01010101 求反后为10101010 再加1后变为10101011 ([85]求补的结果)
76的二进制表示为:01001100
-85+76=10101011+01001100=11110111 用十六进制表示为F7H 但答案是0F7H  
我的疑问是F7前面的0(零)是怎么来的?  
第二个问题:
题目是这样的:求出CFA0与62A0的和,然后根据结果设置SF、ZF、CF、OF值
我的算法如下:CFA0
           +62A0
-------------------
         (1)3240  (1)为溢出了(如果看4位的话,因为题目没说是8位运算)
那SF=0 (是正数)
  ZF=0(结果不为0)
  CF=1(结果有进位)
  0F=1 (我的理解结果是13240 如果按4位来算,其中1应该算溢出了吧)

答案是结果为3240 但OF=0  
请指教!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 408
活跃值: (156)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=netthug;1069695]第一个问题:
(-85)+76 用8位二进制补码计算 结果用16进制数表示。
我的理解是这样的:(-85)+76=[85]求补后加76
85的二进制表示为:01010101 求反后为10101010 再加1后变为10101011 ([85]求补的结果)
76的二进制表示为:010011...[/QUOTE]

看楼主表述的问题,前提环境应该是16位汇编下
第一个问题,前头加0是为了和字母区分开
第二个问题,OF是表示有符号数的溢出,第一个数CFA0是负数,第二个62A0是正数,相加后得出结果是正数,可以用16位表示正确的结果,没有溢出,OF=0,作为无符号数来看最高位是有进位,CF=1。
2012-5-5 10:41
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
有一个参考的方法:判断是否溢出可从数据的最高位和次高位结合来看,如果两者同时向前进位或不进位则表示没有溢出,反之两者中有一个发生进位另一个不进位则说明发生溢出。
2012-5-22 15:49
0
雪    币: 2993
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
第一个问题:十六进制数在x86汇编不允许F开头,所以前面加个0
第二个问题:所谓溢出,是针对有符号数的,因此 :CFA0是负数,62A0是正数,一正一负不会溢出

这里你对标志位可能有点误解
OF(Over Flow)指的是有符号数超出表示范围。
而你理解的两个无符号数相加超出表示范围应该用CF(Carry Flag)表示
事实上,CFA0究竟是一个有符号的负数还是无符号数,是由你指定的,他的表示方式都不变
当他指有符号数的时候,用OF判断溢出,当他指无符号数的时候,用CF判断溢出
2012-5-22 16:09
0
游客
登录 | 注册 方可回帖
返回
//