汇编-函数调用-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

相关文章
相关标签/搜索