我必须交换Registervariables eax,ebx而不创建新的寄存器。不允许使用XCHG,CMPXCHG及其变体。 我试过了,但没有奏效。我的代码有什么问题。异或换换正确的方法?XOR交换组装NASM
%include "asm_io.inc"
SECTION .data
x: dd 10
y: dd 50
fmt2: db "Value of myInteger X is %d",10,0
fmt1: db "Value of myInteger Y is %d",10,0
SECTION .text
extern printf
global asm_main
asm_main:
push ebp
mov ebp, esp
mov eax, DWORD x
mov ebx, DWORD y
xor eax, ebx
xor ebx, eax
xor eax, ebx
push DWORD [x]
push fmt2
call printf
push DWORD [y]
push fmt1
call printf
mov esp, ebp
pop ebp
ret
它确实有效,但您只交换了不是'x'和'y'的寄存器,您可能需要执行'push eax'和'push ebx'。 PS:下次正确使用代码格式。 PS#2:'ebx'主叫保存寄存器。 – Jester
谢谢你小丑。我不明白如何交换x和y。你能帮我吗? – Sedem
如果你想在内存中交换x和y,最简单的事情就是把它们写出来交换:'mov eax,[x]; mov edx,[y]; mov [x],edx; mov [y],eax'。请注意,'xor'不支持2个内存操作数。 – Jester