楼上的兄弟主要是没有搞清楚int 21h 0ah号功能调用的详细使用方法,所以才会困惑。
调用前,输入缓冲区的第一字节必须标示输入缓冲区的长度(<81),调用后第二字节的内容为用户真实的输入字串长度。第三字节开始是真实输入缓冲区内容。
所以程序得这样写:
data segment
string db 'Please input one word:$'
str db 10,10 dup(0)
sentence db 'Press enter to quit$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset string
mov ah,09h
int 21h
lea dx,str
mov ah,0ah
int 21h
lea si,str
//缓冲区寻址
mov dx,si
//为了显示调用
mov al,byte ptr[si+1]
//计算要移动的偏移
movzx ax,al
//长度对齐
add si,ax
//移动指针
add si,2
//加上前两个字节的长度
mov byte ptr[si],'$'
//放入字符串终止符
add dx,2
mov ah,09h
int 21h
lea dx,sentence
mov ah,09h
int 21h
mov ah,01h
int 21h
mov ah,4ch
int 21h
code ends
end start
BTW:
没有处理换行,楼主自己在琢磨一下吧。