汇编实验4宏指令设计实验报告.docx

上传人:b****1 文档编号:14471684 上传时间:2023-06-23 格式:DOCX 页数:13 大小:195.68KB
下载 相关 举报
汇编实验4宏指令设计实验报告.docx_第1页
第1页 / 共13页
汇编实验4宏指令设计实验报告.docx_第2页
第2页 / 共13页
汇编实验4宏指令设计实验报告.docx_第3页
第3页 / 共13页
汇编实验4宏指令设计实验报告.docx_第4页
第4页 / 共13页
汇编实验4宏指令设计实验报告.docx_第5页
第5页 / 共13页
汇编实验4宏指令设计实验报告.docx_第6页
第6页 / 共13页
汇编实验4宏指令设计实验报告.docx_第7页
第7页 / 共13页
汇编实验4宏指令设计实验报告.docx_第8页
第8页 / 共13页
汇编实验4宏指令设计实验报告.docx_第9页
第9页 / 共13页
汇编实验4宏指令设计实验报告.docx_第10页
第10页 / 共13页
汇编实验4宏指令设计实验报告.docx_第11页
第11页 / 共13页
汇编实验4宏指令设计实验报告.docx_第12页
第12页 / 共13页
汇编实验4宏指令设计实验报告.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编实验4宏指令设计实验报告.docx

《汇编实验4宏指令设计实验报告.docx》由会员分享,可在线阅读,更多相关《汇编实验4宏指令设计实验报告.docx(13页珍藏版)》请在冰点文库上搜索。

汇编实验4宏指令设计实验报告.docx

汇编实验4宏指令设计实验报告

昆明理工大学信息工程与自动化学院学生实验报告

(2011—2012学年第1学期)

课程名称:

汇编与微机接口开课实验室:

信自楼机房4452010年10月21日

年级、专业、班

学号

姓名

成绩

实验项目名称

宏指令设计

指导教师

教师评语

该同学是否了解实验原理:

A.了解□B.基本了解□C.不了解□

该同学的实验能力:

A.强□B.中等□C.差□

该同学的实验是否达到要求:

A.达到□B.基本达到□C.未达到□

实验报告是否规范:

A.规范□B.基本规范□C.不规范□

实验过程是否详细记录:

A.详细□B.一般□C.没有□

教师签名:

年月日

一、实验目的和内容

1.掌握宏指令库的设计方法,并设计程序来调用其中的宏指令。

2.编程实现32位二进制数除以16位二进制数,并把结果用十进制数形式显示在屏幕上。

要求采用宏指令库实现。

二、实验原理及基本技术路线图(方框原理图)

宏指令是源程序中一段有独立功能的程序代码。

宏指令由宏定义伪指令定义,它只需在源程序中定义一次,便可以多次被调用。

当源程序被汇编时,汇编程序对每个宏调用进行宏扩展。

宏扩展就是用宏定义体替换宏指令名,并用实参数替换形式参数。

宏调用中实参数个数和形式参数个数不等时,若实参数个数大于形式参数个数,在替换时多余的实参数不予考虑;若实参数个数小于形式参数个数,则多余的形式参数作为空(字符)或零(数字)处理。

应保证用实参数替换形式参数后,所展开的是有效的汇编语句,否则汇编程序会提示错误。

为了使宏指令能让多个程序共享,可以把它们组织到一个文件中,并存放在磁盘上,把这种文件称为宏指令库。

可以用EDIT等任何文本编辑程序创建宏指令库,库名由用户自己起,而且对库的扩展名没有特殊要求。

库中的宏指令以源代码形式出现。

三、所用仪器、材料(设备名称、型号、规格等)

1.操作系统平台:

Windows7。

2.汇编环境:

MicrosoftMASM5.0。

3.文本编辑器:

记事本。

四、实验方法、步骤

1.将MASM5的文件置于D:

\assembly目录下;

2.将masm.exe和link.exe所在目录(D:

\assembly\MASM5)添加到Path环境变量中;

3.在D:

\assembly下新建一个div.asm文件,打开div.asm,输入汇编程序代码;

4.新建一个宏指令库macro.lib,输入源代码,保存;

5.运行一个命令行窗口,将当前目录切换到D:

\assembly,然后输入命令:

masmdiv.asm[Enter],来汇编程序,根据汇编结果查看程序代码是否有语法错误,如有,则更正保存后重新汇编,直至没有错误为止(特别是对宏指令库的检查),此时会生成div.obj文件;

6.输入命令:

linkdiv.obj[Enter],观察输出结果,如果没有错误,则生成div.exe;

7.输入命令:

debugdiv.exe[Enter],调试程序,并记录运行过程;

8.完成实验报告。

五、实验过程原始记录(数据、图表、计算等)

1.新建一个宏指令库macro.lib:

2.新建名为div.asm的文件,输入汇编程序代码:

MACRO.LIB文件源码:

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

;功能:

保存寄存器DX、CX、BX、AX

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

PUSHREGMACRO

PUSHDX

PUSHCX

PUSHBX

PUSHAX

ENDM

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

;功能:

恢复寄存器AX、BX、CX、DX

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

POPREGMACRO

POPAX

POPBX

POPCX

POPDX

ENDM

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

;功能:

清屏

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

CLRSCRNMACRO

PUSHREG

MOVAH,6

MOVAL,0

MOVBH,1FH

MOVCX,0

MOVDX,184FH

INT10H

POPREG

ENDM

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

;返回操作系统

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

RETURNMACRO

MOVAX,4C00H

INT21H

ENDM

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

;功能:

把16位二进制数转换为十进制数的

;ASCII值,ASC为5个字节的十进制数缓冲区,

;BIN为要转换的二进制数。

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

BIN_DECMACROASC,BIN

PUSHREG;保存寄存器内容

PUSHDI

LEADI,ASC;保存输出结果字符串的首地址

XORDX,DX

MOVAX,BIN

MOVBX,10000

DIVBX;求万位数

ADDAL,30H

MOV[DI],AL;存放万位数的ASCII码

INCDI

MOVAX,DX

XORDX,DX

MOVBX,1000

DIVBX;求千位数

ADDAL,30H

MOV[DI],AL;存放千位数的ASCII码

INCDI

MOVAX,DX

XORDX,DX

MOVBX,100

DIVBX;求百位数

ADDAL,30H

MOV[DI],AL;存放百位数的ASCII码

INCDI

MOVAX,DX

XORDX,DX

MOVBX,10

DIVBX;求十位数

ADDAL,30H

MOV[DI],AL;存放十位数的ASCII码

INCDI

ADDDL,30H

MOV[DI],DL;存放个位数的ASCII码

POPDI

POPREG;恢复寄存器内容

ENDM

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

;显示首址为ASC的字符串

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

DISPMACROASC

PUSHDX

LEADX,ASC

MOVAH,9

INT21H

POPDX

ENDM

div.asm文件源码:

INCLUDEMACRO.LIB

STACKSGSEGMENTSTACK'S'

DW16DUP('?

')

STACKSGENDS

DATASEGMENT

ADD7006652;被除数

BDW1234;除数

CDW?

;商

PROMPTDB'Theresultis:

$'

ASCIIDB5DUP(?

),'$';转换结果

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACKSG

MAINPROCFAR

MOVAX,DATA

MOVDS,AX

MOVDX,WORDPTRA+2

MOVAX,WORDPTRA

DIVB;计算A/B

BIN_DECASCII,AX;将商转换为十进制的ASCII码

CLRSCRN;清屏

DISPPROMPT

DISPASCII;显示结果

RETURN

MAINENDP

CODEENDS

ENDMAIN

 

3.汇编源程序:

4.连接生成可执行文件:

5.调试程序:

(1)在计算完A/B之后,调用宏指令BIN_DEC,从153D:

0010处展开宏:

(2)将计算结果的万位(0)转为其对应的ASCII码存入ASCII数组的0号单元:

(3)将计算结果的千位(5)转为其对应的ASCII码存入ASCII数组的1号单元:

(4)将计算结果的百位(6)转为其对应的ASCII码存入ASCII数组的2号单元:

(5)将计算结果的十位(7)转为其对应的ASCII码存入ASCII数组的3号单元:

(6)将计算结果的个位(8)转为其对应的ASCII码存入ASCII数组的4号单元:

(7)紧接着从153D:

005B处开始调用CLRSCRN宏指令清屏:

(8)清屏后的效果如下,并从153D:

0071处开始调用DISP宏指令输出字符串‘Theresultis:

’:

(9)显示:

‘Theresultis:

’,并从153D:

007B处开始调用DISP宏指令输出计算结果:

(10)显示计算结果:

05678,并从153D:

0085处开始调用RETURN宏指令,返回操作系统:

(11)程序结束并退出

(12)在命令行下直接运行div.exe的效果:

六、实验结果、分析和结论(误差分析与数据处理、成果总结等。

其中,绘制曲线图时必须用计算纸)

1.宏指令库在编写时,要特别注意保存要有到的寄存器,并且对宏指令的执行逻辑要非常清晰,保证当形参被替换为实参时,展开的汇编语句是正确的,否则将会出现错误。

当宏指令结束时,同时还要恢复现场,保证堆栈平衡。

2.宏指令在定义时,一个好的习惯是在其代码前面加以说明,解释对应宏指令的功能和执行逻辑。

这样在使用时才能根据需要使用不同的宏指令,也方便代码阅读。

3.宏指令和子程序的用途可以简单的总结为:

通常宏指令被用在代码较短且参数较多的场合,而子程序则被用在代码较长的场合。

注:

教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2