![]() | 第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 |