汇编求补指令neg
⽂章⽬录
1 原码、反码、补码
表⽰正数负数
原码数据本⾝的⼆进制表⽰(符号位为0)数据本⾝的⼆进制表⽰(符号位为1)
反码和原码⼀样符号位不变,其余各位按位取反(1变0,0变1)补码和原码⼀样反码加1
2 指令详解
指令格式含义
neg reg/mem reg/mem 0-reg/mem,
即⽤0减操作数,并将求得的结果存⼊指定的寄存器或内存单元(把操作数按位取反,末位加1)
2.1 理解⽅式⼀
1 操作数为正数的情况
mov al,64h
neg al ; al=9ch
⾸先明确⼀点,在计算机中,数据都是以补码的形式存储的。
1、64h的补码表⽰:0110 0100
2、按位取反:1001 1011
3、末位加1:1001 1100 = 9ch
2 操作数为负数的情况
mov al,-8
neg al ; al=08h
-8的原码表⽰:1000 1000
-
8的反码表⽰:1111 0111
-8的补码表⽰:1111 1000
按位取反:0000 0111
末位加1:0000 1000 = 8 = 08h
3 总结
当使⽤neg指令时:
1、先将操作数换成补码表⽰
2、再将操作数按位取反
3、最后加1。此时就能求出正确结果了。
2.2 理解⽅式⼆
当然,还可以从运算的⾓度计算(推荐使⽤这种⽅法),⽽且相对简单。仍然以上⾯例⼦说明:
⇐
当 al = 64h,neg al 0 - al 0 - 64h = -64h
当 al = -8,neg al 0 - al 0 - (-8)= 8
依旧要强调的是:在计算机中,数据都是以补码的形式存储的。1、求 -64h 的补码-64h 原码:1110 0100-64h 反码:1001 1011
汇编判断指令-64h 补码:1001 1100 = 9ch 2、8的补码。正数的原、反、补码相同8 原码:0000 10008 反码:0000 1000
8 补码:0000 1000 = 8
可以看出,这种⽅法对于操作数为负数的情况⽐较简便,相当于直接求绝对值。⽽操作数为正数时,就是求正数相反数的补码表⽰总结:操作数 > 0:加负号,求反码
操作数 < 0:直接求绝对值⟺⟺⟺⟺
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论