微机原理实验报告
- 格式:docx
- 大小:109.86 KB
- 文档页数:8
汇编语言程序设计实验
一、实验内容
1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、
调试与运行等步骤。
2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的
执行过程。
3.修改该程序,求出10个数中的最大值和最小值。以单步形式观
察,如何求出最大值、最小值。
4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。
要求实现数据显示,并返回DOS状态。
二、实验目的
1.学习并掌握IDE86集成开发环境的使用
2.熟悉汇编语言的基本算法,并实际操作
3.学会利用IDE86进行debug的步骤
三、实验方法
1.求出10个数中的最大值和最小值
(1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比
较,把二者中大的交换放后面。在对第二个和第三个数比较,把
二者中较大的交换放后面,依此类推直到第十个数字。这样第十
位数就是10个数里面最大的。然后选出剩下9个数字里面最大
的,还是从头开始这么做,直到第九个数字。以此类推直到第一
个数字。
(2)流程图
2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。
要求实现数据显示,并返回DOS状态
(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行
100次循环,sum=sum+I,每次循环对i加1.
(2)流程图:
四、
1.求出10个数中的最大值和最小值
DSEG SEGMENT
NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字
DSEG ENDS
CODE SEGMENT
ASSUME DS:DSEG,CS:CODE
START:MOV AX,DSEG
MOV DS,AX
LEA SI,NUM
MOV DX,SI
MOV CL,9 ;大循环计数寄存器初始化
NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX
NEXT2:MOV AL,[SI+1]
CMP [SI],AL ;比较
JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换
MOV [SI+1],AH
MOV [SI],AL
JMP GONE
GONE:add SI,1
DEC BL
JNZ NEXT2
LOOP NEXT1;小循环结束
MOV AX,21H;返回DOS
INT 21H
CODE ENDS
END START
2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。
要求实现数据显示,并返回DOS状态
DSEG SEGMENT
ANS DB 4 DUP(0)
SUM DW 0
JIA DW 1
TEN DW 10
ZERO DW 0
DSEG ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV AX,SUM
BEGIN:ADD AX,JIA ;1到100加和开始
INC JIA
CMP JIA,101
JNZ BEGIN
MOV SUM,AX;结果放sum
MOV DX,0
LEA SI,ANS
ADD SI,4
GO: SUB SI,1 ;16进制变10进制循环开始
DIV TEN ;除以10
MOV BYTE PTR [SI],DL;余数从后往前放在sum
MOV DX,0
CMP AX,ZERO ;商为零结束
JNZ GO
MOV CX,4
LEA SI,ANS
DEC SI
GONE: INC SI;循环显示开始
MOV DL,[SI]
ADD DL,30H;取sum数字加30H变为ASCALL码
MOV AH,2
INT 21H ;显示
LOOP GONE
MOV AH,4CH
INT 21H
CODE ENDS
END START
五、实验结果
1.求出10个数中的最大值和最小值
原来的ds段:
比较之后的ds段:
2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。
要求实现数据显示,并返回DOS状态
运行完16进制转10进制的ds段
最后显示结果:
六、实验中遇到的问题及解决方法
在第四个实验中遇到了不少问题:
首先是16进制转10进制,当把AX赋值为5050,用DIV 10的命令时总会出现错误提示:“divide bv zero”,后来不论如何尝试都不可以,然后思索之后发现5050/10=505>2^16(16位二进制数字最大表
示范围),因此需要用32进制除以16进制的除法运算。最后结果正确。
然后,在把16进制数字除以10的余数放在ans(数据段里面用于存放转换之后的10进制数)里面的时候,发现应该是“05000500”的段总是变成“05000000”,后来在反复单步调试之后发现:MOV [SI],DX 语句会一次性改变4位16进制数,导致错误的发生。改正代码为:MOV BYTE PTR [SI],DL之后成功解决。
七、心得体会
通过本次实验课,我们基本掌握了IDE86集成编译环境的使用方法,包括写代码、编译、连接、调试这四个步骤。更重要的是通过开发环境下面的单步运行,深刻理解了一些算法的过程。同时通过编译课堂上学习的代码,发现自己犯下的错误,并一步步解决问题,从而掌握了汇编语言调试的能力。我认为学习汇编语言就需要不断的犯错,从发生错误到单步运行解决问题,这是一个不可多得的学习过程。同时对于这种过程化的低级语言,我们必须要分模块进行调试,遇到问题先看看先面的环节结果正确吗,这样一步步仔细观察就一定可以发现问题。