-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 |