汇编代码分享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
; ------------------------------------------
; 程序名称:计算加减法                      ;
; 作者: 小问题                            ;
; 版本: 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
; ------------------------------------------ ; 程序名称:计算加减法 ; ; 作者: 小问题 ; ; 版本: 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

 

请登录后发表评论

    没有回复内容