|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 肖-肖 于 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[bx],'$'
mov ah,09H ;字符串显示功能
INT 21H ;显示输入的字符串
MOV AH,4CH ;调用返回DOS功能
INT 21H ;返回DOS
CODES ENDS
END START
运行结果是:[/b]
问题是我只是输入了数据,并没有输出数据啊!!! 请指点一下,请说的详细些,最好加上示例代码,谢谢~
调试了一下,发现确实是输出了字符串,不过是在 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[bx], '
;mov dx,offset CHARS
mov ah,09H ;字符串显示功能
INT 21H ;显示输入的字符串
MOV AH,4CH ;调用返回DOS功能
INT 21H ;返回DOS
CODES ENDS
END START
|
|