实验二数字处理程序一文档格式.docx
《实验二数字处理程序一文档格式.docx》由会员分享,可在线阅读,更多相关《实验二数字处理程序一文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
![实验二数字处理程序一文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/23/c4f33dd4-b4f3-41e8-82a6-41e8a82a58a4/c4f33dd4-b4f3-41e8-82a6-41e8a82a58a41.gif)
STACK'
DB1024DUP(0)
STACKENDS
----------------------------------------------------------------------------
definedatasegment
DATASEGMENT
-------------------------------------------;
地址分配
R0DW(?
);
0000H
R1DW(?
0002H
R2DW(?
0004H
R3DW(?
0006H
R4DW(?
0008H
R5DW(?
000AH
R6DW(?
000CH
R7DW(?
000EH
----------------------------------------------------------------------------------
XDD12345678H;
0010H~003H
YDD87654321H;
0014H~0017H
ZDD55555555H;
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:
CALLBMUL
CALLBDIV
;
CALLKEY_SCAN
CALLBCTD
CALLDELAY
JMPDO_WAIT
RET
MAINENDP
----------------以下为过程子程序------------------------------------
===============R2R3*R6R7=R4R5R6R7==================
BMULPROCNEAR
;
……
BMULENDP
------------R4R5R6R7/R2R3=R6R7--------------------
BDIVPROCNEAR
BDIVENDP
---------------二翻十程序--------------------------------
BCTDPROCNEAR
RET
BCTDENDP
-----------------软件延时----------------------------------
DELAYPROCNEAR
RET
DELAYENDP
-------------------键盘扫描--------------------------------
KEY_SCANPROCNEAR
RET
KEY_SCANENDP
------------------------------------------------------------
PROGRAMENDS
ENDSTART
---------------------------------------------------------------------------------------2、将程序编译连接成可执行文件。
二、程序载入
1、用DEBUG命令将程序载入到内存
2、用反汇编U命令观察和记录以下信息:
主程序起始地址:
[07AD:
0000]
主程序结尾地址:
[07AD:
0012]
乘法程序起始地址:
0013]
乘法程序结尾地址:
0066]
除法程序起始地址:
[07AD:
0067]
除法程序结尾地址:
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分得的单元地址:
000E~07AA:
000F
X分得的地址:
0010~07AA:
0013
X双字数据存放的顺序:
单元号地址:
0010内容:
0X78
单元号地址:
0011内容:
0X56
0012内容:
0X34
0013内容:
0X12
Y分得的地址:
0014~07AA:
0017
Y双字数据存放的顺序:
0014内容:
0X21
0015内容:
0X43
0016内容:
0017内容:
0X87
三、程序的调试
1、调试乘法程序:
1)程序执行到乘法子程序入口
2)在入口参数输入:
R2R3=100
R6R7=100
3)执行程序到乘法程序RETF指令处,查看结果
R4R5R6R7=00002710
4)自行输入一组数据,复位IP=0,验证结果
R2R3=10(0000000a)
R6R7=10(0000000a)
执行程序后:
R4R5R6R7=(0000000000000064)
2、调试除法程序:
1)复位IP=0,将程序执行到除法子程序入口
2)在入口信息输入数据:
R4R5R6R7=10000
R2R3=100
3)程序执行到除法程序的RETF指令,用D0命令查看结
R6R7=0064
4)自选一组数据,自行验证除法程序
R4R5R6R7=0000000000000064
R2R3=000a
执行程序后结果:
R6R7=000a
四、编程,R0R1=X*Y/Z
1)自行编写一段程序,调用乘法和除法程序,计算上式
DO_WAIT:
MOVAX,X
MOVR3,AX
MOVAX,X+2
MOVR2,AX
MOVAX,Y
MOVR7,AX
MOVAX,Y+2
MOVR6,AX
CALLBMUL;
第一断点
MOVAX,Z;
第二断点
MOVAX,Z+2
MOVR2,AX
CALLBDIV;
第三断点
MOVAX,R7
MOVR1,AX
MOVAX,R6
MOVR0,AX
JMPDO_WAIT;
第四断点
2)执行程序,验证结果
程序执行到第一断点:
R2R3=34127856
R6R7=65872143
程序执行到第二断点:
R4R5R6R7=A00905CBD870788D
中间结果正确吗?
答:
正确。
程序执行到第三断点:
R2R3=55555555
R4R5R6R7=A00905CDB870788D
程序执行到第四断点:
R6R7=E21C1067
答:
3)自行修改数据段定义的X,Y,Z的值,执行程序验证结果
X=2710H
Y=000AH
Z=0064H
R0R1=03E8H