-100- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
继续使用"G"命令在CS:000C处设置断点,同时从键盘输入字符串"ASSEMBLY"并回车。 | |||||||||||||||||||||
-g=8 c[Enter] | |||||||||||||||||||||
assembly[Enter] | ← 键盘输入的字符串 | ||||||||||||||||||||
AX=0A0D | BX=0000 | CX=0020 | DX=0000 | SP=0000 | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=0E8E | ES=0E7E | SS=0E8E | CS=0E8F | IP=000C | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0E8F:000C | B44C | MOV AH,4C | |||||||||||||||||||
现在我们再次观察一下字符串缓冲区,看看有什么变化。 | |||||||||||||||||||||
d0:f[Enter] | 字符串计数值发生变化,说明从键盘输入了8个字符 | ||||||||||||||||||||
0E8E:0000 | 0A 08 61 73 73 65 6D 62-6C 79 0D 20 00 00 00 00 | ..assembly. .... | |||||||||||||||||||
键盘输入的字符串 | |||||||||||||||||||||
不难看出字节1是由DOS填写的,这个数字并不包括末尾的回车符;输入的字符串末尾只有回车符,无换行符。 采用这个功能不仅编程简单,而且DOS还会根据我们给定的字节0的值限制输入字符的数量,同时如果我们输入有错,我们还可以用退格键修改。运行这个程序试一下就能验证这两个特点。 关于字符串的输出我们以前已经讨论了最简单的方法--调用INT 21H的9号功能。这个功能也有一些缺陷,比如说我们能否用此功能输出这个字符串--"PRICE $1.00"?很明显屏幕上根本看不到"1.00",因为"$"表示字符串结束。 解决方法不难,自编一段程序逐个输出每个字符即可。请看下例: OUTSTR.ASM |
|||||||||||||||||||||
data mess data code main outchar: |
segment assume db'Price: ends segment assume proc mov mov mov mov cmp jz |
ds:data $1.00',0dh,0ah,0 cs:code far ax,data ds,ax bx,offset mess dl,byte ptr [bx] dl,0 exit |
;定义一个中间含'$'符的字符串 ;初始化DS寄存器指向数据段 ;BX寄存器指向字符串首 ;取一个字符送入DL寄存器 ;是字符串结尾吗? ;是结尾则结束程序 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |