1
我寫彙編程序的任務分配時,我需要一個數組,讓我們說分段錯誤做嵌套循環組裝
array: DB 1, 2, 3, 4, 5
,我需要通過它循環並打印相應的星級數組中的數字。所以在程序上面的例子應該輸出:
* * * * *
* * * *
* * *
* *
*
我的問題是我收到分段錯誤的地方在代碼中,我無法準確判斷。任何人都有任何想法發生這種情況?
代碼:
%INCLUDE "csci224.inc"
SEGMENT .data
array: DB 1, 2, 3, 4, 5, 4, 3, 2, 1
star: DB "*",0,10
n: DB 0
SEGMENT .text
main:
mov edx, 9 ;length of array
mov ecx, 0 ;loop counter
jmp outerloop ;begin outerloop
outerloop:
mov ah, [array+ecx] ;move (array element + loop counter) to ah
movzx ebx, ah ;zero extend ah to ebx
mov [n], ebx ;copy value of array element to variable
mov eax, ebx
inc ecx
;call WriteInt
dec edx
jnz innerloop ;jump to innerloop
innerloop: ;cycle through '[n]', printing a star each time
mov edi, [n]
mov eax, [star]
call WriteString ;print star
dec edi ;decrement counter
jnz innerloop ;is edi zero? if no, loop again
cmp ecx, byte 0 ;if yes, go back to outerloop
jz outerloop
ret
你可以找出分段錯誤使用調試器發生。你知道怎麼做嗎?我建議gdb。 –
'n'只是一個字節,而你正在移動一個雙字! 'mov eax,[star]'(「[contents]」)幾乎肯定應該是'mov eax,star'(地址)。您可能需要在'main'周圍保存和恢復'ebx','esi'和'edi'。 –