目录 上一页 下一页 下一章

第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 43AAABCABCABBCABBC
  仔细看看输出的结果,"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

目录 上一页 下一页 下一章