111111
精灵王
精灵王
  • 注册日期2010-12-08
  • 发帖数640
  • QQ
  • 火币1103枚
  • 粉丝120
  • 关注75
  • 社区明星
阅读:2656回复:0

经典汇编语言教程:7.5.6 寄存器的保护与恢复

楼主#
更多 发布于:2013-01-25 18:02

保护寄存器说明子句的说明格式:
USES  寄存器列表
该说明子句要求汇编程序为其生成保护和恢复寄存器的指令序列,即:在进入子程序执行指令之前,把寄存器列表中的寄存器压进堆栈,在结束子程序执行时,把先前压进堆栈的寄存器弹出,以达到保护寄存器的目的。
寄存器列表:列举出在子程序中需要保护的寄存器名,即:在子程序开始时需要把内容进栈的寄存器名。若有多个寄存器名,则在寄存器名之间要用“空格”来分开。
例如:
DsipPROC USES AX DX, FUNC:WORD, MSG:PTR BYTE
MOVDX, MSG
MOVAX, FUNC
INT 21H
RET
DispENDP

汇编程序在处理该子程序时,会根据子句USES的作用,在第一条指令“MOV DX, MSG”之前,插入把寄存器AX和DX进栈的指令序列,即:
PUSH AX
PUSH DX
而在返回指令RET之前插入把寄存器DX和AX的值弹出的指令序列,即:
POP DX
POP AX
注意:若子程序含有多个RET或IRET指令,那么,汇编程序在每个RET或IRET指令前都将增加相应的弹出堆栈指令序列。
从子句USES的功能来看,它与前面7.4节“寄存器的包含与恢复”中所用的方法完全一致,所不同的是:用USE子句进行寄存器保护和恢复的代码是由汇编程序自动产生的,程序员不用关心如何去做,有点象高级语言的编程风格,而7.4节中的代码则是由程序员自己来安排的

喜欢0 评分0
游客

返回顶部