我在打印从键盘读取的字符串时遇到问题,如果字符串是最大长度然后它可以工作但是如果我只输入3个字符,例如我有一个空白的黑色空格,这就是代码:
assume cs:code,ds:data
data segment
sir db 12 dup (?),'$'
mesaj db "Who`s your daddy?",13,10,"$"
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dx,offset mesaj
mov ah,09h
int 21h
mov bx,offset sir
mov sir[0],11
mov dx,bx
mov ah,0ah
int 21h
mov dx,offset sir
mov ah,09h
int 21h
mov ah,01h
int 21h
mov ax,4c00h
int 21h
code ends
end start
答案 0 :(得分:0)
如果您将sir db 12 dup (?), '$'
更改为sir db 12 dup('$'),'$'
,并将mov dx, offset sir
更改为mov dx, offset sir + 2
,而不是其他人在评论中建议的那样,那么您的代码应该有效。
但是,如果您想清楚地看到结果,则需要打印一些换行符。
这是因为0ah
例程(字符串输入):
回显您对终端的输入,包括按Enter键时选择的回车符(0dh
),但不包括将光标移动到的换行符(0ah
)下一行
将所有输入(包括回车)放在指定的内存位置,但不再换行。
这意味着在输入例程运行后,光标会立即位于您在上输入的行的
接下来,当您输出字符串时,拾取最后的回车符并将光标返回到行的开头,但同样没有换行符。之后(通过您的程序或系统上的任何其他程序)写入的内容很可能会覆盖您打印的内容。因此,再次打印换行符,使其首先进入下一行。
打印换行符应该简单如下:
data segment
....
lf db 10, '$'
....
code segment
....
mov dx, offset lf
mov ah, 9
int 21h
....
mov dx, offset lf
mov ah, 9
int 21h
....