子程序调用和中断指令

来源:互联网 发布:网络水军哪里找 编辑:程序博客网 时间:2024/04/28 10:27

子程序的调用及返回指令

1.调用call dst;
调用的时候ip或eip压栈将机器执行的当前值(即call指令的下一条指令的地址)压入堆栈以便子程序返回用。
2.返回ret
返回时ip出栈
带参数的返回指令 ret N
N是一个16位的常数(偶数),该指令是将返回地址弹入ip或eip后在执行sp/esp+N -->sp/esp.
该指令允许返回地址出栈后修改堆栈的指针,这便于调用子程序以前把子程序所需要的参数入栈,
以便子程序运行时使用这些参数。当子程序返回后,这些参数已不再使用,就可以修改指针使其指向参数入栈
以前的值。

中断指令
中断服务程序可以被认为是一种特殊的子程序,可以被存放在主存的任何位置。中断服务程序的首(起始、入口)地址,被安排在中断向量表中。
      中断向量表设置在主存的最低1KB区域内,物理地址000H ~ 3FFH。向量表从0开始,每4个字节(双字)对应一个中断,低字存放中断服务程序的偏移地址IP,高字存放其段地址CS。中断向量号n的中断服务程序存放在中断向量表4×n的物理地址处。
      中断时,为保证中断服务程序正确返回原来的程序,要把被中断程序的断点处逻辑地址CS : IP压入堆栈保存,还要保存反映现场状态的标志寄存器FLAGS。然后,将中断服务程序的入口地址送CS和IP寄存器转去执行中断服务程序。
      中断服务程序执行完后返回原程序时,应恢复堆栈中保存的断点地址CS : IP,以及标志寄存器。中断返回指令IRET实现从中断服务程序返回原程序
  1. int n   ;产生中断类型为n的中断
  2. into;溢出中断指令
  3. iret;中断返回指令 相关内容要出栈


int 21h;系统功能调用指令
通过用int 21h;再调用每个功能事先规定的功能号,就可以进入相应的中断服务程序入口。

如何使用21号中断?
答:把功能调用编号置于寄存器AH中,设置入口参数,cpu执行int 21h,最后给出出口参数。
举例:
mov ah,1;功能号01h->ah
int 21h;调用21h号软中断
功能:等待键盘输入,并回送显示器。

mov dl,41h;       将字符A的ASCII码,送->DL
mov ah,2;         21h的2软中断,将dl内容显示到屏幕上
int 21h

mov ah,4ch;
int 21h;  功能号4ch终止程序,返回dos

 

原创粉丝点击