北邮微机原理软件实验报告

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

相关文档
最新文档