第二次试验报告最终版.doc
《第二次试验报告最终版.doc》由会员分享,可在线阅读,更多相关《第二次试验报告最终版.doc(8页珍藏版)》请在冰豆网上搜索。
![第二次试验报告最终版.doc](https://file1.bdocx.com/fileroot1/2022-11/3/1d219b3a-6548-44f5-8a90-840f9e5daad1/1d219b3a-6548-44f5-8a90-840f9e5daad11.gif)
微机原理及应用实验
课程名称___微机原理及应用实验___
学生学院信息工程学院
专业班级
学号
学生姓名
指导老师乐金松
2016年05月11日
实验二数据处理程序
(一)
实验目的:
1、进一步学习、掌握汇编程序调试方法
2、弄清子程序调用和返回过程
3、通过实验调试乘法、除法程序,弄清多字节乘除法程序的基本算法和
程序设计方法
实验内容:
1、源程序的编辑
2、源程序的剪辑、编译、链接
3、汇编程序调试,完成相关数据的记录和分析
实验步骤:
一、程序剪辑和编辑
1、下面是一段主程序模板,请将L8086软件包中的乘法和除法程序的主体部分拷贝粘贴在指定的位置,以MAIN.ASM文件名保存
;-------------------------------------------------------------------------
STACKSEGMENTSTACK'STACK'
DB1024DUP(0)
STACKENDS
;----------------------------------------------------------------------------
;definedatasegment
DATASEGMENT
;-------------------------------------------;地址分配
R0DW(?
) ;0000H
R1DW(?
) ;0002H
R2DW(?
) ;0004H
R3DW(?
) ;0006H
R4DW(?
) ;0008H
R5DW(?
) ;000AH
R6DW(?
) ;000CH
R7DW(?
) ;000EH
;----------------------------------------------------------------------------------
X DD 12345678H ;0010H~003H
Y DD 87654321H ;0014H~0017H
Z DD 55555555H ;0018H~001BH
;------------------------------------------------------------------------------------
buffer0DB(?
) ;001CH
buffer1DB(?
)
buffer2DB(?
)
buffer3DB(?
)
buffer4DB(?
)
buffer5DB(?
)
buffer6DB(?
)
buffer7DB(?
)
;----------------------------------------------------
DATAENDS
;---------------------------------------------------------
;definecodesegment
PROGRAMSEGMENT
ASSUMECS:
PROGRAM,DS:
DATA,SS:
STACK
;*******************************************************
MAINPROCFAR
START:
PUSHDS;returnDOSstandardprogram
MOVAX,0
PUSHAX
MOVAX,DATA;setDS
MOVDS,AX
;--------------主循环程序-------------------------------------------
DO_WAIT:
CALL BMUL
CALL BDIV
; CALL KEY_SCAN
; CALL BCTD
; CALL DELAY
JMP DO_WAIT
RET
MAINENDP
;----------------以下为过程子程序------------------------------------
;===============R2R3*R6R7=R4R5R6R7==================
BMUL PROCNEAR
;……
BMUL ENDP
;------------R4R5R6R7/R2R3=R6R7--------------------
BDIV PROCNEAR
;……
BDIV ENDP
;---------------二翻十程序--------------------------------
BCTD PROCNEAR
RET
BCTD ENDP
;-----------------软件延时----------------------------------
DELAY PROCNEAR
RET
DELAY ENDP
;-------------------键盘扫描--------------------------------
KEY_SCAN PROCNEAR
RET
KEY_SCAN ENDP
;------------------------------------------------------------
PROGRAMENDS
ENDSTART
;---------------------------------------------------------------------------------------
2、将程序编译连接成可执行文件。
二、程序载入
1、用DEBUG命令将程序载入到内存
2、用反汇编U命令观察和记录以下信息:
主程序起始地址:
[07AD:
0000]
主程序结尾地址:
[07AD:
001D]
乘法程序起始地址:
[07AD:
0013]
乘法程序结尾地址:
[07AD:
0066]
除法程序起始地址:
[07AD:
0067]
除法程序结尾地址:
[07AD:
00CA]
代码段段地址:
CS=07AD
用户数据段段地址:
DATA=07AA
当前系统数据地段段地址:
DS=075A
乘法子程序入口地址:
BMUL=0013
除法子程序入口地址:
BDIV=0067
3、用R命令观察记录一下信息
DS=075A
ES=075A
SS=076A
SP=0400
4、执行程序G0A回车,用D0命令观察并记录以下信息
R0分得的单元地址:
07AA:
0000~07AA:
0001
R7分得的单元地址:
07AA:
000E~07AA:
000F
X分得的地址:
07AA:
0010~07AA:
0013
X双字数据存放的顺序:
单元号地址:
0010内容:
0X78
单元号地址:
0011内容:
0X56
单元号地址:
0012内容:
0X34
单元号地址:
0013内容:
0X12
Y分得的地址:
07AA:
0014~07AA:
0017
Y双字数据存放的顺序:
单元号地址:
0014内容:
0X21
单元号地址:
0015内容:
0X43
单元号地址:
0016内容:
0X65
单元号地址:
0017内容:
0X87
三、程序的调试
1、调试乘法程序:
1)程序执行到乘法子程序入口
2)在入口参数输入:
R2R3=10000006400
R6R7=10000006400
3)执行程序到乘法程序RETF指令处,查看结果
R4R5R6R7=0000000000001027
4)自行输入一组数据,复位IP=0,验证结果
R2R3=10(00000a00)
R6R7=10(00000a00)
执行程序后:
R4R5R6R7=0000000000006400
2、调试除法程序:
1)复位IP=0,将程序执行到除法子程序入口
2)在入口信息输入数据:
R4R5R6R7=10000
R2R3=100
3)程序执行到除法程序的RETF指令,用D0命令查看结
R6R7=00006400
4)自选一组数据,自行验证除法程序
R4R5R6R7=0000000000001E00
R2R3=00000600
执行程序后结果R6R7=00000500
四、编程,R0R1=X*Y/Z
1)自行编写一段程序,调用乘法和除法程序,计算上式
DO_WAIT:
MOV AX,X
MOV R3,AX
MOV AX,X+2
MOV R2,AX
MOV AX,Y
MOV R7,AX
MOV AX,Y+2
MOV R6,AX
CALL BMUL;第一断点
MOV AX,Z