目录 上一页 下一页 下一章

-34- PC机汇编语言实战精解

09FE:0114 mov dl,[bx+102]
09FE:0118 cmp dl,0
09FE:011B jz 124
09FE:011D mov ah,2
09FE:011F int 21
09FE:0121 inc bx
09FE:0122 jmp 114
09FE:0124 int 20
;DL寄存器置入字符H的ASCII码
;取到的字符是0码
;如果是0,说明已到字符串结尾,此时转0124H
;未到字符串结尾,则选择DOS API的02H功能
;调用21H中断,将DL中的字符显示出来
;BX寄存器指向下一个字符
;返回0114H继续处理下一个字符
;结束处理,返回DOS
09FE:0126 [Enter]
  PROG3-A中出现了一些新的"面孔",下面分别引见给大家:
(1)伪指令
  当使用DEBUG编制汇编程序时,摆在程序员面前的不仅仅是需要由程序控制的计算机硬件,同时还有为我们提供服务的软件--DEBUG。所以我们通过键盘输入的不但有控制硬件动作的"指令"(MOV、JMP),还有要求DEBUG给与帮助的"命令"(A、RBX)。而"伪指令"恰好是"指令"与"命令"的结合体。
  从应用形式上看,它是和指令写在一起的,而不象DEBUG的命令那样打在提示符后;然而它的作用却和"命令"一样,要求DEBUG为我们做事情。也就是说CPU并不真正执行它,而执行它的是DEBUG。
  现在我们来讨论出现在程序中的第一个伪指令──DB。
  DB(Define Byte)的作用是命令DEBUG将给出的数据放入内存中。数据有两种形式──字符和数字,如果我们需要DEBUG把一些字符的ASCII码放入内存,则可以在这些字符两侧加上单引号,置于DB之后,如DB 'ABCD';如果需要DEBUG把一些16进制数字放入内存,则只需在DB后打出这些数字即可,如DB 'A',42,43,44。要注意的是字符与数字,数字与数字之间的逗号不可丢掉。
  所有数据在内存中都是连续存放的,DB前面的逻辑地址(09FE:0102)就是这一串数据的"首地址"。DB后面指令的逻辑地址由DEBUG自动算出。
(2)数据比较指令
  在PROG3-A中,我们用数字0表示字符串结束,因此在输出字符时,只要判断取到DL中的数据是否为0,即可知道是否已经输出了所有的字符。程序中使用了两条指令完成判断工作,第一条是:
助记符:CMP(Compare)
用 途:比较两个数据的大小
格 式:CMP 寄存器,立即数
    CMP 寄存器,寄存器
    CMP 寄存器,存储单元
    CMP 存储单元,寄存器
    CMP 存储单元,立即数
执 行:CPU将两个待比较的数据做一次减法,结果不保留,但"后果"由标
    志寄存器记录。
  使用CMP指令时要注意这样一点,就是相比较的两个数据位宽要一致,即8位寄存器只能

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章