新手学汇编 关于输出字符串的问题

temanw 2020-04-09 03:27:53

.MODEL SMALL
.STACK 100H
.DATA
IN_MSG DB 'Input Character:$'
Out_MSG DB 0DH,0AH,'Output Character:'
CharData DB ?,'$'

.CODE
MAIN PROC

MOV AX,@DATA
MOV DS,AX


MOV AH,9
LEA DX,IN_MSG
INT 21H


MOV AH,1
INT 21H


MOV CharData,AL ;把用户输入的内容存储到CharData,

MOV AH,9
LEA DX,OUT_MSG
INT 21H


MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN



这个程序实现的功能是,用户输入一个单字,然后程序回显他输入的单字

初学汇编想询问几个问题

1.字符串末尾应该加$,但是在这里,Out_MSG DB 0DH,0AH,'Output Character:' 这里为什么没有加$
2.CharData DB ?,'$' 这句代码,相当于用户输入的内容替代问号并且在后面加上一个$ 是这个意思吗
3.MOV AH,9
LEA DX,OUT_MSG
INT 21H
这个的作用只是显示OUT_MSG的内容吧?
前面把用户输入的内存存储到CharData了 但是这句代码并没有输出CharData,那么为什么结果里面会出现CharData的内容呢

---------------------------



.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
MOV AH,2
MOV DL,'?'
INT 21H

MOV AH,1
INT 21H

MOV BL,AL
;备份
MOV AH,2
MOV DL,0DH
INT 21H

MOV DL,0AH
INT 21H
MOV DL,BL
INT 21H


MOV AH,4CH
INT 21H


MAIN ENDP
END MAIN



还有这段代码 实现把用户输入一个单字回车把它输入的单字显示出来
其中我无法理解 MOV BL,AL 为什么要把AL备份一遍呢
...全文
202 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
temanw 2020-04-10
  • 打赏
  • 举报
回复
引用 3 楼 zara 的回复:
那个著名的 RalfBrown 的中断说明里说是改变了的,在 dos622 和 dos710 里试了,也确实如此,但 dosbox 里的却没有。 所以,还是当有吧。
谢谢您 明白了
temanw 2020-04-10
  • 打赏
  • 举报
回复
引用 4 楼 早打大打打核战争 的回复:
DOS文档里说的是错的,int 21h ah=02h,返回后al内容是最后输出的字符
谢谢谢谢,我就说有点奇怪
  • 打赏
  • 举报
回复
DOS文档里说的是错的,int 21h ah=02h,返回后al内容是最后输出的字符

zara 2020-04-10
  • 打赏
  • 举报
回复
那个著名的 RalfBrown 的中断说明里说是改变了的,在 dos622 和 dos710 里试了,也确实如此,但 dosbox 里的却没有。
所以,还是当有吧。
temanw 2020-04-10
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
前面的三个问题,其实就是一个。那个功能输出字符串是以 '$' 为结束的,这样就是要从所给的地址开始逐个输出字符直到这个 '$' 为止,源程序里数据是怎么定义的,和这个实际上是没有关系的,源程序里更多的是给人看的,编译后,在数据组织上 OUT_MSG 和 Char_Data 间是没有间隔的,更没有那个 '$' 字符,所以在输出 OUT_MSG 时会一直向后进行输出,直到遇到 '$' ,这样就会把 Char_Data 一并输出了。有时程序没写对,输出时或遇到有大量的乱码,有可能就是这个或类似的原因了。 最后那个问题,应该是下面的输出字符功能会破坏 AL 里的内容吧,这个仔细看看下相关中断功能的说明就知道了。
谢谢您,前面的问题大概懂了。 但是最后一个,备份以后只调用了 dos功能号:2,我查表发现 2 的出口参数没有破坏al的内容,所以不太明白,麻烦您再指教指教
zara 2020-04-09
  • 打赏
  • 举报
回复
前面的三个问题,其实就是一个。那个功能输出字符串是以 '$' 为结束的,这样就是要从所给的地址开始逐个输出字符直到这个 '$' 为止,源程序里数据是怎么定义的,和这个实际上是没有关系的,源程序里更多的是给人看的,编译后,在数据组织上 OUT_MSG 和 Char_Data 间是没有间隔的,更没有那个 '$' 字符,所以在输出 OUT_MSG 时会一直向后进行输出,直到遇到 '$' ,这样就会把 Char_Data 一并输出了。有时程序没写对,输出时或遇到有大量的乱码,有可能就是这个或类似的原因了。
最后那个问题,应该是下面的输出字符功能会破坏 AL 里的内容吧,这个仔细看看下相关中断功能的说明就知道了。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧