2014-03-06 85 views
0

我在使用MASM訪問數組時遇到了一些困難。我有一個非常大的陣列和一個臨時變量,像這樣:在MASM中訪問數組

.data 
array DWORD 65000 DUP (0) 
temp DWORD 0 

在我的主,我這有來填補它:

mov esi, offset array 
mov edi, 0 
mov ecx, 0 

fill: 
mov [esi], ecx 
add esi, 4 
inc ecx 
cmp ecx, 65000 
jl fill 
mov esi, offset array ;reset the array location to the start 

後,我想訪問數組這個循環:

mark: 
mov temp, 4 ;get another 4 to temp to move along the array 
add esi, temp ;add temp to esi to keep moving 
mov edx, [esi] ;access the current value 
cmp esi, 20 ;just trying to get first few elements 
jmp mark 
exit 
main ENDP 
END main 

我始終有一個訪問衝突錯誤,與在那裏我試圖訪問的電流值就行了突破。這也發生在第一個循環。任何想法爲什麼發生這種情況?謝謝!

+0

你的第二個循環是無限的。你比較'esi'到20(這不會發生 - 嘗試'cmp esi,offset array + 20'),然後無條件地跳轉到'mark'。 'jl'是有符號的,'jb'是無符號的。 –

+0

謝謝,我繼續申請。如果你有時間,你能解釋一下在答案中修改數組嗎?也許可以解釋一下這個過程,我似乎認爲簡單訪問和實際修改這些值是有區別的。 – qsorted

+0

我想'mov ecx,[esi]'會「簡單地訪問」數組。 'mov [esi],ecx'會「修改值」。你的「填充」循環修改數組,因爲它被初始化爲零。 –

回答

0

您的代碼將努力的程度,但是:

mark: 
mov temp, 4 
add esi, temp ;Incrementing before first loop means you miss the first stored value 
mov edx, [esi] 
cmp esi, 20 ;ESI is the address your are accessing, not a count 
jmp mark  ;This loop will be infinite