程序有问题,请指点一下
本帖最后由 肖-肖 于 2021-5-25 17:41 编辑想着:
从键盘输入一串字符,在字符串尾插入“$”,并显示该字符串。
我弄的代码是:
DATAS SEGMENT
BUFSIZE DB 30H ;
ACTLEN DB ? ;实际输入的字符数
CHARS DB 30H DUP(?) ;实际输入的字符从此开始存放
DATAS ENDS
STACKS SEGMENT
;堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov dx,offset BUFSIZE ;输入缓冲区
mov ah,0AH ;10号功能号
INT 21H ;
XOR CX,CX ;清cx为0
mov cl,ACTLEN ;取得输入的字符个数
mov dx,offset CHARS ;输入的字符串起始地址送DX
mov bx,dx ;将字符串首地址送bx
add bx,cx ;得到字符串尾地址
mov BYTE PTR,'$'
mov ah,09H ;字符串显示功能
INT 21H ;显示输入的字符串
MOV AH,4CH ;调用返回DOS功能
INT 21H ;返回DOS
CODES ENDS
END START
运行结果是:
问题是我只是输入了数据,并没有输出数据啊!!! 请指点一下,请说的详细些,最好加上示例代码,谢谢~ 第 26 行有问题,编译报错
人造人 发表于 2021-5-25 17:37
第 26 行有问题,编译报错
代码格式我不弄了,一改上一秒还是好的,一点保存就坏了,我不会弄了
直接这么粘吧 调试了一下,发现确实是输出了字符串,不过是在 0 的位置输出的,正好替换掉输入在屏幕上的那个字符串,所以看起来像没有输出
换一行就看出来了
DATAS SEGMENT
BUFSIZE DB 30H ;
ACTLEN DB ? ;实际输入的字符数
CHARS DB 30H DUP(?) ;实际输入的字符从此开始存放
DATAS ENDS
STACKS SEGMENT
;堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov dx,offset BUFSIZE ;输入缓冲区
mov ah,0AH ;10号功能号
INT 21H ;
mov dl, 0ah
mov ah, 02h
int 21h
XOR CX,CX ;清cx为0
mov cl,ACTLEN ;取得输入的字符个数
mov dx,offset CHARS ;输入的字符串起始地址送DX
mov bx,dx ;将字符串首地址送bx
add bx,cx ;得到字符串尾地址
mov BYTE PTR, '
;mov dx,offset CHARS
mov ah,09H ;字符串显示功能
INT 21H ;显示输入的字符串
MOV AH,4CH ;调用返回DOS功能
INT 21H ;返回DOS
CODES ENDS
END START
肖-肖 发表于 2021-5-25 17:42
代码格式我不弄了,一改上一秒还是好的,一点保存就坏了,我不会弄了
直接这么粘吧
配上背景以后,这样也不错
^_^ 人造人 发表于 2021-5-25 17:56
调试了一下,发现确实是输出了字符串,不过是在 0 的位置输出的,正好替换掉输入在屏幕上的那个字符串,所 ...
嗯嗯 原来如此
我看了下那个DOS的功能调用表
02H是显示器输出
当我想要问为什么是mov dl,0aH的时候
这时候我想起了9号功能有时候也有回车和换行,分别是0DH和0Ah
这下我就明白了呀!
感谢 感谢
我还有一道题,有时间再看下吧,指点下我 嘿嘿 人造人 发表于 2021-5-25 17:58
配上背景以后,这样也不错
^_^
我也这么觉得 哈哈 ^_^
页:
[1]