[英]Assembly Code doesn't Work with Stack Correctly
我正在練習組裝,但遇到了問題。 這是我的代碼(程序集 8086):
org 100h
.model small
.stack 100h
.data
arr db 2, 2, 3, 4, 5
len equ $-arr
sum db 0
.code
jmp _start
Sum1 proc
push bp
mov bp, sp
mov bx, [bp+6]
xor ax, ax
mov cx, len
cmp cx, 0
je _end
LoopSum:
mov di, cx
add al, [bx+di-1]
loop LoopSum
_end:
mov [bp+4], al
pop bp
ret
Sum1 endp
_start proc
mov ax, @data
mov ds, ax
push offset arr
push offset sum
call Sum1
mov ax, 4c00h
int 21h
ret
_start endp
end
我的問題是變量sum
(由bp+4
表示)有一個錯誤的值(0 而不是 10 正如預期的那樣)。 我錯過了什么嗎?ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
使用[bp+4]
(而不是[bp+8]
)
添加另一個寄存器,這樣您就可以像這樣訪問它: [[bp+4]]
(但這實際上不是有效的語法;x86 在一種尋址模式下沒有雙重間接。這就是為什么您需要另一個寄存器來加載指針。)
你應該把你的_end
塊改成這個:
_end:
mov si, [bp+4]
mov [si], al
pop bp
ret
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.