目录 上一页 下一页 下一章

-38- PC机汇编语言实战精解

0A3E:0123 SHR BH,1
0A3E:0125 LOOP 0115
0A3E:0127 POP AX
0A3E:0128 RET
;"掩膜"向右移动一位
;循环至0115处理Bit6位
;恢复AX寄存器的原值
;返回主程序
0A3E:0129 [Enter]
  (注:请务必先把此程序用PROG4-A.COM为名字存盘,然后用"Q"命令返回DOS,再继续阅读下面的内容。)
  程序中多出的CALL指令就是用于调用子程序的。
助记符:CALL
用 途:调用指定地址开始的一段子程序
格 式:CALL 入口地址
执 行:CPU将返回地址存至堆栈并转至给出的地址处继续执行指令
  从形式上看CALL指令与JMP指令有些类似,但实际上CPU执行CALL指令的动作和JMP指令完全不同。JMP指令仅仅是使IP寄存器中装入一个新地址,而CALL指令不仅可以完成这个工作,同时CPU在执行CALL指令时还会自动把下一条指令的偏移地址压入堆栈。我们可以实际跟踪一下这个程序,看看是不是这样:(返回DOS了吗?)
C:\ASM\>DEBUG PROG4-A.COM[Enter]
-t
AX=0100BX=0000CX=0029DX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=0A3EES=0A3ESS=0A3ECS=0A3EIP=0102 NV UP EI PL NZ NA PO NC
0A3E:0102CD21INT 21
  请注意指令INT的意义,毫无疑问这条指令实际代表着一段程序。我们并不知道21H中断服务程序究竟有多长,而且跟踪系统提供的中断服务程序也没有什么意义,因此有必要对INT指令进行适当的处理。
-p注意不要使用"t"命令
a输入小写字母a
AX=0100BX=0000CX=0029DX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=0A3EES=0A3ESS=0A3ECS=0A3EIP=0102 NV UP EI PL NZ NA PO NC
0A3E:0102CD21INT 21
  "P"是一个新的命令,作用与"T"相似。但这两者又有不同:由于INT指令的实质是调用了操作系统为我们提供的一个子程序,所以若用T命令跟踪INT指令,则就会跟踪到操作系统内部。这是没有必要的同时搞不好也是危险的。P命令则不然,它比T命令要聪明,当它发现被跟踪的指令是INT(或CALL、LOOP等),它会一次将被调用的中断(或子程序、循环)全部执行完,也就是将这些指令"一步"跨过,这样就可以避免T命令的冗长。

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章