我必須交換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