当前位置:鱼C工作室 >汇编语言 > 查看文章

Call指令和Ret指令讲解03 – 零基础入门学习汇编语言50

第十章:Call指令和Ret指令讲解03

 

让编程改变世界

Change the world by program


 

call指令和ret指令的配合使用2

 

我们看一下程序的主要执行过程:

(1)前三条指令执行后,栈的情况如下:

call指令和ret指令的配合使用

 

(2)call 指令读入后,(IP) =000EH,CPU指令缓冲器中的代码为 B8 05 00

CPU执行B8 05 00,首先,栈中的情况变为:

call指令和ret指令的配合使用

 

然后,(IP)=(IP)+0005=0013H。

(3)CPU从cs:0013H处(即标号s处)开始执行。

(4)ret指令读入后:(IP)=0016H,CPU指令缓冲器中的代码为 C3;
当CPU执行C3,相当于进行pop IP,执行后,栈中的情况为:

call指令和ret指令的配合使用

 

(IP)=000EH;

(5)CPU回到 cs:000EH处(即call指令后面的指令处)继续执行。

 

从上面的讨论中我们发现,可以写一个具有一定功能的程序段,我们称其为子程序,在需要的时候,用call指令转去执行。

 

可是执行完子程序后,如何让CPU接着call指令向下执行?

没错,答案就是ret。

 

call指令后面的指令的地址将存储在栈中,所以可以在子程序的后面使用 ret 指令,用栈中的数据设置IP的值,从而转到 call 指令后面的代码处继续执行。

这样,我们可以利用call和ret来实现子程序的机制。

 

我们来看一段用C写的程序源代码下载

 

子程序的框架

子程序框架

分页阅读: 1 2 下一页
为您推荐

报歉!评论已关闭.