2016-08-05 70 views
1

我想从键盘得到输入字符串,并重新显示它邻接我不知道为什么我得到一个消息两次。例如: 输入字符串:1234567 输出将是大会得到输入字符串

您的输入:1234567 您的输入:

我不知道为什么我收到了两遍。这里是我的代码:

data segment 
prompt db 0dh,0ah,"Enter your string(7 Chars Max): $" 
nam  db 8 dup(?) ; 7 plus term char $ 
msg1 db 0dh,0ah,"Your input: $" 
sev db 7 dup(?) 
data ends 
code segment 
assume cs:code,ds:data 
START: 
mov ax,data 
mov ds,ax 
mov dx,offset prompt 
mov ah,09h 
int 21h 
lea si,nam 
mov cx,7 
et:mov ah,01 
int 21h 
mov [si],al 
inc si 
loop et 
mov si+sev,'$' 
mov dx,offset msg1 
mov ah,09h 
int 21h 
lea dx,nam 
mov ah,09h 
int 21h 
mov ah,4ch 
int 21h 
Code ends 
end Start 
+2

'mov si + sev,'$''最有可能不会做你想做的事。为什么不只是'mov [si],'$''? –

+0

@SamiKuhmonen是正确的,循环后[[si]'已经指向字符串的末尾,所以'+ sev'是不必要的。 –

+2

另外'sev'不等于7,它是另一个7字节的内存块,所以将它的偏移量加到'si'指向某处非常错误 –

回答

2

mov si+sev, '$'你想结束标记添加到字符串的行承担。这是不正确的,因为sev是另一个七字节的内存块,所以将其偏移量加到si将指向完全不同的地方,甚至可能导致问题。

由于您每次读取值并递增si时,只要使用mov [si], '$'即可在最后一个字符读取后写入结束标记。