我是裝配程序設計(x86)的新手,無法弄清楚我的程序出錯了。在我重新顯示移入數組的值後,我想要顯示當前的'SUM'。我認爲通過使用'ebx'寄存器,除了在Loop2之外,它在程序中沒有其他地方使用,所以值不會被覆蓋,因此每個'add'語句都會將新的數組位置值添加到我的'SUM' 。爲什麼程序不能精確計算整數SUM?
任何人都可以發現我做錯了什麼嗎?
INCLUDE Irvine32.inc
COUNT = 3
.data
inputMsg BYTE "Input an integer: ", 0
outputMsg BYTE "Redisplaying the integers: ", 0dh, 0ah, 0
sumMsg BYTE " Sum is now: ", 0
strArray SDWORD COUNT DUP(?)
.code
main PROC
; Read Integers from User
mov ebx, 0
mov ecx, COUNT
mov edx, OFFSET inputMsg
mov esi, OFFSET strArray
L1: call WriteString ; Display Prompt
call ReadInt ; Read input from user
mov [esi], eax ; Store value into array
add esi, TYPE strArray ; Move to next array position
loop L1
call Crlf
; Redisplay the integers
mov edx, OFFSET outputMsg ; Display 'outputMsg'
call WriteString
mov ecx, COUNT
mov esi, OFFSET strArray
L2: mov ebx, 0 ; Initialize ebx to 0
mov eax, [esi] ; Get integer from array
call WriteInt ; Display integer
mov edx, OFFSET sumMsg ; Display value of 'sumMsg'
call WriteString
; mov eax, ebx
add ebx, [esi]
mov eax, ebx ; <---- MOVED from above add ebx, [esi]
call WriteInt
call Crlf
add esi, TYPE strArray ; Move to next array position
loop L2
exit
main ENDP
END main
我試着按你的建議去做(如果我理解正確的話)。現在所有的行都以數組的輸出形式讀取,後面跟着'「Sum現在是:+0」'。我上面編輯了我的代碼以反映更改。還有什麼想法? –
你已經把'mov eax,ebx'放在了錯誤的地方。把它放在'call WriteInt'之前# – ooga
我把'mov eax,ebx'移到'add ebx,[esi]'和'call WriteInt'之上。現在的輸出是: '+1總和現在:+1 +2總和現在:+2 +3總和現在:+ 3' 我還遺失了什麼? –