文档库 最新最全的文档下载
当前位置:文档库 › 第二次试验报告最终版

第二次试验报告最终版

第二次试验报告最终版
第二次试验报告最终版

微机原理及应用实验

课程名称___微机原理及应用实验___ 学生学院信息工程学院

专业班级

学号

学生姓名

指导老师乐金松

2016年05 月11 日

实验二数据处理程序(一)

实验目的:

1、进一步学习、掌握汇编程序调试方法

2、弄清子程序调用和返回过程

3、通过实验调试乘法、除法程序,弄清多字节乘除法程序的基本算法和

程序设计方法

实验内容:

1、源程序的编辑

2、源程序的剪辑、编译、链接

3、汇编程序调试,完成相关数据的记录和分析

实验步骤:

一、程序剪辑和编辑

1、下面是一段主程序模板,请将L8086软件包中的乘法和除法程序的

主体部分拷贝粘贴在指定的位置,以MAIN.ASM文件名保存;-------------------------------------------------------------------------

STACK SEGMENT STACK 'STACK'

DB 1024 DUP (0)

STACK ENDS

;----------------------------------------------------------------------------

;define data segment

DATA SEGMENT

;------------------------------------------- ;地址分配

R0 DW (?) ;0000H

R1 DW (?) ;0002H

R2 DW (?) ;0004H

R3 DW (?) ;0006H

R4 DW (?) ;0008H

R5 DW (?) ;000AH

R6 DW (?) ;000CH

R7 DW (?) ;000EH

;----------------------------------------------------------------------------------

X DD 12345678H ;0010H~003H

Y DD 87654321H ;0014H~0017H

Z DD 55555555H ;0018H~001BH

;------------------------------------------------------------------------------------

buffer0 DB (?) ;001CH

buffer1 DB (?)

buffer2 DB (?)

buffer3 DB (?)

buffer4 DB (?)

buffer5 DB (?)

buffer6 DB (?)

buffer7 DB (?)

;----------------------------------------------------

DATA ENDS

;---------------------------------------------------------

;define code segment

PROGRAM SEGMENT

ASSUME CS:PROGRAM, DS:DATA, SS:STACK

;******************************************************* MAIN PROC FAR

START: PUSH DS ;return DOS standard program MOV AX,0

PUSH AX

MOV AX,DATA ;set DS

MOV DS,AX

;--------------主循环程序-------------------------------------------

DO_WAIT:

CALL BMUL

CALL BDIV

; CALL KEY_SCAN

; CALL BCTD

; CALL DELAY

JMP DO_WAIT

RET

MAIN ENDP

;----------------以下为过程子程序------------------------------------

;===============R2R3*R6R7=R4R5R6R7================== BMUL PROC NEAR

;……

BMUL ENDP

;------------R4R5R6R7/R2R3=R6R7--------------------

BDIV PROC NEAR

;……

BDIV ENDP

;---------------二翻十程序--------------------------------

BCTD PROC NEAR

RET

BCTD ENDP

;-----------------软件延时----------------------------------

DELAY PROC NEAR

RET

DELAY ENDP

;-------------------键盘扫描--------------------------------

KEY_SCAN P ROC NEAR

RET

KEY_SCAN E NDP

;------------------------------------------------------------

PROGRAM ENDS

END START

;---------------------------------------------------------------------------------------

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=100 0000 6400

R6R7=100 0000 6400

3)执行程序到乘法程序RETF指令处,查看结果

R4R5R6R7=0000 0000 0000 1027

4)自行输入一组数据,复位IP=0,验证结果

R2R3=10 (0000 0a00)

R6R7=10 (0000 0a00)

执行程序后:R4R5R6R7=0000 0000 0000 6400

2、调试除法程序:

1)复位IP=0,将程序执行到除法子程序入口

2)在入口信息输入数据:R4R5R6R7=10000

R2R3=100

3)程序执行到除法程序的RETF指令,用D0命令查看结

R6R7=0000 6400

4)自选一组数据,自行验证除法程序

R4R5R6R7=0000 0000 0000 1E00

R2R3=0000 0600

执行程序后结果R6R7=0000 0500

四、编程,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 ;第二断点

MOV R3,AX

MOV AX,Z+2

MOV R2,AX

CALL BDIV ;第三断点

MOV AX,R7

MOV R1,AX

MOV AX,R6

MOV R0,AX

JMP DO_WAIT ;第四断点

1、执行程序,验证结果

程序执行到第一断点:R2R3=34127856(即是0x12345678)

R6R7=65872143(即是0x87654321)

程序执行到第二断点:R4R5R6R7=A00905CDB870788D

(即是0x09A0CD0570B88D78)

中间结果正确吗?

答:运行的中间结果正确,0x12345678*0x87654321=0x09a0cd0570b88d78程序执行到第四断点:R6R7=1CE2 6710

程序执行到第三断点:R2R3= 55555555(即是0x55555555)

R4R5R6R7= A00905CDB870788D

(即是0x09A0CD0570B88D78)

程序执行到第四断点:R6R7=E21C1067(即是0x1CE26710)

中间结果正确吗?

答:运行结果正确0x09A0CD0570B88D78/0x55555555=0x1CE26710

2、自行修改数据段定义的X,Y ,Z 的值,执行程序验证结果

X= 1111h

Y=2222h

Z=3333h

R0R1=0000600B(即是0x0B60),运行结果正确

相关文档