我希望您能提供一段汇编代码,将正数转换为负数。
输入的数据是十六进制有符号双字。
谢谢。
输入的数据是十六进制有符号双字。
谢谢。
有两种方法可以实现这个功能,最好的方法是将数字加载到寄存器中,然后像Hans提到的那样使用NEG
指令,即:NEG EAX
将会取反EAX。另一种方法是 XOR EAX,EAX SUB EAX,EDX
,其中EDX包含你想取反的数字。
MOV EAX, 0h
,而是使用XOR EAX, EAX
? - user1720897XOR EAX,EAX
是一种用于打破依赖关系的习惯用法(详见英特尔优化指南),这意味着CPU可以使用寄存器重命名来加速。同时,这也是编码更小,有助于减轻i-cache压力和指令获取与解码。说实话,在这种情况下,它并没有任何区别,只是我的一个习惯(但不是一个坏习惯)。 - NecrolisData Segment
num dw 00000010B
Data Ends
Code Segment
Assume cs:code, ds:data
Begin:
mov ax, data
mov ds, ax
mov es, ax
mov ax, num
NOT ax
add ax, 00000001B
Exit:
mov ax, 4c00h
int 21h
Code Ends
End Begin
这里有一个在线资源,展示了如何为80x86处理器完成此操作:http://webster.cs.ucr.edu/AoA/DOS/ch01/CH01-2.html