字符及字符串输入输出与顺序程序设计实验.docx

上传人:b****7 文档编号:16545531 上传时间:2023-07-14 格式:DOCX 页数:12 大小:95.66KB
下载 相关 举报
字符及字符串输入输出与顺序程序设计实验.docx_第1页
第1页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第2页
第2页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第3页
第3页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第4页
第4页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第5页
第5页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第6页
第6页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第7页
第7页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第8页
第8页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第9页
第9页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第10页
第10页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第11页
第11页 / 共12页
字符及字符串输入输出与顺序程序设计实验.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

字符及字符串输入输出与顺序程序设计实验.docx

《字符及字符串输入输出与顺序程序设计实验.docx》由会员分享,可在线阅读,更多相关《字符及字符串输入输出与顺序程序设计实验.docx(12页珍藏版)》请在冰点文库上搜索。

字符及字符串输入输出与顺序程序设计实验.docx

字符及字符串输入输出与顺序程序设计实验

 

字符及字符串输入输出与顺序程序设计实验(总9页)

 

微机原理第二次试验

 

字符及字符串输入输出与顺序程序设计实验

 

班级:

姓名:

学号:

日期:

 

字符及字符串输入输出与顺序程序设计实验

2.2.1实验目的

1、学习和掌握字符及字符串的输入输出方法。

2、掌握顺序程序的设计方法。

3、进一步掌握调试工具的使用方法。

2.2.2实验预习要求

1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号为0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。

2、复习BCD码运算调整指令。

3、根据“2.2.3实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。

4、从“2.2.4实验习题”中任选一道题目,编写源程序,以便上机调试。

2.2.3实验内容

从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。

1、问题分析

比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。

由于数字09的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。

综上所述,需要考虑以下问题。

(1)从键盘输入一个一位十进制数的方法

通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:

MOVAH,01H

INT21H;此时程序等待用户键入,键入字符的ASCII码值存在AL中

SUBAL,30H;减去30H后得到键入数字所代表的数值

(2)提示信息字符串的显示

通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。

指令格式如下:

MOVDX,OFFSETINFOR1;INFOR1为在数据段中定义的要显示的字符串

MOVAH,09H

INT21H

(2)非压缩型BCD数加法调整指令的使用

设从键盘输入的数值已存放在寄存器AL,BL中,可用下列程序完成数据相加和调整操作:

XORAH,AH

ADDAL,BL

AAA;执行该指令后,AH中为和的十位上的数字,AL中为个位上的数字

请读者考虑,为什么要使用指令“XORAH,AH”,不用行否

(3)计算结果的显示

执行完AAA指令后,只需分别将AH(十位上的数值)和AL(个位上的数值)加上30H,并依次调用功能号为2的DOS功能调用来显示字符。

具体指令代码如下:

PUSHAX

MOVDL,AH

ADDDL,30H

MOVAH,02H

INT21H

POPAX

MOVDL,AL

ADDDL,30H

MOVAH,02H

INT21H

2、源程序框架

DATASEGMENT

INFOR1DB"PleaseInputtheFirstData(<10):

$"

INFOR2DB0AH,0DH,"PleaseInputtheSecondData(<10):

$"

INFOR3DB0AH,0DH,"TheResultis:

$";0DH和0AH分别为非显示字符回

;车和换行的ASCII码值,美圆符号“$”为字符串结束标志,不能省略。

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

显示提示信息INFOR1并从键盘接收一个字符的指令序列

SUBAL,30H

MOVBL,AL

显示提示信息INFOR2并从键盘接收一个字符的指令序列

SUBAL,30H

PUSHAX

POPAX

PUSHAX

显示十位及个位上数字的指令序列

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

3、程序调试

源程序编写完成后,先静态检查,无误后,对源程序进行汇编和连接,生成可执行文件。

在DOS命令提示符下运行该程序,分析运行结果是否正确。

若结果不正确,使用DEBUG对其进行调试。

2.2.4实验习题

1、设a,b,c,d为四个压缩型BCD数,它们被存放在内存dbcd开始的4个存储单元中,计算a+b+c+d,并将结果在屏幕上显示出来(注意压缩型BCD数的表示方法:

十进制数38表示成压缩型BCD数时应写成38H)。

程序编写完成并运行正确后,打开源程序,改变a,b,c,d的内容,然后重新进行汇编、连接并运行程序,检查程序运行结果与手工计算结果是否相符。

下面给出几组实验用数据:

(1)a=11,b=23,c=25,d=31

(2)a=10,b=20,c=30,d=40

(3)a=45,b=45,c=45,c=45

(4)a=88,b=99,c=77,d=66

(注意压缩型BCD数的表示方法:

十进制数38表示成压缩型BCD数时应写成38H)

2、从键盘输入两个一位十进制数,计算这两个数之积,并将结果在屏幕上显示出来。

3、从键盘输入09中任意一个数自然数,将其平方值在屏幕上显示(使用查表法实现)。

2.2.5实验报告要求

1、补全“2.2.3实验内容”中源程序框架内未写出的程序代码,并说明你在调试该程序过程中遇到了哪些问题,是如何处理的。

补全后的代码如下:

STACKSEGMENT

STLDB100HDUP()

STACKENDS

DATASEGMENT

INFOR1DB"PleaseInputtheFirstData(<10):

$"

INFOR2DB0AH,0DH,"PleaseInputtheSecondData(<10):

$"

INFOR3DB0AH,0DH,"TheResultis:

$"

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVSP,LENGTHSTL

;表达式“LENGTHSTL”的功能为计算STL中定义的变量的个数,

;汇编后其值为100H,详见教材5.2.2

MOVDX,OFFSETINFOR1

;INFOR1为在数据段中定义的要显示的字符串

MOVAH,09H

INT21H

MOVAH,01H

INT21H;此时程序等待用户键入,键入字符的ASCII码值存在AL中

SUBAL,30H;减去30H后得到键入数字所代表的数值

MOVBL,AL

MOVDX,OFFSETINFOR2

;INFOR2为在数据段中定义的要显示的字符串

MOVAH,09H

INT21H

MOVAH,01H

INT21H;此时程序等待用户键入,键入字符的ASCII码值存在AL中

SUBAL,30H;减去30H后得到键入数字所代表的数值

XORAH,AH

MULBL

AAA;执行该指令后,AH中为和的十位上的数字,AL中为个位上的数字

PUSHAX

MOVDX,OFFSETINFOR3

;INFOR3为在数据段中定义的要显示的字符串

MOVAH,09H

INT21H

POPAX

PUSHAX

MOVDL,AH

ADDDL,30H

MOVAH,02H

INT21H

POPAX

MOVDL,AL

ADDDL,30H

MOVAH,02H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2、从“2.2.4实验习题”中任选一道题目,画出流程图,编写源程序,并说明在调试过程中遇到了哪些问题,是如何处理的。

2.从键盘输入两个一位十进制数,计算这两个数之积,并将结果在屏幕上显示出来。

调试中遇到的问题:

开始没有用的AAM指令,即非压缩型BCD乘法调整指令,而是沿用了上例中的AAA指令,结果中有些可以正常显示,如1*2,3*2,3*4,而像5*6,5*5,4*4就不能正常显示。

后查书找到了乘法调整指令,修正后正常运行。

 

流程图:

 

 

源代码:

STACKSEGMENT

STLDB100HDUP()

STACKENDS

DATASEGMENT

INFOR1DB"PleaseInputtheFirstData(<10):

$"

INFOR2DB0AH,0DH,"PleaseInputtheSecondData(<10):

$"

INFOR3DB0AH,0DH,"TheResultis:

$"

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETINFOR1

;INFOR1为在数据段中定义的要显示的字符串

MOVAH,09H

INT21H

MOVAH,01H

INT21H

;此时程序等待用户键入,键入字符的ASCII码值存在AL中

SUBAL,30H;减去30H后得到键入数字所代表的数值

MOVBL,AL

MOVDX,OFFSETINFOR2

;INFOR2为在数据段中定义的要显示的字符串

MOVAH,09H

INT21H

MOVAH,01H

INT21H

;此时程序等待用户键入,键入字符的ASCII码值存在AL中

SUBAL,30H;减去30H后得到键入数字所代表的数值

MULBL;ALBL相乘

AAM;非压缩型BCD码乘法调整指令

PUSHAX

MOVDX,OFFSETINFOR3

;INFOR3为在数据段中定义的要显示的字符串

MOVAH,09H

INT21H

POPAX

PUSHAX

MOVDL,AH

;执行完AAM指令后,只需分别将AH(十位上的数值)和AL(个位上的数值)加上30H,

ADDDL,30H

;并依次调用功能号为2的DOS功能调用来显示字符。

MOVAH,02H

INT21H

POPAX

MOVDL,AL

ADDDL,30H

MOVAH,02H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

3、写出实验小结,内容包括实验心得(收获)、不足之处或今后应注意的问题等。

小结:

通过这次的实验又进一步加深了对汇编的理解以及它的整个运行过程,能熟练掌握它的运行过程,也能够看懂一些基本的顺序设计的汇编程序,能设计出简单的顺序汇编。

刚上机时只想按照老师给出的提纲,把缺省的部分照上面给出的提示简单修改后拷贝,可是当程序出错时便不知道哪里的问题也不会修改,最后静下心仔细看程序后理解了,很快就做出来了。

在今后的学习中要吸取这次的教训,不能急于求成,要脚踏实地,掌握每一个知识点

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2