北邮微原软件实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013年微机原理软件实验报告
学院:信息与通信工程学院
班级:2011211104
姓名:
实验二分支,循环程序设计
一.实验目的:
1.开始独立进行汇编语言程序设计;
2.掌握基本分支,循环程序设计;
3.掌握最简单的DOS 功能调用
二.实验内容:
1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9.
2.编写一个程序统计数据区中正数,负数和零的个数.
3.将统计结果在屏幕上显示.
三.预习题
1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来?
0-9的ACSII码为,30h,31h,32h,34h,35h,36h,37h,38h,39h, 将要显示的数加上30h,得到该数的ACSII码,再利用DOS功能调用显示单个字符
2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?
利用cmp指令,利用TEST指令,将该数与0相与,将该数与0相减,观察标志位。
四.程序流程图
五.源程序
DATA SEGMENT ;数据段
NUM DB 1,2,-2,3,-3,5,2,4,-6,-11,100,0,0,34,-55,-33,0 ;待处理数据COUNT EQU $-NUM ;数据个数
MINUS DB 0 ;小于零的个数
ZERO DB 0 ;等于零的个数
PLUS DB 0 ;大于零的个数
RESULT DB
'NEGNUM=',?,0AH,0DH,'ZERONUM=',?,0AH,0DH,'POSNUM=',?,0AH,0DH,'$' ;结果显示字符串
DATA ENDS
STACK SEGMENT STACK 'STACK' ;堆栈段
DW 50 DUP(?)
STACK ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV CX,COUNT
MOV SI,OFFSET NUM
AGAIN: MOV AL,[SI] ;循环比较
CMP AL,0
JGE NEXT1
INC MINUS
JMP DONE
NEXT1: JZ NEXT2
INC PLUS
JMP DONE
NEXT2: INC ZERO
DONE: INC SI
LOOP AGAIN ;返回结果
MOV DI,OFFSET RESULT
MOV AL,MINUS
ADD AL,30H
MOV BYTE PTR[DI+7],AL
MOV AL,ZERO
ADD AL,30H
MOV BYTE PTR[DI+18],AL
MOV AL,PLUS
ADD AL,30H
MOV BYTE PTR[DI+28],AL
MOV AH,09H
MOV DX,DI
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
五.程序运行结果
正确输出了正数,负数,零的个数
七.实验心得与体会
这次实验练习了用跳转语句实现分支结构,使我更加熟悉了跳转语句在分支结构中的应用,练习了用DOS功能调用输出字符串。将课堂的理论应用于实践,体会到了汇编语言编程的特点和魅力。
实验三代码转换程序设计
一.实验目的:
1.掌握几种最基本的代码转换方法;
2.运用子程序进行程序设计.
二.实验内容:
1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.
2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明.
3.对输入要有检错措施,以防止非法字符输入,并有适当的提示.
4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.
三.预习题
1如何将输入的两个字符(0 -- 9)变为十进制或二进制数?
将输入的字符减去30H,可得到对应十进制数,将第一个数乘10,加上第二个数,即为最后结果
2如何将选出的最小值(二进制或十进制)变为ASCII 码再进行显示?
说明:输入的字符以空格间隔,以回车结束,且仅允许输入两位十进制数,输入其他字符,或者输入多位,都会报错
将输入的字符串先转化成数串,选出其中的最小值,转化为对应十位和个位,分别加上30H,输出显示
3你觉得采用二进制运算还是十进制运算更适合于这个实验?
十进制
四.程序流程图
五.模块层次图
六.源程序
DATA SEGMENT;数据段
BUFFER DB 100 ;存放带输入的数据
DB 0
DB 100 DUP(0)
NUM DB 100 DUP(0) ;存放将输入的数据转化为对应的数
MIN DB 100 ;存放最小数
RESULT DB 0AH,0DH,'MINNUM=',?,?,0AH,0DH,'$';显示结果
ERRMSG DB 0AH,0DH,'INPUT ERROR',0AH,0DH,'$';显示错误信息DATA ENDS
STACK SEGMENT STACK 'STACK';堆栈段
DW 50 DUP(?)
STACK ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE,DS:DATA,SS:STACK
;将两位十进制字符转化为对应数的子程序
;入口参数:AX,AH存放十位的ACSII码,AL存放个位的ACSII ;出口参数:AL,存放转化后的数值
TRANSFER PROC NEAR
PUSHF
PUSH CX
SUB AH,30H
SUB AL,30H
SHL AH,1
MOV CH,AH