栈传参第一个程序
写的第一个传参程序,同初学者分享;用栈传递参数示例:只要修改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]