-36- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
3.3 子程序 | |||||||||||||||||||||
操作系统提供了大量的功能为我们编程时调用,但是仅仅靠这些功能还不能解决所有的问题,比如说我们想把AL寄存器中的数据以二进制的形式显示在屏幕上,这样的功能操作系统可没有提供,解决这样的问题就只能"自力更生"了。 同时也可以发现,有一些问题并非仅出现在一个程序中,可能在编制不同程序时都要遇到同样的问题。解决这些具有普遍性的问题的最好方法末过于单独编制解决特定问题的小段程序并保留起来,在需要时随时将这些小程序加入我们的程序中。所谓的子程序,也就是这样一些供别的程序调用且能解决一些较普遍问题的小程序。 | |||||||||||||||||||||
PROG4 | |||||||||||||||||||||
-a100[Enter] | |||||||||||||||||||||
0F92:0100 mov ah,1 0F92:0102 int 21 0F92:0104 mov cx,8 0F92:0107 mov bh,80 0F92:0109 mov dh,al 0F92:010B mov dl,30 0F92:010D and al,bh 0F92:010F jz 113 0F92:0111 mov dl,31 0F92:0113 mov ah,2 0F92:0115 int 21 0F92:0117 mov al,dh 0F92:0119 shr bh,1 0F92:011B loop 10b 0F92:011D int 20 |
;选择DOS API的01H功能 ;调用21H中断等待键盘输入 ;需要处理8个数位 ;BH寄存器置入10000000B ;DH寄存器保存输入字符的ASCII码副本 ;DL寄存置入字符0的ASCII码30H ;输入字符的ASCII码与10000000B相与,保留最左一位 ;如最左位是0,则转去0113H继续执行 ;若最左位是1,则DL寄存器置入字符1的ASCII码31H ;选择DOS API的02H功能 ;调用21H中断显示DL寄存器中的字符 ;AL寄存器取回输入字符的副本 ;将BH最左位的1右移一位 ;返回010BH,处理ASCII码的Bit6位 ;处理所有的8个位后结束程序 |
||||||||||||||||||||
09FE:0126 [Enter] | |||||||||||||||||||||
上面给出的PROG4程序可以将键盘输入字符的ASCII码以二进制形式显示出来。将此程序存盘后,用"G=100[Enter]"执行这个程序,从键盘输入小写"a",屏幕上就会显示出01100001,这就是十六进制数61H,也就是"a"的ASCII码,PROG4的核心就是将AL寄存器的值以二进制的形式显示在屏幕上。 在讨论有关子程序的问题之前,我们先来学习程序中出现两条新指令: |
|||||||||||||||||||||
![]() |
助记符:SHR(Shift Right) 用 途:将寄存器或存储器中的数向右移位。 格 式:SHR 寄存器,1 SHR 寄存器,CL SHR 存储单元,1 SHR 存储单元,CL 执 行:寄存器或存储器中的数据向右移动1位或CL中指定的位数,最高位填入 0,最低一位移入CF标志 |
||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |