彙編-函數調用-call和ret指令

一、函數封裝與調用

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

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


; 數據段
data segment 
    db 100 dup(0) 
    string db 'Hello!$'
data ends


; 代碼段
code segment
start:
    ; 手動設置ds、ss的值
    mov ax, data
    mov ds, ax
    mov ax, stack
    mov ss, ax  
    
    ; 業務邏輯 
    call print
    
    mov ax, 1122h
    mov bx, 3344h
    add ax, bx  
    
    ; 退出
    mov ax, 4c00h
    int 21h 
    
; 打印字符串    
print:    

    ; ds:dx告知字符串地址    
    mov dx, offset string
    mov ah, 9h
    int 21h
    
    ret 
                
code ends  

end start 
複製代碼

二、call和ret的本質

call 標號: 將下一條指令的偏移地址入棧後 轉到標號(函數)處執行指令bash

ret:將棧頂的值出棧,賦值給ip函數

call和ret聯合使用的做用其實就是高級語言中的函數調用ui

相關文章
相關標籤/搜索