8086汇编语言上机调试及基本操作.docx
- 文档编号:28847975
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:223.90KB
8086汇编语言上机调试及基本操作.docx
《8086汇编语言上机调试及基本操作.docx》由会员分享,可在线阅读,更多相关《8086汇编语言上机调试及基本操作.docx(17页珍藏版)》请在冰豆网上搜索。
8086汇编语言上机调试及基本操作
得分
教师签名
批改日期
课程编号
题目类型
深圳大学实验报告
课程名称:
微机原理实验
实验名称:
8086汇编语言上机调试及基本操作
学院:
物理科学与技术学院
组号:
指导教师:
李雄军
报告人:
林成业学号:
2012180073
实验地点:
科技楼302实验时间:
2014年9月24日
实验报告提交时间:
2014年10月15日
一、实验目的:
(1)掌握常用DEBUG命令:
G,D,R,T,U,Q。
(2)掌握工具软件EMU8086。
(3)掌握完整程序设计方法的格式,能正确书写数据段,代码段等。
(4)掌握简单的数值转换算法
二、实验原理
1.实验说明:
计算机中的数值有各种表达方式,这是计算机的基础。
掌握各种数制之间的转换是一种基本功。
2.程序框图:
对于0-999(即000H-3E7H)范围内的二进制数
3.参考程序:
;将AX中的三位数拆为三个BCD码,并存入Result开始的三个单元
DATASEGMENT;数据段
RESULT_1DB1
RESULT_2DB1
RESULT_3DB1
DATAENDS
STACKSEGMENTSTACK;堆栈段
STADB64DUP(0)
STACK_TOPDB0
STACKENDS
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX;设置数据段
MOVAX,STACK
MOVSS,AX;设置堆栈段
LEASP,STACK_TOP;设置栈顶指针
MOVAX,2afH
MOVCL,100
DIVCL
MOVRESULT_1,AL;除以100,得百位数
MOVAL,AH
MOVAH,0
MOVCL,10
DIVCL
MOVRESULT_2,AL;余数除以10,得十位数
MOVRESULT_3,AH;余数为个位数
MOVAX,4C00H;返回DOS
INT21H;
CODEENDS
ENDSTART;最后一行要按回车键
三、实验及报告要求:
1)用合适的编辑软件编辑以上源文件并存入合适目录;要求补充注释未注释的伪指令和指令;
2)分别在DOS和Windows下编译、连接生成可执行文件,比较两个环境下生成的机器码的长度和内容;试指出第2、5、7、10、14条指令的IP和机器码。
3)分别在debug和emu8086下调试该可执行文件,给出程序运行时的各段地址(CS=?
,DS=?
SS=?
ES=?
)举例说明debug的t,d,g,u等命令操作方法并对寄存器的变化作出解释;试改变被转换的三位数,并解释转换过程中标志寄存器中各标志位的结果;如何观察转换结果的变化?
4)写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。
5)实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法和微机原理学习方法作出总结。
4、实验结果与分析
1.建立汇编源程序ASM文件。
DATASEGMENT数据段
RESULT_1DB1结果1是低八位,初始量为’1’
RESULT_2DB1结果1是低八位
RESULT_3DB1结果1是低八位
DATAENDS结束数据段
STACKSEGMENTSTACK堆栈段
STADB64DUP(0)堆栈段初始化
STACK_TOPDB0栈顶初始化
STACKENDS结束堆栈段
CODESEGMENT代码段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
假定伪指令
MOVAX,DATA把具体的DATA送至寄存器中
MOVDS,AX设置数据段
MOVAX,STACK把STACK送至寄存器中
MOVSS,AX设置堆栈段
LEASP,STACK_TOP设置栈顶指针
MOVX,2afh把立即数2afh送至寄存器
MOVCL,100被除数为100
DIVCL8位寄存器
MOVRESULT_1,AL除以100,得百位数
MOVAL,AH余数为下一个除数
MOVAH,0高8位清零
MOVCL,10被除数是10
DIVCL8位寄存器
MOVRESULT_2,AL余数除以10,得十位数
MOVRESULT_3,AH余数是个位数
MOVAX,4C00H返回DOS
INT21H
CODEENDS结束代码段
ENDSTART最后一行按回车键
2.分别在DOS和Windows下编译、连接生成可执行文件,比较两个环境下生成的机器码的长度和内容;试指出第2、5、7、10、14条指令的IP和机器码。
(1)DOS
(2)Windows
(3)window和dos指令的IP和机器码比较
DOS
Windows
指令
IP
机器码
IP
机器码
2
0003
8ED8
0003
8ED8
5
000A
8D264100
000A
BC4000
7
0011
B164
0010
B164
10
0018
8AC4
0017
8AC4
14
0020
A20100
001F
A20100
3.分别在debug和emu8086下调试该可执行文件,给出程序运行时的各段地址(CS=?
,DS=?
SS=?
ES=?
)举例说明debug的t,d,g,u等命令操作方法并对寄存器的变化作出解释;试改变被转换的三位数,并解释转换过程中标志寄存器中各标志位的结果;如何观察转换结果的变化?
(1)debug和emu8086调试可执行文件的各段地址
Debug:
Emu8086:
debug和emu8086的段地址比较
段地址
debug
Emu8086
CS
000A
0716
DS
076A
0700
SS
076B
0711
ES
075A
0700
(2)debug的t,d,g,u等命令操作的说明
T-单步执行程序命令
用法:
-T要执行的指令条数如:
-T1
U-反汇编命令
用法:
-U代码段地址:
起始偏移地址如:
-UCS:
99
D-显示内存中的数据命令
用法:
-D数据段地址:
存放数据的偏移地址如:
-DDS:
01
G-连续执行程序命令
用法:
-G=代码段地址:
指令的起始偏移地址指令的结束偏移地址
如:
-G=CS:
100106
(3)试改变被转换的三位数,并解释转换过程中标志寄存器中各标志位的结果
将529H转换成123H
529H
123H
NV
无溢出
UP
串操作指令为自动增量指令
EI
允许中断请求
PL
符号为正
NZ
运算结果不为零
NA
辅助进位无进位
PO
1的个数为奇数
NC
无进位
5.实验总结
从本次上机实验,初步了解DOS和WINDOWS工具,学会了DOS.BOX和emu8086的使用,且在计算机上进行了一些简单数值进制转换。
在编写源程时,要多注意各个段的格式,且要先确定流程图,才能一一对应的写出相应的代码。
而在实验中,因没有及时在实验前了解DEBUG命令中U、D、G、R、T、Q等命令的具体含义,使得实验过程有点慢。
但是在根据实验内容慢慢进行调试程序的过程中,经过在与同学的讨论之后,更加深刻地了解每一步每个代码有什么意义以及给出程序运行时的各段地址。
6、思考题
1.用单步执行命令t运行程序,运行到movax,4c00h,int21h指令后,cs和IP寄存器内容前后有何变化?
产生变化的原因是什么?
CS由17F9变为00A7,IP由002A变为1165。
处理器用CS寄存器和IP寄存器中得内容组成的逻辑地址取下一条要执行的指令。
2.试写出将BCD转换成二进制码的汇编程序。
DATASEGMENT定义数据段
RESULT_1DB1为符号
RESULT_1保留一个字节
DATAENDS定义数据段结束
STACKSEGMENTSTACK定义堆栈段
STADB64DUP(0)将指针为64的字节数推入堆栈
STACK_TOPDB0设置栈顶指针为0
STACKENDS堆栈段定义结束
CODESEGMENT定义代码段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK规定CS,DS,EX和SS的内容
START:
MOVAX,DATADS初始化为DATA
MOVDS,AX设置数据段
MOVAX,STACKSS初始化为STACK
MOVSS,AX设置堆栈段
LEASP,STACK_TOP设置栈顶指针
BIN2BCDPROC
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI现场保护
MOVCX,316位二进制码转换成压缩BCD码最多需要3个字节
RE:
SUBDX,DX清零
DIVWORDPTR0AHAX除于10
MOVBL,DL将余数保存,因为DL=DX
SUBDX,DXDX清零
DIVWORDPTR0AH
SHLDL,4抬到高位
ORBL,DL压缩BCD码
MOV[DI],BL保存压缩BCD码
INCDI准备保存下一个
DECCX计数
JNERE重复
POPDI
POPDX
POPCX
POPBX
POPAX
RET
MOVAX,4C00H返回DOS
INT21H目标指向21H
CODEENDS代码段结束
ENDSTART最后一行要按回车
得分
教师签名
批改日期
课程编号
题目类型
深圳大学实验报告
课程名称:
微机原理实验
实验名称:
二进制数到BCD码的转换
学院:
物理科学与技术学院
组号:
指导教师:
李雄军
报告人:
林成业学号:
2012180073
实验地点:
科技楼302实验时间:
2014年10月15日
实验报告提交时间:
2014年10月29日
一、实验要求:
将AX中的一个二进制数(对应的十进制数范围是0-65535),转换成压缩性BCD码表示的十进制,并从屏幕输出转换结果。
要求用减法实现,并比较与除法方法进行运行速度比较。
二、实验目的:
(1)进一步熟练掌握8086汇编语言编译调试工具和环境的操作;
(2)掌握完整8086汇编的程序设计编写方法;
(3)掌握简单的数值码制转换方法;
(4)掌握键盘输出的DOS功能调用方法。
三、实验原理
1、实验说明:
计算机中的数值有各种表达方式,这是计算机的基础。
掌握各种数制、码制之间的转换是一种基本功;利用DOS功能调用实现在屏幕上显示字符或数字的方法是本课程的基本要求之一。
2、提示:
实现以上转换有两种方法:
1)除法;2)减法。
即三位数先循环减1000,直到不够减了,做减法的次数就是百分位的结果;将不够减之前一次的余数恢复,再循环减去100,直到不够减了,做减法的次数就是十分位的结果;最后恢复的正余数就是个位的结果。
以下是三位数的转换方法程序框图(供参考)
3、除法方法的参考程序:
;将AX中的三位数拆为三个BCD码,并存入Result开始的叁个单元
DATASEGMENT;数据段
RESULT_1DB0
RESULT_2DB0
RESULT_3DB0;定义三个字节变量,分别用来存放百分位、十分位和个位数
DATAENDS
STACKSEGMENTSTACK;堆栈段
STADB64DUP(0);开辟100单元作为堆栈空间
STACK_TOPDB0
STACKENDS
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX;设置数据段
MOVAX,STACK
MOVSS,AX;设置堆栈段
LEASP,STACK_TOP;设置栈顶指针
MOVAX,123;被转换的数先放入AX中
MOVCL,100
DIVCL
MOVRESULT_1,AL;除以100,得百位数
MOVAL,AH
MOVAH,0
MOVCL,10
DIVCL
MOVRESULT_2,AL;余数除以10,得十位数,存入RESULT_2
MOVRESULT_3,AH;余数为个位数,存入RESULT_3
MOVAX,4C00H;返回DOS(两句)
INT21H;
CODEENDS
ENDSTART;最后一行要按回车键
4.补充提示:
1)屏幕显示字符的方法(DOS功能调用2,参考课本P131)
MOVAH,02;送显示功能号到AH
MOVDL, ‘1’ ;被显示字符的ASCII码’1’送DL
INT21H;DOSINT21功能调用
2)空格、回车、换行的ASCII码分别是20H,0DH,0AH
3)跳转、循环语句LOOPNEXT的使用举例:
若要用减法求AL中的内容为5的多少倍,核心代码如下:
MOVCL,0;计数器清零
NEXT:
SUBAL,5;减5
JCOVER;有借位说明不够减
INCCL;否则够减,计数器加1
JMPNEXT;无条件跳转
OVER:
ADDAL,5;最后恢复不够减时AL的余数
;至此,CL中就是所求结果(即AL内容的5的倍数)
四、实验及报告要求:
1.简要说明算法,并画出正确的程序流程图;
2.给出完整正确的源程序代码,要求给每一句伪指令或指令加上注释;
3.分别在DOS和Windows下编译、连接源程序生成可执行文件并调试,比较两个环境下生成的机器码的长度、寄存器内容、计算结果的异同。
4.如何观察转换过程中标志寄存器中各标志位的结果?
如何观察转换结果的变化?
试改变被转换数值,对结果与编制为的变化加以说明和解释。
5.写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。
6.实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法和微机原理学习方法作出总结。
五、思考题:
如何让你的程序自适应地处理高位为‘0’时不输出或输出空格呢?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 汇编语言 上机 调试 基本 操作
![提示](https://static.bdocx.com/images/bang_tan.gif)