北邮微原软件实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档