13.3 对int ,iret和栈深入理解...
.这是在介绍什么是“递归子程序”及栈如何操作的问题
书中提了一个汇编代码例子,即“在屏幕中间显示80个‘!’。
仿照上述例子写一个C语言
#include <stdio.h>
void display(int );
int main(void)
{ int x=80;
display(x);
printf("程序结束");
return 0;
}
void display(int a)
{
if (a != 0)
{ printf("!");
a=a-1;
display(a);
}
}
对比一下,“在屏幕中间显示80个‘!’。明显就是有一个递归子过程。
...
s: mov byte ptr es:[di],'!'
add di,2
int 7ch
se: nop
...
...7ch中断例程...
lp: push bp
mov bp,sp
dec cx
jcxz lpret
add [bp+2],bx
lpret: pop bp
iret
....bp....用来获取和访问子程序在堆栈里面的临时变量 |