鱼C论坛

 找回密码
 立即注册
查看: 2365|回复: 0

[技术交流] 栈传参第一个程序

[复制链接]
发表于 2012-2-16 20:54:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
写的第一个传参程序,同初学者分享
;用栈传递参数示例:只要修改s就修改了输出
   
    date segment ;数据段
             s1 db '  shu chu 1$' ;输出参数1
             s2 db '  shu chu 2$' ;输出参数2
             s3 db '  shu chu 3$' ;输出参数3
             s  equ   s1; 方便修改参数
        date ends
       
        stack segment para stack 'stack' ;堆栈段
                 dw 100 dup (?) ;开辟栈空间
        stack ends
       
        code segment ;代码段
                assume cs:code,ds:date,ss:stack
        start: mov ax,date
                       mov ds,ax ;关联数据段
                   lea ax,s  ;装s的偏移(参数)
                   push ax   ; 将参数压栈   此时sp指向栈中的s(参数)
            call   shuchu    ;调用shuchu这个函数  此时sp指向栈中的(ip)
                       mov ah,4ch;结束程序
                          int 21h
               
                shuchu proc     ;定义shuchu函数
                      push bp   ;保护bp  此时sp指向栈中的(bp)
                      mov bp,sp ;关键的地方,bp此时(锁定)了参数的位置,
                                 ;bp+4就是参数在栈中的地址
                      push ax   ;保护现场
                      push bx
                      push cx
                      push dx
                      mov dx,[bp+4] ;参数传递给dx
                      mov ah,09h    ;调用中断显示字符串
                         int 21h
                      pop dx    ;恢复现场
                      pop cx
                      pop bx
                      pop ax
                      pop bp
                      ret  2  ;因为只是传递了一个字参数,所以加2清除参数   
                 shuchu endp   ;函数定义结束
                 
        code ends         
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 18:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表