VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 256|回复: 2

[已解决]求解,关于负数补码、原码之间的转换问题

[复制链接]
37_avatar_middle
最佳答案
0 
在线会员 发表于 2021-1-8 22:46:11 | 显示全部楼层 |阅读模式
00EE3E50 55                   push        ebp  
00EE3E51 8B EC                mov         ebp,esp  
00EE3E53 81 EC D0 00 00 00    sub         esp,0D0h  
00EE3E59 53                   push        ebx  
00EE3E5A 56                   push        esi  
00EE3E5B 57                   push        edi  
00EE3E5C 8D BD 30 FF FF FF    lea         edi,[ebp+FFFFFF30h]  
00EE3E62 B9 34 00 00 00       mov         ecx,34h  
00EE3E67 B8 CC CC CC CC       mov         eax,0CCCCCCCCh  
00EE3E6C F3 AB                rep stos    dword ptr es:[edi]  



各位大神,是这样的,我main函数通过 sub         esp,0D0h 指令开辟了0D0h (208)个字节,然后当我看到lea         edi,[ebp+FFFFFF30h]指令中
的 FFFFFF30h 这样的负数时,想自己动手转换为0D0h。
但是我用 原码 = 补码取反 +1 算,得到的结果和 编译器算的不一样啊,明显我错了,但是我不清楚错在哪里,求大神们救救孩子吧!!求解,关于负数补码、原码之间的转换问题
最佳答案
08_avatar_small
2021-1-10 09:21:45
FFFFFFFF - FFFFFF30 +1 = 0D0H。
《intel汇编语言程序设计》这本书 说过。如果你要计算 16进制的补码。
可以把每位 减去15 也就是一个F。+1 后得到补码状态。
之前我带着疑问去尝试 解决为啥 “可以把每位 减去15 也就是一个F。+1 后得到补码状态。” 这么说。
后来得知了,。你自己也可以尝试下。




上一篇:时间超限,求一更好的算法或者思路
下一篇:单链表的实现 问题
08_avatar_middle
最佳答案
9 
在线会员 发表于 2021-1-10 09:21:45 | 显示全部楼层    本楼为最佳答案   
bestAnswer
FFFFFFFF - FFFFFF30 +1 = 0D0H。
《intel汇编语言程序设计》这本书 说过。如果你要计算 16进制的补码。
可以把每位 减去15 也就是一个F。+1 后得到补码状态。
之前我带着疑问去尝试 解决为啥 “可以把每位 减去15 也就是一个F。+1 后得到补码状态。” 这么说。
后来得知了,。你自己也可以尝试下。

点评

没啥大问题就是一个 取反操作。和 NEG 指令差不多的意思。  发表于 2021-1-10 09:23
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-8-1 18:36

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表