![]() | 第5章 子程序和串处理 | -91- | |||||||||||||||||||
C:\ASM\>DEBUG TEMP.EXE[Enter] | |||||||||||||||||||||
-d cs:0 f[Enter] | |||||||||||||||||||||
0E79:0000 41 41 41 42 43 41 42 43-41 42 42 43 41 42 42 43 | AAABCABCABBCABBC | ||||||||||||||||||||
仔细看看输出的结果,"DUP"并不难理解。 这个程序应用了地址表(ADDR_TBL)传送数据,而且BP寄存器被用于作一般的间接寻址,请注意指令MOV DL BYTE PTR DS:[BP]中的"DS:"就是用于显式地指定DS寄存器提供段地址,是不能省略的。 在这些过程间传递数据的方法之中,最为常用的是通过寄存器和堆栈传递数据。如果子过程主要是由汇编程序调用,那么通过寄存器传送数据是最简捷快速的方法;如果某子过程是为其它高级语言(如PASCAL、C等)编制,那么就应该通过堆栈取得参数,因为高级语言程序进行过程(函数)调用时都是通过堆栈传递数据的。 |
|||||||||||||||||||||
5.2 特殊的过程调用 | |||||||||||||||||||||
在前面我们讨论过子过程的嵌套调用,在这一节里,我们将讨论一些更为特殊的过程调用情况。学过这一节后,我们将对汇编语言独特的灵活性有更深的认识,同时也会更好地理解某些高级语言中特殊的程序设计技巧。先来看这样一个示例程序: | |||||||||||||||||||||
TESTKEY2.ASM code main ascii start: low4b: hex2asc |
segment assume org proc jmp db mov mov int mov mov ror call mov label and xlat mov |
cs:code,ds:code 100h near start '0123456789ABCDEF' bx,offset ascii ah,0 16h dh,al cl,4 al,cl hex2asc al,dh near al,0fh ascii dl,al |
;跳过数据区 ;定义十六进制数对应的ASCII码 ;BX指向ASCII表 ;等待输入按键 ;按键的ASCII码送入DH寄存器暂存 ;准备右循环移位次数 ;AL寄存器向右循环移4位 ;调用HEX2ASC部分 ;取回ASCII码的副本 ;定义标号HEX2ASC ;保留AL原值的高4位 ;取得数字对应的ASCII码 ;显示一个数位 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |