北邮微机原理软件实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理软件实验报告
实验二分支、循环程序设计
一.实验目的
1.开始独立进行汇编语言程序设计。
2.掌握基本分支,循环程序设计。
3.掌握最简单的DOS 功能调用。
二.实验内容
1.安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过9。
2.编写一个程序统计数据区中正数,负数和零的个数。
3.将统计结果在屏幕上显示。
三.流程图
四.源代码
DATA SEGMENT
Z DW 0 ;数据中0的个数
A DW 0 ;数据中大于0的个数
B DW 0 ;数据中小于0的个数
NUM DW 9,8,0,-7,6,-5,-4,3,2,-1,0,-8,-1,9,0,0,1 ;设定的一组数据,其中4个0,7个正数,6个负数,符合题目要求
N DW ($-NUM)/2 ;该组数据的个数
TYPE0 DB 0DH, 0AH, 'Number of zeros : $'
TYPE1 DB 0DH, 0AH, 'Number of greater than 0 : $'
TYPE2 DB 0DH, 0AH, 'Number of less than 0 : $'
LOCATE DW TYPE0, TYPE1, TYPE2
DATA ENDS
STACK SEGMENT STACK
DW 128 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA, SS:STACK, CS:CODE
START: MOV AX, DATA
MOV DS, AX
MOV AX, STACK
MOV SS, AX ;初始化DS、SS指向STA
MOV BX, OFFSET NUM ;将NUM中第一个数字的地址送入BX
MOV CX, N ;将N中数字个数送入CX
LOOP1: MOV AX, [BX] ;取出NUM中的第一个数字
CMP AX, 0 ;与零相比
JZ IFZ ;判断结果为是0,跳转到IFZ处继续执行
SAL AX, 1
JC IFL ;判断结果是小于0,跳转到IFL
INC WORD PTR A ;否则,A自加,然后继续执行程序
JMP C ONTINUE
IFL: INC WORD PTR B ;B计数加1
JMP C ONTINUE
IFZ: INC Z ;Z计数加1
CONTINUE:
ADD BX, 2 ;指针+2,继续送入下一数字
LOOP LOOP1 ;循环CX次判断
MOV CX, 3 ;共显示3个字符串
XOR BX, BX
DISP:
MOV DX, LOCATE[BX]
MOV AH, 09H ;DOS 09号功能调用,显示字符串
INT 21H
MOV DX, Z[BX]
ADD DX, '0' ;转换为ASCII码
MOV AH, 02H ;DOS 02号功能调用,显示字符
INT 21H
ADD BX, 2 ;指针+2(DW)
LOOP DISP
MOV AX, 4C00H
INT 21H ;返回DOS系统
CODE ENDS
END START
五.运行结果
六.预习题
1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来?
答:0—9的ASCII码值依次为:30H,31H,32H,33H,34H,35H,36H,37H,38H,39H。用待显示数加30H即可得到对应ASCII码,将待显示数的ASCII码值赋给DX,使用“INT 21H”02号DOS功能调用显示字符。
2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?
答:方法1:用test指令检查该数最高位。若为0,则为正数。否则,检测其余
位判断为负数或0。
方法2:用cmp指令将该数与0相比,判断标志寄存器。SF⊕OF=0,为正数或0。否则为负数。
实验三代码转换程序设计
一.实验目的
1.掌握几种最基本的代码转换方法。
2.运用子程序进行程序设计。
二.实验内容
1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来。
2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明。
3.对输入要有检错措施,以防止非法字符输入,并有适当的提示。
4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图。三.模块层次图及流程图
.
四.源代码
DATA SEGMENT
A D
B 100 DUP (0)
B DB 100,0,'$'
STRING DB 0DH,0AH,'ERROR INPUT ',0DH,0AH, '$'
STRING1 DB 0DH,0AH,'the min number is ',0DH,0AH, '$'
DATA ENDS
STACK SEGMENT STACK
DW 50 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
INPUT PROC ;子程序
PUSH AX ;保护寄存器内容
PUSH BX ;保护寄存器内容
PUSH CX ;保护寄存器内容
PUSH DX ;保护寄存器内容
STAR: MOV CX,0 ;开始,表示输入的数是否可以构成两位十进制数
MOV BX,OFFSET A
AGAIN: MOV AH,01H ;输入
INT 21H