data segment
s db 80
db 0
db 80 dup(0), '$'
inmsg db 'Input string (<80):$'
crlf db 0dh, 0ah, '$'
data ends
assume cs:code, ds:data
code segment
start:
mov ax, data
mov ds, ax
show inmsg
mov ah,9
lea dx, inmsg
int 21h
read
mov ah,0ah
lea dx, s
int 21h
mov ch,0
mov cl, s[1] the string size
mov si, 0
L0:
cmp si, cx
jz print
mov al, s[2+si]
cmp al, '0'
jl n0
cmp al,'9'
ja n0
mov ah, s[2+si+1]
cmp ah,'A'
jl n0
cmp ah, 'F'
ja n1
add si,2 ok, skip 2 chars
jmp L0
n1:
cmp ah,'a'
jl n0
cmp ah,'f'
ja n0
add si,2ok too, skip 2 chars
jmp L0
n0:
mov s[2+si], '*'
inc si
jmp L0
print:
mov s[2+si],'$'
lea dx, crlf
mov ah,9
int 21h
lea dx, s[2]
mov ah,9
int 21h
lea dx, crlf
int 21h
mov ah,4ch
int 21h
code ends
end start
启动Debug,它是可用于测试和调试
MS-DOS
可执行文件的程序。
Debug
[[drive:][path]
filename
[parameters]]
参数
[drive:][path]
filename
指定要测试的可执行文件的位置和名称。
parameters
指定要测试的可执行文件所需要的任何命令行信息。
++
说明
使用
Debug
命令但不指定要测试的文件
如果使用没有位置和文件名的
Debug
命令,然后键入所有的
Debug
命令以响应
Debug
提示符,连字符
(-)。
Debug
命令
以下是
Debug
命令列表:
?
显示
Debug
命令列表。
a
汇编
8086/8087/8088
记忆码。
c
比较内存的两个部分。
d
显示部分内存的内容。
e
从指定地址开始,将数据输入到内存。
f
使用指定值填充一段内存。
g
运行在内存中的可执行文件。
h
执行十六进制运算。
i
显示来自特定端口的
1
字节值。
l
将文件或磁盘扇区内容加载到内存。
m
复制内存块中的内容
/n
为
l
或
w
命令指定文件,或者指定正在测试的文件的参数。
o
向输出端口发送
1
个字节的值。
p
执行循环、重复的字符串指令、软件中断或子例程。
q
停止
Debug
会话。
r
显示或改变一个或多个寄存器。
s
在部分内存中搜索一个或多个字节值的模式。
t
执行一条指令,然后显示所有寄存器的内容、所有标志的状态和
Debug
下一步要执行的指令的解码形式。
u
反汇编字节并显示相应的原语句。
w
将被测试文件写入磁盘。
xa
分配扩展内存。
xd
释放扩展内存。
xm
映射扩展内存页。
xs
显示扩展内存的状态。
分隔命令参数
所有
Debug
命令都接受参数,除了
q
命令之外。可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。因此,以下命令等价:
dcs:100
110
d
cs:100
110
d,cs:100,110
指定有效地址项
Debug
命令中的
address
参数指定内存位置。Address
是一个包含字母段记录的二位名称或一个四位字段地址加上一个偏移量。可以忽略段寄存器或段地址。a,g,l,t,u
和
w
命令的默认段是
CS。所有其他命令的默认段是
DS。所有数值均为十六进制格式。
有效地址如下:
CS:0100
04BA:0100
在段名和偏移量之间要有冒号。
指定有效范围项
Debug
命令中的
range
参数指定了内存的范围。可以为
range
选择两种格式:起始地址和结束地址,或者起始地址和长度范围(由
l
表示)。
例如,下面的两个语法都可以指定从
CS:100
开始的
16
字节范围:
cs:100
10f
cs:100
l
10
++
Debug
子命令
选择
Debug
命令以获得详细信息。
Debug:A(汇编)
Debug:C(比较)
Debug(转储)
Debug:E(键入)
Debug:F(填充)
Debug:G(转向)
Debug:H(十六进制)
Debug:I(输入)
Debug:L(加载)
Debug:M(移动)
Debug:N(名称)
Debug:O(输出)
Debug:P(执行)
Debug:Q(退出)
Debug:r(寄存器)
Debug:s(搜索)
Debug:T(跟踪)
Debug:U(反汇编)
Debug:W(写入)
Debug:XA(分配扩展内存)
Debug:XD(取消分配扩展内存)
Debug:XM(映射扩展内存页)
Debug:XS(显示扩展内存状态)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)