![]() | 第5章 子程序和串处理 | -99- | |||||||||||||||||||
![]() |
调 用:INT 21H 返 回:无 |
||||||||||||||||||||
此功能的用法并不难,关键在于缓冲区的格式有些特别: | |||||||||||||||||||||
![]() |
字节0:缓冲区能容纳的字符数(编程时给出) 字节1:缓冲区中已输入的字符数(DOS返回值) 字节2-缓冲区末尾:存放输入的字符 |
||||||||||||||||||||
程序GETSTR1.ASM是这个功能的应用实例: | |||||||||||||||||||||
GETSTR1.ASM | |||||||||||||||||||||
data buffer data code main main code |
segment assume db db ends segment assume proc mov mov mov mov int mov int endp ends end |
ds:data 10,? 10 dup(20h) cs:code far ax,data ds,ax dx,offset buffer ah,0ah 21h ah,4ch 21h main |
;定义字符串缓冲区 ;初始化DS寄存器指向数据段 ;DX寄存器指向字符串缓冲区 ;选择DOS API的0AH功能 ;等待键盘输入字符串 ;结束进程 |
||||||||||||||||||
这个程序不会在屏幕上显示什么结果,我们的目的是用DEBUG跟踪这个程序来分析DOS的这个功能: | |||||||||||||||||||||
-g=0 8[Enter] | |||||||||||||||||||||
AX=0E8E | BX=0000 | CX=0020 | DX=0000 | SP=0000 | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=0E8E | ES=0E7E | SS=0E8E | CS=0E8F | IP=0008 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0E8F:0008 | B40A | MOV AH,0A | |||||||||||||||||||
先在CS:0008处打一个断点,执行DOS的0AH功能前我们先来观察一下程序定义的缓冲区的情况。 | |||||||||||||||||||||
-d0:f[Enter] | 0A为缓冲区中最多可存的字符数 | ||||||||||||||||||||
0E8E:0000 | 0A 00 20 20 20 20 20 20-20 20 20 20 00 00 00 00 | .. .... | |||||||||||||||||||
字符计数值 | 预存于缓冲区中的10个空格 | ||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |