【问题标题】:Assembly get input string汇编获取输入字符串
【发布时间】:2016-08-05 16:02:36
【问题描述】:

我正在尝试从键盘获取输入字符串并重新显示它,但我不知道为什么我会收到两次消息。例如: 输入您的字符串: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

【问题讨论】:

  • mov si+sev, '$' 很可能不会做你想做的事。为什么不只是mov [si], '$'
  • @SamiKuhmonen 是对的,在循环之后[si] 已经指向字符串的末尾,所以+sev 是不必要的。
  • 另外,sev 不等于 7,它是另一个 7 字节的内存块,因此将其偏移量添加到 si 指向某个非常错误的地方
  • 是的,这就是原因,现在可以了

标签: assembly tasm


【解决方案1】:

我假设您正在尝试使用mov si+sev, '$' 行将结束标记添加到字符串中。这是不正确的,因为sev 是另一个七个字节的内存块,因此将其偏移量添加到si 将指向完全不同的位置,甚至可能导致问题。

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

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2012-09-12
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多