for 发表于 2012-2-16 20:54:09

栈传参第一个程序

写的第一个传参程序,同初学者分享
;用栈传递参数示例:只要修改s就修改了输出
   
    date segment ;数据段
             s1 db 'shu chu 1$' ;输出参数1
             s2 db 'shu chu 2$' ;输出参数2
             s3 db 'shu chu 3$' ;输出参数3
             sequ   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, ;参数传递给dx
                      mov ah,09h    ;调用中断显示字符串
                         int 21h
                      pop dx    ;恢复现场
                      pop cx
                      pop bx
                      pop ax
                      pop bp
                      ret2;因为只是传递了一个字参数,所以加2清除参数   
               shuchu endp   ;函数定义结束
               
        code ends         
end start
页: [1]
查看完整版本: 栈传参第一个程序