jesus 发表于 2014-10-28 21:43:04

关于汇编neg指令

请问0-f000h的结果是1000,那么-f000的补码是多少,第一位符号位已经是负数了,负数负数的补码是怎么算的?0-0001h结果就很清楚是ffffh,

avatar10010 发表于 2014-10-28 23:24:32

不知道楼主想表达什么,但是我想说neg指令就是求一个数的相反数(无论他是正数还是负数)

jesus 发表于 2014-10-29 20:01:01

avatar10010 发表于 2014-10-28 23:24
不知道楼主想表达什么,但是我想说neg指令就是求一个数的相反数(无论他是正数还是负数)

你说错了neg指令时求一个数的补码

avatar10010 发表于 2014-10-30 00:47:24

jesus 发表于 2014-10-29 20:01
你说错了neg指令时求一个数的补码

mov ax,4
neg ax
你试试这两条指令就知道了,求的真心不是补码,是相反数

zhihuzheye 发表于 2014-10-30 08:52:07

本帖最后由 zhihuzheye 于 2014-10-30 08:58 编辑

看看官方文档Intel® 64 and IA-32 Architectures是怎样描述的

NEG—Two's Complement Negation

Description
Replaces the value of operand (the destination operand) with its two's complement. (This operation is equivalent to
subtracting the operand from 0.) The destination operand is located in a general-purpose register or a memory
location.
This instruction can be used with a LOCK prefix toallow the instruction to be executed atomically.
In 64-bit mode, the instruction’s default operation size is32 bits. Using a REX prefix inthe form of REX.R permits
access to additional registers (R8-R15). Using a REX prefix in the form of REX.W promotes operation to 64 bits. See
the summary chart at the beginning of this section for encoding data and limits.
Operation
IF DEST =0
THEN CF ←0;
ELSE CF ←1;
FI;
DEST ←[– (DEST)]         <-- 这一句的意思非常明确
Flags Affected
The CF flag set to 0 if the source operand is 0; otherwise it is set to 1. The OF, SF, ZF, AF, and PF flags are set
according to the result.

jesus 发表于 2014-10-30 10:02:55

avatar10010 发表于 2014-10-30 00:47
mov ax,4
neg ax
你试试这两条指令就知道了,求的真心不是补码,是相反数

neg指令是用0去减,如果是负数就用补码表示。C:\Users\feiyue\Desktop\QQ截图20141030100507.png

avatar10010 发表于 2014-10-30 15:36:15

本帖最后由 avatar10010 于 2014-10-30 15:41 编辑

jesus 发表于 2014-10-30 10:02
neg指令是用0去减,如果是负数就用补码表示。
正数则用0去减,负数就用补码表示,这跟求这个数的相反数有区别吗?区别只是不同的描述过程,但都得到了相同的结果,没什么好纠结的,
我否定你的只是这一句“你说错了neg指令时求一个数的补码”,应为正数的补码是其本身,你这样描述是不严谨的

jesus 发表于 2014-11-1 11:23:24

avatar10010 发表于 2014-10-30 15:36
正数则用0去减,负数就用补码表示,这跟求这个数的相反数有区别吗?区别只是不同的描述过程,但都得到了 ...

负数的补码是自己的相反数吗?负数的补码是自己的相反数+1

avatar10010 发表于 2014-11-1 19:28:15

本帖最后由 avatar10010 于 2014-11-1 19:31 编辑

jesus 发表于 2014-11-1 11:23
负数的补码是自己的相反数吗?负数的补码是自己的相反数+1不解释
实践是检验真理的唯一标准,请亲自在debug下单步调试(代码已给出),谁对谁错自知
mov ax,1
neg ax
mov ax,-1
neg ax

jesus 发表于 2014-11-1 19:56:49

avatar10010 发表于 2014-11-1 19:28
不解释
实践是检验真理的唯一标准,请亲自在debug下单步调试(代码已给出),谁对谁错自知
mov ax,1


不知道怎么发图片,neg 1,必然结果是ffff,0-1结果是-1,在-1的补码是ffff,。neg -1 ,结果必然是是1,1的结果是正数,补码就是他本身,哎,你还是不懂,自己看书吧,推荐你看本书,微型计算机技术及应用,他是用0去减的啊,为什么是取反,搞不懂你再说神马,明明是补码,硬要说取反,0-正数等于负数,用补码表示。0-负数是正数,就是他自己,你自己不懂的话自己在看看,我也懒得解释了
页: [1]
查看完整版本: 关于汇编neg指令