三九宝宝网宝宝百科宝宝知识

子程序的调用和返回指令

11月22日 编辑 39baobao.com

[取有效地址指令]4、取有效地址指令LEA(Load Effective Address)指令LEA是把一个内存变量的有效地址送给指定的寄存器。其指令格式如下:LEA Reg, Mem该指令通常用来对指针或变址寄存器BX、...+阅读

子程序的调用和返回是一对互逆操作,也是一种特殊的转移操作。

一方面,之所以说是转移,是因为当调用一个子程序时,程序的执行顺序被改变,CPU将转而执行子程序中的指令序列,在这方面,调用子程序的操作含有转移指令的功能,子程序的返回指令的转移特性与此类似;

另一方面,转移指令是一种“一去不复返”的操作,而当子程序完后,还要求CPU能转而执行调用指令之下的指令,它是一种“有去有回”的操作。

为了满足子程序调用和返回操作的特殊性,在指令系统中设置了相应的特定指令。

调用指令(CALL)

调用子程序指令的格式如下:

CALL 子程序名/Reg/Mem

子程序的调用指令分为近(near)调用和远(far)调用。如果被调用子程序的属性是近的,那么,CALL指令将产生一个近调用,它把该指令之后地址的偏移量(用一个字来表示的)压栈,把被调用子程序入口地址的偏移量送给指令指针寄存器IP即可实现执行程序的转移。近调用指令的堆栈操作.

如果被调用子程序的属性是远的,那么,CALL指令将产生一个远调用。这时,调用指令不仅要把该指令之后地址的偏移量压进栈,而且也要把段寄存器CS的值压进栈。在此之后,再把被调用子程序入口地址的偏移量和段值分别送给IP和CS,这样完成了子程序的远调用操作。远调用指令的堆栈操。

子程序调用指令本身的执行不影响任何标志位,但子程序体中指令的执行会改变标志位,所以,如果希望子程序的执行不能改变调用指令前后的标志位,那么,就要在子程序的开始处保护标志位,在子程序的返回前恢复标志位。

例如:

CALL DISPLAY;DISPLAY是子程序名

CALL BX;BX的内容是子程序的偏移量

CALL WORD1;WORD1是内存字变量,其值是子程序的偏移量

CALL DWORD1;DWORD1是双字变量,其值是子程序的偏移量和段值

CALL word ptr [BX];BX所指内存字单元的值是子程序的偏移量

CALL dword ptr [BX];BX所指内存双字单元的值是子程序的偏移量和段值

以下为关联文档:

汇编减法指令减法指令SUB(Subtract Binary Values Instruction)指令的格式:SUB Reg/Mem, Reg/Mem/Imm受影响的标志位:AF、CF、OF、PF、SF和ZF指令的功能是从目的操作数中减去源操作数。...

堆栈操作指令StackOperationInstruction堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的返回地址。它主要有两大类操作:进栈操作和出栈操作。1)、进栈操作、PUSH(Push Word or Doubleword o...

巧用宏指令拒绝Excel2007文件打印现在的办公越来越倾向于无纸化办公了,Excel2007的应用也变得比较频繁了。但是在Excel2007的操作过程中我们可能会不小心碰到了打印按钮或者一些人不太注重节约,比较随意打印Ex...

子程序的调用和返回指令子程序举例编写一个子程序UPPER,实现把寄存器AL中存放的字符变大写。解:;子程序功能:把AL中存放的字符变大写;入口参数:AL;出口参数:AL;算法描述:判断AL中字符必须在’a’~’z’之间才能...

汇编语言算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以 0 减之).CMP 比较.(两操作数作减...

标志位操作指令标志位操作指令是一组对标志位置位、复位、保存和恢复等操作的指令。1、进位CF操作指令、清进位指令CLC(Clear Carry Flag):CF←0、置进位指令STC(Set Carry Flag):CF←1...

算术运算指令算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。该组指令的操作数可以是8位、16位和32位(80386+)。当...

传送—填充指令MoveandFillInstruction传送—填充指令(Move-and-Fill Instruction) 传送—填充指令是把位数短的源操作数传送给位数长的目的操作数。指令格式如下: MOVSX/MOVZX Reg/Mem, Reg/Mem/Imm ;80386+ 其中...

子程序的参数传递子程序一般都是完成某种特定功能的程序段。当一个程序调用一个子程序时,通常都向子程序传递若干个数据让它来处理;当子程序处理完后,一般也向调用它的程序传递处理结果,我们称这...

推荐阅读
图文推荐