x86汇编 neg指令的问题??

weiguozhe 2012-08-21 05:25:21


为什么执行下面两条指令后ax中的值为EFFF ???
我是这样想的:1001h的最高位为1说明是负数,1001h代表-1,然后执行neg指令取得相反数 应该是1才,所以ax中的值应该为 0001h 才,但是为什么结果不是这样子???????
mov ax,1001h
neg ax





...全文
625 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hei鹰 2012-08-23
  • 打赏
  • 举报
回复
楼主,你好,1001h并不代表01,她代表4097d,它的最高位是0,是正数。
均陵鼠侠 2012-08-22
  • 打赏
  • 举报
回复
neg指令的格式为

neg r/m8
neg r/m16
neg r/m32

neg的操作方法是,用0减去指令中的操作数。
就本例而言,是0-0x1001,结果为 ……FFFFFFFFFFFFFFFEFFF。左边的省略号表示不停地借位,故结果是无穷尽地向左延伸。因为本例中的操作数是16位的AX,故仅保留低16位。因此,结果是0xEFFF。
WJN92 2012-08-21
  • 打赏
  • 举报
回复
这个是不带符号的
sjtit 2012-08-21
  • 打赏
  • 举报
回复
楼主在这方面知识的认识上,有一些漏洞,建议恶补一下。

首先取反和求补是两个家伙,NEG指令是求相反数,也就是求该原码的补码,

其次是补码表示下,1001H,不是-1,-1是FFFFH

补码等于原码按位取反再加一

所以,1001H的反码是EFFE,补码是EFFF

开饭了,就简单说这些吧。

21,458

社区成员

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

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