汇编neg指令?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编neg指令?相关的知识,希望对你有一定的参考价值。

格式:neg opr
执行操作:opr = -opr
mov ax,2
neg ax
----------------
-opr赋值给opr 不是opr取反吗? 怎么会是求补呢?

取反的指令有没有?

汇编NEG指令在16位汇编语言中,NEG命令无论你是否为正负数,都会按照取反+1或用0减去这个数的二进制的办法去计算。

neg指令详细解释如下:

一、规则: 

    neg reg (对寄存器操作);

2. neg mem(对内存操作);

二、 作用:将目的操作数的所以数据位取反加1;

三、影响的标志:进位标志(CF),零标志(ZF),符合标志(SF),溢出标志(OF),辅助进位标志(AF),奇偶标志(PF)  ;

四、当操作数为0时,置CF位为0 当操作数不为0时,置CF位为1。

参考技术A 取反跟求补的指令是不一样的,neg是求补指令,举几个例子(以下数据均为16进制):
D8求补之后是28 28+D8=100
14求补之后是EC EC+14=100
1234求补之后是EDCC EDCC+1234=10000
1111求补之后是EEEF 1111+EEEF=10000
取反指令是not,也就是“非”指令,举几个例子:
D8取反之后是27
14取反之后是EB
1234取反之后是EDCB
1111取反之后是EEEE
取反就是把所有的“1”变成“0”,所有的“0”变成“1”,比如D8,化成二进制就是 “1101 1000”,取反之后变成“0010 0111”,也就是十六进制的“27”,其他例子也是一样!可以把数据代进以下程序逐个测试一下:
data segment
opr dw 1111h
data ends
code segment
assume cs:code,ds:data
main:
mov ax,data
mov ds,ax
mov ax,opr
neg ax;留意求补之后的结果
mov ax,opr
not ax;留意取反之后的结果
mov ax,4c00h
int 21h
code ends
end main本回答被提问者和网友采纳
参考技术B -opr赋值给opr 不是opr取反吗? 怎么会是求补呢?
----
-opr赋值给opr,不是取反,而是取相反的数。
在计算机的机器数领域,这也就是求补。

比较两个没有 jle 的数字

【中文标题】比较两个没有 jle 的数字【英文标题】:Compare two numbers without jle 【发布时间】:2014-02-26 19:12:34 【问题描述】:

有没有办法在不使用 JE / JNE 以外的条件跳转的情况下对存储在寄存器中的两个数字进行比较? 只有以下指令:ADD、SUB、AND、OR、XOR、NEG、左右算术移位、CMP、MOV。

【问题讨论】:

那是什么汇编语言?适用于哪种架构? “比较”是什么意思? JEJNE 本身不比较数字;他们只看Z 标志。您命名的所有算术指令和CMP,根据需要设置或清除Z 标志。你需要更彻底地解释你需要做什么。 这是精简指令集汇编语言,我仍然有 Z 标志,但它只说明最后一次操作是否给出 0。我命名的指令设置了 Z 标志,就像我说的那样,它说真假。 假设下溢发生回绕,您可以通过减去两个值来比较相等性,然后测试是否设置了零标志。 这是真的,但实际上我正在寻找执行以下操作:a 【参考方案1】:
cmp EAX,EDX
jle xxx

等价于

sub EDX,EAX
shr EDX,31
jz xxx

【讨论】:

谢谢,这正是我想要的。

以上是关于汇编neg指令?的主要内容,如果未能解决你的问题,请参考以下文章

汇编--算术运算类指令

汇编语言中 p 和 t命令的区别请详细告诉我。

如何仅使用 mov、add、sub、neg 在 4 条指令中限制 x=2a+3b? [关闭]

汇编语言指令

ARM 汇编语言指令

汇编语言常用指令