Pointers 交换2个指针x86英特尔程序集
我试图交换通过引用传递给子程序的两个指针。以下是我所拥有的:Pointers 交换2个指针x86英特尔程序集,pointers,assembly,x86,Pointers,Assembly,X86,我试图交换通过引用传递给子程序的两个指针。以下是我所拥有的: .data firstInputPrompt BYTE 'Enter First String: ',0 secondInputPrompt BYTE 'Enter Second String: ',0 firstString BYTE 16 DUP(0) ;string buffers
.data
firstInputPrompt BYTE 'Enter First String: ',0
secondInputPrompt BYTE 'Enter Second String: ',0
firstString BYTE 16 DUP(0) ;string buffers
secondString BYTE 16 DUP(0)
firstPointer DWORD OFFSET firstString ;pointers
secondPointer DWORD OFFSET secondString
.code
compare PROC
push ebp ;readying stack for use
mov ebp, esp
push eax ;used for comparing chars
push ebx
push ecx
mov ebx, [ebp+12] ;ebx now a pointer to firstString
mov ecx, [ebp+8] ;ecx now a pointer to secondString
mov ebx, [ebx]
mov ecx, [ecx]
;iterate over strings
iterate:
mov al, [ebx] ;compare characters
cmp al, [ecx]
ja swap_pointers
jb end_method
mov al, [ebx]
cmp al, 0
je end_method
mov al, [ecx]
cmp al, 0
je end_method
inc ebx
inc ecx
jmp iterate
swap_pointers:
;mov ecx, [ebp+12] ;get pointers again
;mov ebx, [ebp+8]
lea ebx, dword ptr [ebp+12]
lea ecx, dword ptr [ebp+8]
end_method:
;pop used registers
pop ecx
pop ebx
pop eax
pop ebp
ret
compare ENDP
我感到困惑的地方就在swap_指针:label之后。我不知道如何交换这两个指针。知道我做错了什么吗?需要时,异或交换寄存器值
...
;load registers with pointers
mov ebx, firstPointer
mov ecx, secondPointer
;save pointers from register, swapping content
mov firstPointer, ecx
mov secondPointer, ebx
;finis
load registers with pointers
mov ebx, firstPointer
mov ecx, secondPointer
xor ebx,ecx
xor ecx ebx
xor ebx,ecx
gl此外,在调用子程序之前,我通过引用在堆栈上传递这两个指针。您的意图是当此代码完成执行时,标记为“firstPointer”的内存内容指向“secondString”,而“secondPointer”指向“firstString”吗?是的,这正是您的意图,你能交换指针值吗?这就是我要做的,我尝试了很多不同的方法,一定有一些我不理解的地方,因为指针似乎不交换,即使我移动ecx,[ebp+8]然后移动ebx,[ebp+12]哇。。。这非常有效。非常感谢你。。我不敢相信我没有试过。。。一定是想得太多了,别担心。汇编程序可以使任何人都有点疯狂!这是没有用的。它交换寄存器,但不交换内存中的指针值,因此实际上什么也不做。此外,XOR交换是缓慢的、混乱的和不必要的<如果您确实想交换寄存器,则code>xchg指令会更好。