汇编源程序-字符串输入输出.ppt

汇编源程序-字符串输入输出.ppt

ID:51163800

大小:434.97 KB

页数:15页

时间:2020-03-19

汇编源程序-字符串输入输出.ppt_第1页
汇编源程序-字符串输入输出.ppt_第2页
汇编源程序-字符串输入输出.ppt_第3页
汇编源程序-字符串输入输出.ppt_第4页
汇编源程序-字符串输入输出.ppt_第5页
资源描述:

《汇编源程序-字符串输入输出.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、5.3字符串输入输出方法5.3.1字符串输出【入口参数】AH=9,是DOS的子功能号DS:DX=待输出字符串的首字符的逻辑地址【说明】(1)被输出的字符串的长度不限,但必须连续存放在内存的某个地方,且以ASCII值为24H的字符'$'结束,中间可以含有回车符、换行符、响铃符等特殊功能符号,存放字符串的起始逻辑地址必须放在指定的寄存器DS和DX中。(2)‘$’符本身不输出到屏幕。(3)调用结果是把字符串中的各个字符从光标当前所在位置起,依次显示在屏幕上,直至遇到‘$’为止,光标停在最后一个输出符号的后面。(4)如果程序中需要输出‘$’,

2、只能用2号子功能实现。(5)9号子功能调用将影响AL的内容,不改变其余寄存器及标志寄存器的值。【例5.5】分析下面的程序,写出程序执行后的结果。dataSEGMENTbuf1DB'Hello,',13,10,'thisisanexample.$',13,10buf2DB'--END--$'dataENDScodeSEGMENTASSUMECS:code,DS:datamain:MOVAX,dataMOVDS,AXLEADX,[buf1]MOVAH,9INT21HMOVDX,OFFSETbuf2INT21HMOVAX,4C00HINT2

3、1HcodeENDSENDmain【解】执行结果如下:Hello,thisisanexample.--END--分析一下例5.5的程序:(1)程序包括两个段,data段中只有变量定义,是数据段,code段中是指令序列,是代码段。(2)ASSUME伪指令只用来说明code段中定义的各标识符(实际只有标号main)以CS为缺省段寄存器,data段中的各标识符(两个变量)以DS为缺省段寄存器。ASSUME伪指令本身并没有对CS和DS赋值的功能,所以代码段的最前面两条指令就是用来对DS赋值,因为后面的字符串输出要求把输出串的段地址放到DS中。

4、(3) 程序中没有类似的指令对CS赋值。这是因为操作系统DOS把该程序调进内存后,会把机器的控制权交给该程序,这是通过修改CS和IP的值的方法实现的。也就是说,DOS在移交控制权时就已经把CS和IP都放好了正确的值,而不需要用户程序进行处理。(4)程序中的第1次INT21H调用前,用LEA指令把变量buf1的偏移地址取到寄存器DX中,用MOV指令把AH赋值为子功能号9,而在此之前DS已被赋值为buf1所在的data段的段地址。(5)变量buf1中的第1个字符是字母'H',9号子功能从该字母开始,逐个显示后续字符,遇到13和10分别进行

5、回车换行处理,直到遇到'$'符为止,'$'本身并不出现在屏幕上,此时的输出情况是:Hello,thisisanexample.并且光标停在了第2行输出的最后一个符号‘.’的后面。虽然buf1的定义中在‘$’后面还有内容,这些内容都不会被输出。(6)由于9号子功能调用的结果并不改变除了AL以外的其它寄存器的值,故调用完后AH中仍然是9,所以第2次调用INT21H时只对DX重新赋了值,取的是buf2的偏移地址,因而第2次INT21H调用仍然是9号,从光标所在位置输出buf2的内容直到'$',于是得到前面的输出结果。【例5.6】对例5.5的

6、程序稍做修改成为下面的情况,写出程序执行后的结果。dataSEGMENTbuf1DB'Hello,',13,10,'thisisanexample.',13,10buf2DB--END--$dataENDScodeSEGMENTASSUMECS:code,DS:datamain:MOVAX,dataMOVDS,AXLEADX,[buf1]MOVAH,9INT21HMOVAX,4C00HINT21HcodeENDSENDmain【解】执行结果如下:Hello,thisisanexample.--END--5.3.2字符串输入【入口参数】

7、AH=0AH,是DOS的子功能号10DS:DX=输入缓冲区的起始逻辑地址输入缓冲区有特定的要求,其内存图如图5.3所示。len1len2……DS:DX允许输入的最大字符数实际输入的字符数输入串的各个字符图5.3用DOS的10号子功能进行字符串输入的缓冲区要求【出口参数】由DOS的10号子功能在输入缓冲区中填写实际输入情况,即根据键盘输入情况,对图5.3中的“实际输入字符数”和“输入串的各个字符”部分进行填写。【说明】(1)输入缓冲区是一段连续的内存区,首地址必须在调用10号子功能前放到指定的寄存器DS和DX中。(2)10号子功能在调用

8、时等待操作员从键盘上按键,直到按下回车键为止,按键情况会显示在屏幕上,最后按下的回车键会导致回车操作。如果在按回车键之前发现输入有错误,可以使用退格键或向左的箭头进行修改。(3)输入缓冲区的最前面一个字节(图5.3中le

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。