匯編-8086 棧平衡,call和ret使用

先上代碼

assume cs:code, ds :data, ss:stack

:棧段
stack segment 
   db 100 dup(0)
stack ends           

:數(shù)據(jù)段
data segment 
   db 100 dup(0)
   string db 'Hello!$'
data ends

:代碼段
code segment 

start:
         
    mov ax, data
    mov dx, ax
    mov ax, stack
    mov ss, ax      
    
    :調(diào)用函數(shù)   
    push word ptr offset string    
    call print
    add sp, 2    
    
    push 1111h
    push 2222h
    call count
    add sp, 4
    push ax  
    call print
    add sp, 2

    

    
    mov ax, 4c00h
    int 21h    
    
count:         

    mov bp, sp

    mov ax, ss:[bp+2]
    mov bx, ss:[bp+4]
    add ax, bx
    ret    
    
print:
    mov bp, sp
    mov dx, ss:[bp+2]
    mov ah, 9h
    int 21h
    ret 
             
code ends 

end start

開(kāi)始分析

push word ptr offset string 

將在數(shù)據(jù)段中的字符串Hello!的位置push到棧中($:代表結(jié)束,offset在數(shù)據(jù)段的偏移量

call print

會(huì)轉(zhuǎn)到print
同時(shí)會(huì)把下一條指令的偏移地址push到棧中

bp為基址寄存器,一般在函數(shù)中用來(lái)保存進(jìn)入函數(shù)時(shí)的sp的棧頂基址

sp是棧頂指針,它每次指向棧頂。

mov bp, sp

mov ax, ss:[bp+2]
mov bx, ss:[bp+4]
add ax, bx

ret

然后 ret會(huì)將ip指向到棧頂,也就是call push進(jìn)來(lái)的偏移地址(ip就是下一條處理的地址

默認(rèn)做法返回值會(huì)賦值給ax

為了保證棧平衡,調(diào)用完一個(gè)函數(shù)之后sp會(huì)加傳進(jìn)去的參數(shù)長(zhǎng)度

也就是將棧頂恢復(fù)到調(diào)用這個(gè)方法之前的位置

1585038202(1).png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一篇前言 這是一系列的匯編語(yǔ)言學(xué)習(xí)的讀書(shū)筆記,以及一些自己的理解系列文章。我想我會(huì)在循序漸進(jìn)的學(xué)習(xí)中,寫(xiě)下對(duì)匯編的...
    華落閱讀 5,451評(píng)論 1 1
  • 東風(fēng)吹落玉池蓮,人間天庭錦滿園。九曲橋邊如意樹(shù),萬(wàn)枝千朵祝平安。
    江南煙雨閱讀 314評(píng)論 1 13
  • 慢慢合上防盜門(mén)之后,羅睢浩脫下了那雙他怎么也刷不干凈的黑色帆布鞋,然后輕輕邁入客廳。 外面已經(jīng)很黑了,只有客廳的電...
    羅荼閱讀 479評(píng)論 1 1
  • 素描課從昨天下午兩點(diǎn)至七點(diǎn)半,沒(méi)有過(guò)程圖,沒(méi)想起來(lái)拍。中間有老師示范,還有自己畫(huà)的時(shí)間,五個(gè)半小時(shí),雖然最后注意力...
    雪時(shí)閱讀 185評(píng)論 0 0
  • 文/梅曉珠 本文選自梅曉珠的原創(chuàng)基地 小董下班回來(lái)說(shuō):?jiǎn)挝恍峦抡?qǐng)吃飯,不知道該不該去。 我飛舞著手指,從電腦前抬...
    蔣珠莉閱讀 831評(píng)論 9 33

友情鏈接更多精彩內(nèi)容