目录 上一页 下一页 下一章

第5章 子程序和串处理 -83-

  BIOS对设备的管理也是通过中断调用来实现的,其中16H中断是BIOS提供的用于处理按键的实用程序,执行第0号功能时CPU会等待用户按键,并把按键的ASCII码由AL寄存器返回,在我们的程序中我们通过AL寄存器将这个ASCII码传送给HEXOUT,由这个子过程负责将此ASCII码以十六进制形式显示在屏幕上。AL寄存器在这里起了传递数据的作用。
5.1.2 通过堆栈传递参数
  传递数据的第二种常用方法是通过堆栈:先将要传送的数据推入堆栈,再调用子过程,子过程从堆栈中取得所需的数据进行处理。请看下面的程序:
STRINGUP
data

mess
data

code

main













main

change




chloop:



.ASM
segment
assume
db 'welco
ends

segment
assume
proc
mov
mov

mov
mov
int
push
call
mov
int

mov
int
endp

proc
push
mov
mov
mov

mov
cmp
jz


ds:data
me to pc world',0dh,0ah,24h



cs:code
far
ax,data
ds,ax

dx,offset mess
ah,9
21h
dx
change
ah,9
21h

ah,4ch
21h


near
bp
bp,sp
bx,[bp+4]
cx,19

al,byte ptr [bx]
al,20h
continue



;定义一个全部为小写的字符串





;初始化DS寄存器指向数据段


;DX寄存器指向字符串首地址
;选择DOS API的09功能
;显示字符串MESS
;通过堆栈传送字符串首地址
;调用CHANGE子过程
;选择DOS API的09功能
;输出大写的字符串

;选择DOS API的4CH功能
;结束进程


;CHANGE子过程
;保存BP寄存器至堆栈
;BP寄存器装入当前堆栈指针
;从堆栈中取得字符串的首地址
;转换19个字符

;从字符串中取一个字符
;是空格吗?
;是空格则转CONTINUE
  CPU执行此指令时会把AL中的数作为偏移量从BX指向的表中取出一字节数据并以此取代AL中的数据。这条指令有些绕,应用起来也有些麻烦:

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章