簡體   English   中英

匯編代碼不能正確使用堆棧

[英]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 正如預期的那樣)。 我錯過了什么嗎?ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ

  1. 使用[bp+4] (而不是[bp+8]

  2. 添加另一個寄存器,這樣您就可以像這樣訪問它: [[bp+4]] (但這實際上不是有效的語法;x86 在一種尋址模式下沒有雙重間接。這就是為什么您需要另一個寄存器來加載指針。)

    你應該把你的_end塊改成這個:

_end: 
    mov si, [bp+4]
    mov [si], al     
    pop bp
    ret

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM