我正在參加大會并遇到陣列問題。來自 C 背景,陣列操作相對容易,因為您可以使用指標、參考等來做很多魔術。但是對于匯編,情況并非如此。我正在做陣列包裝并撰寫了這個程式,但是當我組裝這段代碼并運行它時,陣列沒有改變(我從觀察串列中檢查它)。我究竟做錯了什么?
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:dword
.data
arrayA DWORD 1001d,1002d,1003d,1004d,1005d
len DWORD 5
.code
main proc
mov ebx, OFFSET arrayA
mov edx,len
cmp edx,1
je lengthOne
cmp edx,2
je lengthTwo
cmp edx,3
jge lengthGreater
lengthOne:
invoke ExitProcess,0
lengthTwo:
mov eax, [ebx 4]
mov dx, [ebx]
mov [ebx 4], dx
mov [ebx], eax
invoke ExitProcess,0
lengthGreater:
mov edx, [ebx 16]
push edx
mov ecx, 16
start:
mov eax, [ebx ecx]
cmp eax, [ebx]
je firstIndex
mov edx, [ebx ecx - 4]
mov [arrayA ecx], edx
sub ecx, 3
loop start
invoke ExitProcess,0
firstIndex:
pop edx
mov [arrayA ecx],edx
invoke ExitProcess,0
main endp
end main
uj5u.com熱心網友回復:
我在 Visual Studio 中除錯了您的代碼。您的陣列實際上正在發生變化,并且變化得很好。您的代碼只有一個問題:
start:
mov eax, [ebx ecx]
cmp eax, [ebx]
je firstIndex
mov edx, [ebx ecx - 4]
mov [arrayA ecx], edx
sub ecx, 3
loop start
invoke ExitProcess,0
firstIndex:
pop edx
mov [arrayA ecx],edx
invoke ExitProcess,0
如果您查看此部分,您會loop在離開程式后看到。問題在于您firstIndex在修改陣列后沒有進行檢查。要修復它,您可以洗掉invoke ExitProcess,0after then 回圈。
start:
mov eax, [ebx ecx]
cmp eax, [ebx]
je firstIndex
mov edx, [ebx ecx - 4]
mov [arrayA ecx], edx
sub ecx, 3
loop start
firstIndex:
pop edx
mov [arrayA ecx],edx
invoke ExitProcess,0
這樣,一旦您的回圈完成,您就會自動執行firstIndex
如果您運行此代碼,您將獲得以下陣列結構:

編輯:
你也許也可以做類似的事情,但我還沒有測驗過這個,所以我不知道它是否可以這樣作業:
start:
mov edx, [ebx ecx - 4]
mov [arrayA ecx], edx
sub ecx, 3
mov eax, [ebx ecx]
cmp eax, [ebx]
je firstIndex
loop start
invoke ExitProcess,0
firstIndex:
pop edx
mov [arrayA ecx],edx
invoke ExitProcess,0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/515470.html
標籤:Intel Collective 数组部件x86英特尔
