汇编代码分享2:如何定义函数

; ------------------------------------------
; 程序名称:计算加减法                      ;
; 作者: 小问题                            ;
; 版本: V1.0                              ;  
;                                         ;
;---------------------------------------- ;

data segment

data ends

code segment
; myadd1 - 函数名
; proc - 表示这是一个函数定义
; C - 表示使用C语言调用约定 - 外平栈
; uses - 表示要使用的参数
; n1:word - 第一个参数,类型为word(16位)
; n2:word - 第二个参数,类型为word(16位)
myadd1 proc C uses bx cx n1:word,n2:word
    ;该函数会默认分配栈空间 mov bp,sp mov sub sp,4和弹出栈
    mov bx,n1
    mov cx,n2
    add bx,cx
    ;默认会弹出栈 pop bx pop cx pop bp
    ret ;必须要加
myadd1 endp

;stdcall - 标识使用C++语言的调用约定 - 内平栈
myadd2 proc stdcall uses bx cx n1:word,n2:word
    ;声明局部变量
    local @n3:word
 
    mov bx,n1
    mov cx,n2
    mov @n3,4
    add ax,bx;默认会弹出栈 pop bx pop cx pop bp
    add ax,@n3
    ret ;会自动恢复栈空间 ret 4
myadd2 endp


start:
    ; 定义数据段
    assume ds:data
    mov ax,data
    mov ds,ax

    ;把函数参数变量压入栈
    mov ax,1
    push ax
    mov ax,2
    push ax

    call myadd1     ;调用函数,并使用栈中的参数
    add sp,4 ;外平栈,恢复栈空间
    
    mov ax,3
    mov ax,4
    call myadd2 ;不需要加add sp,4 因为是内平栈,在函数内部会自动释放栈空间


code ends
end start

 

请登录后发表评论