; ------------------------------------------; 程序名称:计算加减法 ;; 作者: 小问题 ;; 版本: V1.0 ;; ;;---------------------------------------- ;data segmentdata endscode 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,n1mov cx,n2add bx,cx;默认会弹出栈 pop bx pop cx pop bpret ;必须要加myadd1 endp;stdcall - 标识使用C++语言的调用约定 - 内平栈myadd2 proc stdcall uses bx cx n1:word,n2:word;声明局部变量local @n3:wordmov bx,n1mov cx,n2mov @n3,4add ax,bx;默认会弹出栈 pop bx pop cx pop bpadd ax,@n3ret ;会自动恢复栈空间 ret 4myadd2 endpstart:; 定义数据段assume ds:datamov ax,datamov ds,ax;把函数参数变量压入栈mov ax,1push axmov ax,2push axcall myadd1 ;调用函数,并使用栈中的参数add sp,4 ;外平栈,恢复栈空间mov ax,3mov ax,4call myadd2 ;不需要加add sp,4 因为是内平栈,在函数内部会自动释放栈空间code endsend 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
没有回复内容