过程调用中断与异常.docVIP

  • 2
  • 0
  • 约1.86千字
  • 约 4页
  • 2017-06-08 发布于重庆
  • 举报
过程调用中断与异常

过程调用类型 处理器支持两种类型的过程调用: [1]CALL与RET指令 [2]ENTER与LEAVE指令,配合CALL与RET指令 这两种过程调用机制都使用了程序栈(通常简称为“栈”)保存调用过程的状态、传递参数到被调过程,并为当前执行的过程存储局部变量。 栈 栈是一组连续的内存单元(见图6-1),它位于SS寄存器指定的段中,最长可达4GBytes(即段的最大长度)。 。。PUSH指令将数据压入栈中,ESP寄存器递减,写入项位于栈顶。 。。POP指令读取栈顶的数据,ESP寄存器递增。 程序或操作系统可以设置多个栈,栈的最大数量取决于段和可用的物理内存。 当设置了多个栈时,同一时间只有一个栈——当前栈——是可用的,当前栈所在的段由SS寄存器指定。 所有的栈操作都是在当前栈进行的,比如,将ESP寄存器中的值作为内存地址时,它指向的是当前栈的一个地址。 图6-1 栈结构 [1]设定一个栈 。。设定一个栈段 。。将此栈段的段选择器载入SS寄存器(使用MOV、POP或LSS指令) 。。载入栈指针到ESP寄存器(使用MOV、POP或LSS指令)。 [2]栈对齐 栈指针可以是16位(字)或32位(双字)边界,这取决于栈段的宽度,而栈段的宽度取决于段描述符中的D标志。 处理器并不会检查栈指针是否对齐,这是运行在处理器上的程序和任务的职责,未对齐的栈指针会极大地降低性能,有时候还会导致程序故障。

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档