DATA SEGMENT
BUF DB 25 ; 缓冲区长度
ACTHAR DB ? ; 保留单元, 存放输入的实际字符个数
CHAR DB 25 DUP (?) ; 定义25个字节存储空间
DB '$'
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET BUF
MOV AH, 0AH
INT 21H
MOV DX,OFFSET BUF
MOV AH,09H
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
这段程序我就是想从键盘输入一段字符串,再输出,但不能实现。请帮我看看哪有问题。另外那个OFFSET是什么?去掉不行吗?
汇编字符串输入输出问题
答案:2 悬赏:60
解决时间 2021-02-22 20:33
- 提问者网友:江山如画
- 2021-02-22 17:01
最佳答案
- 二级知识专家网友:冷眼_看世界
- 2021-02-22 17:46
MOV DX,OFFSET BUF
;参数不真确
MOV AH,09H
INT 21H
;下面是完整代码
---------------------------------------------
DATA SEGMENT
BUF DB 25 ; 缓冲区长度
ACTHAR DB ? ; 保留单元, 存放输入的实际字符个数
CHAR DB 25 DUP (?) ; 定义25个字节存储空间
DB '$'
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET BUF
MOV AH, 0AH
INT 21H
CMP AL,0FFH
JZ EXIT
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
MOV DX,OFFSET BUF+2
;MOV DX,OFFSET CHAR
MOV BX,OFFSET ACTHAR
MOV BL,[BX]
ADD BX,DX
MOV BYTE PTR [BX],'$'
MOV AH,09H
INT 21H
EXIT:
MOV AX,4C00H
INT 21H
CODE ENDS
END START
;参数不真确
MOV AH,09H
INT 21H
;下面是完整代码
---------------------------------------------
DATA SEGMENT
BUF DB 25 ; 缓冲区长度
ACTHAR DB ? ; 保留单元, 存放输入的实际字符个数
CHAR DB 25 DUP (?) ; 定义25个字节存储空间
DB '$'
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET BUF
MOV AH, 0AH
INT 21H
CMP AL,0FFH
JZ EXIT
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
MOV DX,OFFSET BUF+2
;MOV DX,OFFSET CHAR
MOV BX,OFFSET ACTHAR
MOV BL,[BX]
ADD BX,DX
MOV BYTE PTR [BX],'$'
MOV AH,09H
INT 21H
EXIT:
MOV AX,4C00H
INT 21H
CODE ENDS
END START
全部回答
- 1楼网友:疯山鬼
- 2021-02-22 19:03
dos功能调用0ah号功能,用回车结束字符串的输入,实际输入的字符数不包含回车符。当显示这个字符串的时候,它是正常显示的,前面并没有空格,但遇到回车符时,光标回到本行首列,继而显示后续的00h,而0是非显示字符,显示时一空格代替,故而出现这种情况。
在显示字符串指令的后面加上两条指令:
mov ah,1
int 21h
暂停一下,看看光标位置,应该能明白了。
解决办法:
mov dx, offset buf
mov ah, 0ah
int 21h
lea si,buf[1]
mov bl,[si]
xor bh,bh
mov byte ptr [si][bx][1],'$'
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯