微机原理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理实验报告
实验一两个多位十进制数相加的实验
一、实验目的
学习数据传送和算术运算指令的用法
熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容
将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、程序框图
图3-1
四、参考程序清单
程序名:XIANGJ.ASM
DATA SEGMENT
DATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END EQU $-1
DATA2 DB 34H,35H,30H,38H,32H;加数DATA2END EQU $-1
SUM DB 5 DUP(?)
DATA ENDS
STACK SEGMENT
STA DB 20 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA
MOV AX,4C00H
INT 21H
ADDA PROC N EAR
MOV DX,SI
MOV BP,DI
MOV BX,05H
AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H
DEC SI
DEC DI
DEC BX
JNZ AD1
MOV SI,DX
MOV DI,BP
MOV CX,05H
CLC
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL
AAA
MOV [SI],AL
DEC SI DEC DI
LOOP A D2
MOV SI,DX
MOV DI,BP
MOV BX,05H
AD3: ADD BYTE PTR [SI],30H
ADD BYTE PTR [DI],30H DEC SI
DEC DI
DEC BX
JNZ AD3
RET
ADDA ENDP
CODE ENDS
END START
五:结果分析
这次试验依次将相加数和被相加数存入AL,BL,依次从低位向高位相加,然后把结果放在内存中,根据程序走向,相加的结果依次放在内存地址DS:0000到DS:0004的位置上,和我们实验预期结果一样。这里显示的都是这些数字的ASII码,减去30就是原来的数对比一下结果,没有错,这个实验程序运行正常
六:实验总结
本次实验的程序还算是比较简单的,就是定义了两个数字,分别把这两数分位存入内存中然后再分位相加,由于是第一次做实验,所以刚开始还不怎么明白这个程序的意思也不知道该怎么去运用这个东西,后来去了实验室在老师的指导下,开始熟悉这个实验的运作过程,然后又查看源程序,慢慢观察,以便可以看到程序的原理。
实验二排序实验
一、实验目的
掌握用汇编语言编写排序程序的思路和方法。
二、实验内容
将指定内存出开始的数据(最多为4位数)按从大到小的顺序排列。第一个数字表示数据的个数(不是要比较的数值)。
三、程序流程图
图3-2 四、程序清单
程序名:PAIX.ASM
DATA SEGMENT
ADDR DW 8,234,35,67,876,54,39,765,237 DATA ENDS
STACK SEGMENT
STA DW 32 DUP(?)
TOP DW ?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV SP,TOP
MOV CX,WORD PTR ADDR[0] DEC CX
LOOP1: MOV DI,CX
MOV BX,2
LOOP2: MOV AX,WORD PTR ADDR[BX] CMP AX,WORD PTR ADDR[BX+2]
JGE CCC
XCHG AX,WORD PTR ADDR[BX+2]
MOV WORD PTR ADDR[BX],AX CCC: ADD BX,2
LOOP LOOP2
MOV CX,DI
LOOP LOOP1
EXIT: MOV AX,4C00H
INT 21H
CODE ENDS
END START
五:实验结果分析
这次试验是给我们8个数字,然后让我们比较后按照从大到小的顺序排列出来,定义的数字中8是一个指示数字个数的量,不参与比较,但是要占据一个字节,所以在DS:0000的位置上放了一个0008,从ds:0002开始才是参与比较的数字。将这些数字转化成10进制,就是我们定义的那些数据
六:实验总结
这次试验是将给的八个数字进行排序,本来之前一致认为DB的第一个数字08是参与比较的数字之一,其实不然,也可以将它定义为一个数字,来看那些需要比较数字的总数。在实验中,更深刻地理解了所学的知识。
实验三自编程序上机调试
一、实验目的
掌握用汇编语言编写排序程序的思路和方法。
二、实验内容
选作业题中题目上机调试。
题目:试编程求解表达式S=(23000-(X*Y+Z))/Z,其中X=600,Y=25,Z=-2000
编程如下:
DATA SEGMENT
X DW 600
Y DW 25
Z DW -2000
S DW ?
DATA ENDS
CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA
MOV DS,AX
MOV AX,X
MOV BX,Y
MUI BX MOV BX,59D8H ADD AX,Z SUB BX,AX MOV AX,BX MOV BX,Z
IDIV BX
MOV S,AX
MOV AH,4CH INT 21H CODE ENDS END START
运行结果:
-g 0022
AX=FFFB BX=F830 CX=0036 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1153 ES=1143 SS=1153 CS=1154 IP=0022 NV UP DI PL NZ NA PO NC