栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

实验2 字符及字符串输入输出与顺序程序设计实验【微机原理】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实验2 字符及字符串输入输出与顺序程序设计实验【微机原理】

2.2字符及字符串输入输出与顺序程序设计实验
  • 头脑风暴
  • 推荐
  • 2.2字符及字符串输入输出与顺序程序设计实验
    • 2.2.1实验目的
    • 2.2.2实验预习要求
    • 2.2.3实验内容
    • 2.2.4实验习题
    • 2.2.5实验报告要求
  • 头脑风暴答案

头脑风暴

拯救地球精英【逻辑题】

推荐

算术运算指令【微机原理】
位操作指令【微机原理】
串操作指令【操作系统】
DOS系统功能调用表(INT 21H)

2.2字符及字符串输入输出与顺序程序设计实验 2.2.1实验目的

1、学习和掌握字符及字符串的输入输出方法
2、掌握顺序程序的设计方法。
3、进一步掌握调试工具的使用方法。

2.2.2实验预习要求

1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号为0AH 以及字符串输出(功能号09H)的调用方法(详见教材5.4.1)。
2、复习BCD码运算调整指令。
3、根据“2.23实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。
4、从“2.24实验习题”中任选一道题目,编写源程序,以便上机调试。

2.2.3实验内容

从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。
1、问题分析
比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6, 这时计算机内部得到的是这两个数的ASCII码值38H和36H。由于数字0~9的ASCII码值与其代表的数值之间 相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令 对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1 的ASCI码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。综上所述,需要考虑以下问题。
(1)从健盘输入一个一位十进制数的方法
通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:

MOV  AH,01H
INT  21H  ;此时程序等待用户键入,键入字符的ASCII码值存在AL中                                                                                                                                                                          
SUB  AL,30H;减去30H后得到键入数字所代表的数值

(2)提示信息字符中的显示
通过功能号为9的DOS功能调用实现字符小显示,注意字符中的最后一个字符必需为$’。指令格式如下:

MOV DX,OFFSET INFOR1;INFOR1为在数据段中定义的要显示的字符小
MOV  AH,09H
INT 21H

(3)非压缩型BCD数加法调整指令的使用
设从键盘输入的数值已存放在寄存器AL,BL中,可用下列程序完成数据相加和调整操作:

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

请读者考虑,为什么要使用指令“XOR AH,AH”,能否不用?
不能
AAA指令后面不写操作数,但实际上隐含累加器操作数AL,AH。指令的操作为

如果 	(AL)^0fH>9,或(AF)=1
则 		(AL)<-(AL)+06H
		(AH)<-(AH)+1
		(AF)<-=1
		(CF)<-(AF)
		(AL)<-((AL)^0fH)
否则 	(AL)<-((AL)^0fH)

(4)计算结果的显示
执行完AAA指令后,只需分别将AH(十位上的数值)和AL(个位上的数值)加上30H,并依次调用功能号为2的DOS功能调用来显示字符。具体指令代码如下:

PUSH AX
MOV DL,AH
ADD DL, 30H
MOV AH,02H
INT 21H
POP AX
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H

2、源程序框架

DATA SEGMENT
	INFOR1 DB	"Please Input the First Data(<10):$"
	INFOR2 DB	0AH,0DH,"Please Input the Second Data(<10):$"
	INFOR3 DB	0AH,0DH,"The Resultis:$"
	;0DH和0AH分别为非显示字符回车和换行的ASCI码值,  
	;美圆符号“S”为字符串结束标志,不能省略。
DATA ENDS
CODE SEGMENT
	ASSUME CS: CODE, DS:DATA
START:  
	MOV  AX,DATA
	MOV  DS,AX
	;显示提示信息INFOR1并从键盘接收一个字符的指令序列  
	SUB  AL, 30H
	MOV  BL,AL
	;显示提示信息INFOR2并从键盘接收一个字符的指令序列  
	SUB  AL,30H
	;求和并调整指令序列
	PUSH  AX
	;显示提示信息INFOR3的指令序列
	POP  AX
	;显示十位及个位上数字的指令序列
	PUSH AX
	MOV AH,4CH
	INT 21H
CODE ENDS
	END START

3、程序调试
源程序编写完成后,先静态检查,无误后,对源程序进行汇编和连接,生成可执行文件。在DOS命令提示符下运行该程序,分析运行结果是否正确。若结果不正确,使用DEBUG对其进行调试。

2.2.4实验习题

1、设ab.cd为四个压缩型BCD数,它们被存放在内存abcd开始的4个存储单元中,计算a+b+c+d,并将结果 在屏幕上显示出来。程序编写完成并运行正确后,打开源程序,改变a,b,c,d的内容,然后重新进行汇编、 连接并运行程序,检查程序运行结果与手工计算结果是否相符。下面给出几组实验用数据:
(l) 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、从键盘输入0~9中任意一个数自然数,将其立方值在屏幕上显示(使用查表法实现)出来。

2.2.5实验报告要求

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

DATA SEGMENT
	INFOR1 DB	"Please Input the First Data(<10):$"
	INFOR2 DB	0AH,0DH,"Please Input the Second Data(<10):$"
	INFOR3 DB	0AH,0DH,"The Resultis:$"
	;0DH和0AH分别为非显示字符回车和换行的ASCI码值,  
	;美圆符号“S”为字符串结束标志,不能省略。
DATA ENDS
CODE SEGMENT
	ASSUME CS: CODE, DS:DATA
START:  
	MOV  AX,DATA
	MOV  DS,AX
	;显示提示信息INFOR1并从键盘接收一个字符的指令序列  
	
	MOV DX,OFFSET INFOR1;INFOR1为在数据段中定义的要显示的字符小
	MOV  AH,09H
	INT 21H

	MOV  AH,01H
	INT  21H  
	;此时程序等待用户键入,键入字符的ASCII码值存在AL中                                                                                                                                                                          


	SUB  AL, 30H;减去30H后得到键入数字所代表的数值
	MOV  BL,AL
	;显示提示信息INFOR2并从键盘接收一个字符的指令序列  

	MOV DX, OFFSET INFOR2
	MOV  AH,09H
	INT 21H
	
	MOV  AH,01H
	INT  21H  ;此时程序等待用户键入,键入字符的ASCII码值存在AL中 
	
	SUB  AL,30H
	;求和并调整指令序列

	XOR AH,AH
	ADD AL,BL
	AAA
	

	PUSH  AX
	;显示提示信息INFOR3的指令序列
	
	MOV DX, OFFSET INFOR3
	MOV  AH,09H
	INT 21H
	
	POP  AX
	;显示十位及个位上数字的指令序列
	PUSH AX
	MOV DL,AH
	ADD DL, 30H
	MOV AH,02H
	INT 21H
	POP AX
	MOV DL,AL
	ADD DL,30H
	MOV AH,02H
	INT 21H

	PUSH AX
	MOV AH,4CH
	INT 21H
CODE ENDS
	END START

2、从“2.2.4实验习题”中任选一道题目,画出流程图,编写源程序,并说明在调试过程中遇到了哪些问题, 是如何处理的。
2、1、设abcd为四个压缩型BCD数,它们被存放在内存abcd开始的4个存储单元中,计算a+b+c+d,并将结果在屏幕上显示出来。程序编写完成并运行正确后,打开源程序,改变a,b,c,d的内容,然后重新进行汇编、 连接并运行程序,检查程序运行结果与手工计算结果是否相符。下面给出几组实验用数据:
(l) a=11,b=23,c=25,d=31;090
(2)a=10,b=20,c=30,d=40;100
(3)a=45.b=45.c=45.c=45;180
(4) a=88.b=99.c=77.d=66;330
(注意压缩型BCD数的表示方法:十进制数38表示成压缩型BCD数时应写成38H)

思路

结果是3位存储到AX中0XYZ

ADD AL,NN 有进位
就给AH加1 

显示数字
X是百位数字
Y是十位数字
Z是个位数字
从AH中取出X
从AL中取出Y和Z
AL右移4位即为Y
AL与0FH即为Z

1.asm

DATA SEGMENT
	;ABCD DB 31H,25H,23H,11H;090
	;ABCD DB 40H,30H,20H,10H;100
	;ABCD DB 45H,45H,45H,45H;180
	ABCD DB 66H,77H,99H,88H;330
	INFOR DB	"The Resultis:$"
	
DATA ENDS
CODE SEGMENT
	
     ASSUME CS:CODE,DS:DATA
START:

      MOV AX,DATA
      MOV DS,AX

      MOV AH,0;用来存储百位数字
      MOV CX,4
      MOV BX,0
      MOV AL,0


A:    ADD AL,[BX];用来存储十位个位数字
      DAA
      INC BX
      JC S
      LOOP A;把CX-1,如果CX!=0,跳转到A


      JNC B     ;USE S TO JMP->B
S:    
      INC AH
      OR AH,AH  ;不改变AH,只清空CF=0
      LOOP A

B:    
       PUSH  AX
       ;显示提示信息INFOR的指令序列   
       MOV DX, OFFSET INFOR
       MOV  AH,09H
       INT 21H
      POP  AX


      PUSH AX
      ADD AH,30H
      MOV DL,AH;显示百位数字
      MOV AH,2
      INT 21H

      POP AX
      PUSH AX
      MOV CL,4
      SAR AL,CL
   
      AND AL,0FH
      ADD AL,30H
      MOV DL,AL;显示十位数字
      MOV AH,2
      INT 21H

      POP AX

      AND AL,0FH
      ADD AL,30H
      MOV DL,AL;显示个位数字
      MOV AH,2
      INT 21H
      

     MOV AH,4CH
     INT 21H

CODE ENDS
     END START


结果


2、2、从键盘输入两个一位十进制数,计算这两个数之积,并将结果在屏幕上显示出来。
只需对0.asm修改两行代码

	;求和并调整指令序列
	;ADD AL,BL
	;AAA
	求积并调整指令序列
	MUL BL
	AAM

2.asm

DATA SEGMENT
	INFOR1 DB	"Please Input the First Data(<10):$"
	INFOR2 DB	0AH,0DH,"Please Input the Second Data(<10):$"
	INFOR3 DB	0AH,0DH,"The Resultis:$"
	;0DH和0AH分别为非显示字符回车和换行的ASCI码值,  
	;美圆符号“S”为字符串结束标志,不能省略。
DATA ENDS
CODE SEGMENT
	ASSUME CS: CODE, DS:DATA
START:  
	MOV  AX,DATA
	MOV  DS,AX
	;显示提示信息INFOR1并从键盘接收一个字符的指令序列  
	
	MOV DX,OFFSET INFOR1;INFOR1为在数据段中定义的要显示的字符小
	MOV  AH,09H
	INT 21H

	MOV  AH,01H
	INT  21H  
	;此时程序等待用户键入,键入字符的ASCII码值存在AL中                                                                                                                                                                        


	SUB  AL, 30H;减去30H后得到键入数字所代表的数值
	MOV  BL,AL
	;显示提示信息INFOR2并从键盘接收一个字符的指令序列  

	MOV DX, OFFSET INFOR2
	MOV  AH,09H
	INT 21H
	
	MOV  AH,01H
	INT  21H  ;此时程序等待用户键入,键入字符的ASCII码值存在AL中 
	
	SUB  AL,30H
	;求积并调整指令序列

	XOR AH,AH
	;ADD AL,BL
	;AAA
	MUL BL
	AAM
	

	PUSH  AX
	;显示提示信息INFOR3的指令序列
	
	MOV DX, OFFSET INFOR3;
	MOV  AH,09H
	INT 21H
	
	POP  AX
	;显示十位及个位上数字的指令序列
	PUSH AX
	MOV DL,AH
	ADD DL, 30H
	MOV AH,02H
	INT 21H
	POP AX
	MOV DL,AL
	ADD DL,30H
	MOV AH,02H
	INT 21H

	PUSH AX
	MOV AH,4CH
	INT 21H
CODE ENDS
	END START

结果

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

思路

把结果放入两个表中
RES1,放高2位,即0X
RES2,放低2位,即YZ
查表得出的结构0XYZ存储到AX中
显示代码和1.asm代码一样

3.asm

DATA SEGMENT
	RES1 DB    0H,0H,0H,  0H,  0H,  1H,  2H,  2H,  5H,  7H   ;存储结果的百位数字
	RES2 DB    0H,1H,8H,27H,64H,25H,16H,43H,12H,29H   ;存储结果的十位个位数字
	INFOR1 DB "Please Input the Data(<10):$"
	INFOR2 DB	0AH,0DH,"The Resultis:$"
	
DATA ENDS
CODE SEGMENT
	ASSUME CS: CODE, DS:DATA
START:  
	MOV  AX,DATA
	MOV  DS,AX
	;显示提示信息INFOR1并从键盘接收一个字符的指令序列  
	
	MOV DX,OFFSET INFOR1;INFOR1为在数据段中定义的要显示的字符小
	MOV  AH,09H
	INT 21H

	MOV  AH,01H
	INT  21H  
	;此时程序等待用户键入,键入字符的ASCII码值存在AL中                                                                                                                                                                        


	SUB  AL, 30H;减去30H后得到键入数字所代表的数值
	MOV DL,AL
	LEA BX,RES1
	XLAT RES1
	MOV AH,AL		;AX百位数字

	MOV AL,DL
	LEA BX,RES2
	XLAT RES2		;AL十位个位数字
          
	PUSH  AX

	;显示提示信息INFOR2的指令序列
	
	MOV DX, OFFSET INFOR2
	MOV  AH,09H
	INT 21H
	
	POP  AX

	PUSH AX
      	ADD AH,30H
      	MOV DL,AH;显示百位数字
      	MOV AH,2
      	INT 21H

      	POP AX
      	PUSH AX
      	MOV CL,4
      	SAR AL,CL
   
      	AND AL,0FH
      	ADD AL,30H
      	MOV DL,AL;显示十位数字
     	MOV AH,2
      	INT 21H

      	POP AX

      	AND AL,0FH
      	ADD AL,30H
     	MOV DL,AL;显示个位数字
      	MOV AH,2
      	INT 21H

	PUSH AX
	MOV AH,4CH
	INT 21H
CODE ENDS
	END START

结果

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

头脑风暴答案

拯救地球精英答案【逻辑题】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913238.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号