预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共20页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

2011211120微机原理软件实验报告 PAGE\*MERGEFORMAT20 2013-2014年第1学期 微机原理软件实验 实验报告 实验名称:8086微机原理软件实验 学院:信息与通信工程学院 专业:通信工程 班级:20112111 班内序号: 学号:201121 姓名: 北京邮电大学 时间:2013年11月27日实验二分支,循环程序设计 一.实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS功能调用. 二.实验内容: 1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9. 2.编写一个程序统计数据区中正数,负数和零的个数. 3.将统计结果在屏幕上显示. 三.预习题: 1.十进制数0--9所对应的ASCII码是什么?如何将十进制数0--9在屏幕上显示出来? 答:0~9分别对应ASCII码的30H~39H。将十进制数0--9在屏幕上显示出来可以使用操作系统提供的输入输出功能(即相关DOS功能调用)。 显示单个字符的DOS功能调用包含以下四个步骤: eq\o\ac(○,1)在AH寄存器中设置系统功能调用号02H; eq\o\ac(○,2)在指定寄存器中设置入口参数,入口参数:DL=待显示字符的ASCII码; eq\o\ac(○,3)执行指令INT21H; eq\o\ac(○,4)根据出口参数分析功能调用执行情况。 显示字符串的DOS功能调用包含以下四个步骤: eq\o\ac(○,1)在AH寄存器中设置系统功能调用号09H; eq\o\ac(○,2)在指定寄存器中设置入口参数,入口参数:DS:Dx指向字符串在内存中的首地址,要求字符串以$(24H)结束。 eq\o\ac(○,3)执行指令INT21H; eq\o\ac(○,4)根据出口参数分析功能调用执行情况。 2.如何检验一个数为正,为负或为零?你能举出多少种不同的方法? 答:利用CMP指令,比较该数与0的大小,然后根据比较后所设置的标志进行转移。CMP指令的特点是完成两个操作数的相减,但不回送相减的结果,只是使结果影响标志AF、CF、OF、PF、SF、ZF。 四.程序流程图: 五.源代码: DATA SEGMENT;定义数据段 NUMDB-2,3,4,0,1,5,-22,-25,0,0,4 ;存储的数据 countEQU$-NUM ;数据个数 CountZ DB0 ;0的个数 CountP DB0 ;正数的个数 CountM DB0 ;负数的个数 stringZDB0DH,0AH,'ZERO:','$';屏幕上显示”ZERO:” stringPDB0DH,0AH,'POSITIVE:','$';屏幕上显示”POSITIVE:” stringMDB0DH,0AH,'MINUS:','$';屏幕上显示”MINUS:” DATA ENDS STACK SEGMENTSTACK'STACK';定义堆栈段 DB50DUP(?);预留50个字节空间 STACKENDS CODE SEGMENT;定义代码段 ASSUMECS:CODE,DS:DATA,SS:STACK;段寻址 START PROCfar PUSHDS XORAX,AX PUSHAX;程序开始时,DS:0指向的是一条返回DOS的 MOVAX,DATA;指令:INT20H MOVDS,AX;初始化DS段 MOVCX,count;赋值计数变量 MOVBX,OFFSETNUM LOOPC: MOVAL,[BX] ;从内存代码段中取出数据与0比较 CMPAL,0 JGEBIGPR ;操作数不小于0,跳转到BIGPR JNGESMALL ;操作数小于0,跳转到SMALL BIGPR: JEEQUAL ;操作数是0,则跳转到EQUAL MOVDL,CountP ;操作数大于0:CountP自增 INCDL MOVCountP,DL INCBX LOOPLOOPC JMPEXIT EQUAL: MOVDL,CountZ ;操作数等于0:CountZ自增 INCDL MOVCountZ,DL INCBX LOOPLOOPC JMPEXIT SMALL: MOVDL,CountM ;操作数小于0:CountM自增 INCDL MOVCountM,DL INCBX LOOPLOOPC EXIT: MOVAH,09H MOVDX,SEGstringP MOVDS,DX MOVDX,OFFSETstringP INT21H MOVAL,CountP ;显示正数的个数 ADDAL,