当前位置:范文大全 > 调查报告 > 微机原理实验报告【微机原理第二次实验报告】

微机原理实验报告【微机原理第二次实验报告】

时间:2021-10-15 13:35:29 浏览次数:

  微机原理第二次实验报告

 实验二:加法及判断程序调试实验实验报告

 健行理工1402班 陈丽红 201424450202

 一、实验目的

 1. 掌握编写汇编语言源程序的基本方法和基本框架。

 2. 学会编写顺序结构、分支结构和循环结构的汇编程序,掌握宏定义与宏调用的方法。

 3.掌握程序中数据的产生与输入输出的方法。

 二、实验内容

 1. 用汇编语言编写一个加法程序: 1325十9839,用ASCII码的形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加结果显示输出。

 2. 设有一组数据: 5,-4,0,3,100,-51,编程判断:每个数是>0、=0、还是<0 ?并输出其判断结果。

 即:

 1当x?0? ?0?0当xy0?当x?1?三、程序说明

 3.1实验内容一:

 (1) 两个数据先以相反的顺序以ASCII码的形式存放在数据段的DATA1和DATA2中,相加时从DATA1和DATA2的起始字节开始相加,也就是从数的个位数开始相加。相加后的结果存放在DATA2开始的存储单元中,同时用DL保存进位位。

 (2)对于本题来说,题目为两个四位数相加,所以定义循环数为4。

 (3) 程序中的加法运算是ASCII码运算,后面应加一条ASCII码加法调整指令AAA,经AAA调整的加法指令,将ASCII码的数据高4位清“0”,因此要将结果每位数高4位拼成3,变成ASCII码存到DATA2中。

 (4)一位运算结束后将用于保存进位位的DL复原,进入循环,进行下一位求和计算。

 (5)由于计算是从个位数相加开始,所以存入DATA2中的数据应该以相反的顺序输出,故再进行一轮循环输出,得到最终的计算结果。

 3.2实验内容二:

 (1)首先将原始数据(5,-4,0,3,100,-51)装入起始地址为VAR的字节存储单元中。

 (2)将判断结果以字符串的形式分别存放在数据区中,以便在显示输出时调用。

 (3)判断部分采用CMP指令。从数据区中取出一个数送给AL,之后与0进行比较,得到分支结构,分别输出“Y=0”、“Y=+1”和“Y=-1”。

 (4)程序中存在一个循环结构,对于本题,循环次数为6,调用6次分支结构 后结束。.

  四、程序总框图 4.1实验内容一程序框图 开始

  将DATA1 的偏移地址 SI 将DATA2 的偏移地址 DI 定义循环次数CX=4 取DATA1一位数 BL进行加法运算,并调整将每一位运算结果拼ASCI码 保存到DATA2 中 N(CX)-1=0?Y 重新定义循环次数CX为5 通过DI减1,将保存的结果以相反的顺序输出 N(CX)-1=0?Y 结束

 4.2实验内容二程序框图

  五、源程序清单与执行结果 5.1实验内容一: 5.1.1程序源代码 码的DATA为段名,将两个数据用相反顺序以ASCIIDATA SEGMENT ;定义数据段, 中形式存放在DATA1,DATA2DATA1 DB '5231'

 DATA2 DB '9389'

 DATA ENDS

  CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA

 START:MOV AX,DATA

  MOV DS,AX

 SI 的偏移地址给;将 DATA1 LEA SI,DATA1

 DI DATA2的偏移地址给 LEA DI,DATA2 ;将4 CX;定义循环数为 MOV CX,4

 AH,DL;初始化 MOV AH,00H

  MOV DL,00H

 NEXT: MOV BL,[SI]

  MOV AL,[DI]

  ADD AL,DL ; 将进位位与AL中的数相加后存储到 AL

  ADD AL,BL ;将AL,BL相加

  AAA ;AAA 调整

  ADD AL,30H ;将结果每位数高4位拼成3,变成ASCII 码

  MOV [DI],AL ;将ASCII 码存在DATA2

  MOV DL,AH ;DL用于存储进位位

  INC SI ;将SI, DI加1

  INC DI

  MOV AH,00H ;将进位位复原置0

 ;循环,进行下一位的计算求和 LOOP NEXT

 ;该部分代码用于保存最后一个进位位 MOV AH,DL

  ADD AH,30H

  MOV [DI],AH

  MOV CX,5

 ;之前的代码输出结果顺序为相反的,通过再一次的循环输出得到计AH,02H NEXT1:MOV

  结果 MOV BL,[DI]

  MOV DL,BL

  INT 21H

 ;减DI DEC DI 1

  LOOP NEXT1

  MOV AH,4CH

  INT 21H

 CODE ENDS

  END START

  实验结果截图5.1.2.

  实验内容二:5.2 程序源代码5.2.1;定义数据段DATA SEGMENT

 VAR DB 5,-4,0,3,100,-51

 ;以字符串形式存储D1 DB 'Y=+1',0DH,0AH,'$'

 D2 DB 'Y=0',0DH,0AH,'$'

 D3 DB 'Y=-1',0DH,0AH,'$'

 DATA ENDS

 ;定义代码段CODE SEGMENT

  ASSUME CS:CODE,DS:CODE

 START:MOV AX,DATA

  DS段赋值 MOV DS,AX ;给0 AX置 MOV AX,00H ;初始化6 为 MOV CX,6 ;定义循环数CXDI 的开始地址给 LEA DI,VAR ;将VARNEXT1:MOV AL,[DI]

  进行比较0 CMP AL,0 ;将DI指向的数与NEXT2 时跳转至 JGE NEXT2 ;当AL>=0DX;将D3的偏移值送给 MOV DX,OFFSET D3

  JMP OPT

 NEXT3 AL=0时跳转至;NEXT2:JE NEXT3

 DX 的偏移值送给 MOV DX,OFFSET D1 ;将D1 JMP OPT

 DX

 的偏移值送给D2;将NEXT3:MOV DX,OFFSET D2

  JMP OPT

  OPT:MOV AH,09H ;输出判断结果

  INT 21H

  INC DI ;DI加1,跳转至判断下一个数值

  LOOP NEXT1

  MOV AH,4CH

  INT 21H

 CODE ENDS

  END START

 5.2.2实验结果截图