【发布时间】:2014-11-26 00:15:28
【问题描述】:
我需要检查是否给出了大量的参数。目前我的程序知道什么时候没有参数,什么时候给出了两个以上的参数。如果给出了一个,那么它很糟糕,但我的程序无法识别它。我不能做简单的检查,因为当它被允许(当 /? 是参数时)并且 cx 随循环而变化时,有一种可能性。例如,如果我称它为 prog /?,它应该打印描述,当我称它为 prog arg1 arg2 时,它应该被允许,但 prog arg1 不应该。我该如何检查?
mov ch, 0h
mov cl, [es:0080h]
push cx
cmp cx, 0
je print_description
mov bx, 81h
jmp search_help
jmp exit
search_help:
cmp [es:bx], '?/'
je print_description
inc bx
loop search_help
pop cx
cmp cx, 2
jne print_description
mov bx, 82h
mov si, offset input_filename
mov cx, 255
search_input_filename:
mov dl, [es:bx]
inc bx
cmp dl, 20h
je search_output_filename_prep
mov ds:[si], dl
inc si
loop search_input_filename
search_output_filename_prep:
mov si, offset output_filename
search_output_filename:
mov dl, [es:bx]
inc bx
cmp dl, 0Dh
je program
cmp dl, 20h
je print_description
mov ds:[si], dl
inc si
loop search_output_filename
【问题讨论】:
-
这很简单,在你找不到
/?之后检查你是否有2个参数。 -
但 mycx 已更改,我不知道如何比较,推 cx 然后弹出不起作用:(
-
推送和弹出应该可以工作,就像从内存中重新加载一样(或者甚至只是使用带有内存操作数的
cmp)。 -
但事实并非如此。第二件事呢?你能给我一些样本吗,因为我不知道你在说什么(我在学习 TASM 不是英语)
-
请注意,
80h处的字节并没有给出参数的数量,而是给出了命令行的长度。这可能就是您的代码不起作用的原因。
标签: assembly x86 command-line-arguments dos tasm