实验一8086汇编语言上机调试.docx
- 文档编号:16631213
- 上传时间:2023-07-15
- 格式:DOCX
- 页数:17
- 大小:290.35KB
实验一8086汇编语言上机调试.docx
《实验一8086汇编语言上机调试.docx》由会员分享,可在线阅读,更多相关《实验一8086汇编语言上机调试.docx(17页珍藏版)》请在冰点文库上搜索。
实验一8086汇编语言上机调试
1汇编语言程序的上机进程
在运算机上运行汇编语言程序的步骤是:
1.用编辑程序成立ASM源文件;
2.用MASM程序把ASM文件转汇编成OBJ文件;
3.用LINK程序把OBJ文件转连接成EXE文件;
4.用DOS命令直接键入文件名就可执行该程序。
图1汇编语言程序的成立及汇编进程
1.检查源程序;
2.测出源程序中的语法错误,并给出犯错信息;
3.产生目标文件(.OBJ),并可给出列表文件(同时列出汇编语言源程序和机械语言目标程序的文件,称之为.LST文件)和交叉索引文件(列出程序中利用的符号、变量和标号和引用情形,称之为.CRF文件)。
4.展开宏指令。
成立汇编语言的工作环境
为运行汇编语言程序至少要在磁盘上提供以下文件:
1.编辑程序,如
2.汇编程序,如
3.连接程序,如
4.调试程序,如
汇编语言源程序上机进程
1.成立汇编源程序ASM文件
2.汇编产生OBJ文件
3.链接产生EXE文件
4.程序的调试和执行
5.生成EXE或COM文件
2汇编语言程序格式
存储器的物理地址由段基址和偏移地址组合而成,任何一个逻辑段,无论是代码段,数据段,堆栈段,附加段都必需进行段概念,以便连接程序把不同段和模块连接成一个可执行程序。
另外,还必需明确段和段寄放器之间的关系,这可利用段分派语句来完成。
一、段概念语句
4个逻辑段不必然全数要概念,通常代码段和数据段是必需的,附加段能够省略。
但今世码段中利用了串指令,必需设置附加段作目标串基址用,附加段也可用来寄存数据,增大数据段容量。
一般程序结构:
(1)代码段:
寄存程序执行的指令
(2)数据段:
寄存程序所需的数据
(3)堆栈段:
寄存程序执行的临时信息
数据段概念格式:
DATASEGMENT;数据段
RESULT_1DB1
RESULT_2DB1
RESULT_3DB1
DATAENDS
附加段的概念:
EXTRASEGMENT
DEST_BUFFERDB50DUP(‘?
’)
EXTRAENDS
堆栈段的概念:
STACKSEGMENTSTACK;堆栈段
STADB64DUP(0)
STACK_TOPDB0
STACKENDS
二、段分派语句
在8086/8088系统中存储器采用分段结构,各段容量≦64K字节,用户能够设置多个逻辑段,但只允许4个逻辑段同时有效,段分派语句用来完成将逻辑段别离概念成代码段、数据段、堆栈段和附加段。
由于ASSUME伪指令只指定某个段分派给哪个段寄放器,并将代码段的段基址自动装入CS寄放器中,而不能自动把其它段基址装入相应的段寄放器中,所以在代码段的开始要有一段初始化程序完成这一工作。
对堆栈段来讲除将段基址送入SS寄放器外,还要将栈顶偏移地址置入堆栈指示器SP中。
ASSUMECS:
段名,DS:
段名,ES:
段名,SS:
段名
(一)、DOS下的汇编调试:
步骤
1汇编调试所需的文件已拷贝在D:
\MASM子目录下,它们是:
(1)用文本编辑软件UltraEdit、WINDOWS中的记事本或其它的文本编辑器输入汇编语言程序,注意在最后一行的END输入完后要按一次回车键,保留的源文件的扩展各必然如果ASM如:
(2)宏汇编工具,把ASM源文件生成OBJ目标文件,
(3)链接工具,把OBJ文件生成EXE文件
(4)调试工具,可对程序进行调试,跟踪
2、进入WindowsXP的命令行方式(在运行程序栏中输入command/cmd并按回车键)或WindowsME和Windows98的MS-DOS方式(在开始→程序→附件MS-DOS方式)。
3、在DOS提示符下进行汇编、连接、动态调试等操作。
例如:
对源文件进行的操作
D:
\MASM\MASMEXAMPLE;汇编源程序操作
D:
\MASM\LINKEXAMPLE;连接并生成扩展名为.EXE的可执行文件
D:
\MASM\DEBUG对可执行文件进行调试
3、要求掌握的调试命令(在DEBUG中利用的命令)
a:
U-反汇编命令
用法:
-U代码段地址:
起始偏移地址如:
-UCS:
100
b:
D-显示内存中的数据命令
用法:
-D数据段地址:
寄存数据的偏移地址如:
-DDS:
0020
c:
T-单步执行程序命令
用法:
-T要执行的指令条数如:
-T3
d:
G-持续执行程序命令
用法:
-G=代码段地址:
指令的起始偏移地址指令的结束偏移地址
如:
-G=CS:
100106
注意:
结束地址必然如果操作码的所在地址
e:
R-查看和修改寄放器数据命令
用法:
-R回车如:
-RAX
f:
F-对内存单元填凑数据命令
用法:
-F数据段地址:
偏移首地址偏移未地址填入的数据
如:
-FDS:
100120ff
g:
Q-退出”DEBUG“应用程序命令
4、应用例子及操作步骤
将AX中的十六进制数拆为三个BCD码,并存入Result_1,Result_2,Result_3的叁个单元中。
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,587
MOVCL,100
DIVCL
MOVRESULT_1,AL;除以100,得百位数
MOVAL,AH
MOVAH,0
MOVCL,10
DIVCL
MOVRESULT_2,AL;余数除以10,得十位数
MOVRESULT_3,AH;余数为个位数
;------------------------------------------
;程序结束必需要有的两条指令
MOVAX,4C00H;
INT21H;
;------------------------------------------
CODEENDS
ENDSTART;最后一行要按回车键
⑴、对源程序进行汇编产生OBJ文件
D:
\MASM>MASMEXAMPLE;
Microsoft(R)MacroAssemblerVersion
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
51514+408822Bytessymbolspacefree
0WarningErrors
0SevereErrors
⑵、对目标文件进行连接产生EXE文件
D:
\MASM>LINKEXAMPLE;
Microsoft(R)8086ObjectLinkerVersion
Copyright(C)MicrosoftCorp1983,1984,1985.Allrightsreserved.
⑶、对可执行文件进行调试
D:
\MASM>DEBUG
-UCS:
0000用反汇编命令”U代码段地址:
起始偏移地址“显示出程序的表示符
-U02C
160D:
0000B80716MOVAX,1607;程序的起始地址是160DH:
0000H
160D:
00038ED8MOVDS,AX
160D:
0005B80816MOVAX,1608
160D:
00088ED0MOVSS,AX
160D:
000A8D264100LEASP,[0041]
160D:
000EB84B02MOVAX,024B
160D:
0011B164MOVCL,64
160D:
0013F6F1DIVCL
160D:
0015A20000MOV[0000],AL
160D:
00188AC4MOVAL,AH
160D:
001AB400MOVAH,00
160D:
001CB10AMOVCL,0A
160D:
001EF6F1DIVCL
160D:
0020A20100MOV[0001],AL
160D:
0023MOV[0002],AH
160D:
0027B8004CMOVAX,4C00;程序的结束地址是160DH:
0027H
160D:
002ACD21INT21
160D:
002C9ESAHF
-
执行程序前观察内存中的数据
-DDS:
0000;用显示内存中的数据命令命令”D数据段地址:
寄存数据的偏移地址“显示内存中的数据
-DDS:
030
15F7:
0000CD2000A0009AF0FE-1DF03C035D0F7703.........<.].w.
15F7:
00105D0F04035D0F4C0F-0101010002FFFFFF]...].L.........
15F7:
0020FFFFFFFFFFFFFFFF-FFFFFFFFE6154C01..............L.
-
-G=CS:
00000027;持续执行程序命令代码段地址:
指令的起始偏移地址指令的结束偏移地址
AX=0708BX=0000CX=000ADX=0000SP=0041BP=0000SI=0000DI=0000
DS=1607ES=15F7SS=1608CS=160DIP=0027NVUPEIPLNZNAPONC
160D:
0027B8004CMOVAX,4C00
-
执行程序后观察内存中的数据(结果)
-DDS:
0000;用显示内存中的数据命令命令”D数据段地址:
寄存数据的偏移地址“显示内存中的数据
-DDS:
00;观察内存中的数据
1607:
00000508070000000000-0000000000000000................
1607:
00100000000000000000-0000000000000000................
1607:
00200000000000000000-0000000000000000................
-
-RIP修改IP寄放器中的数据
IP0027显示修改前的数据
:
00输入修改的数据
-
-T;单步执行程序命令(执行一条指令)
AX=1607BX=0000CX=000ADX=0000SP=0041BP=0000SI=0000DI=0000
DS=1607ES=15F7SS=1608CS=160DIP=0003NVUPEIPLNZNAPONC
160D:
00038ED8MOVDS,AX
-
-T3;执行3条指令
AX=1607BX=0000CX=000ADX=0000SP=0041BP=0000SI=0000DI=0000
DS=1607ES=15F7SS=1608CS=160DIP=0005NVUPEIPLNZNAPONC
160D:
0005B80816MOVAX,1608
AX=1608BX=0000CX=000ADX=0000SP=0041BP=0000SI=0000DI=0000
DS=1607ES=15F7SS=1608CS=160DIP=0008NVUPEIPLNZNAPONC
160D:
00088ED0MOVSS,AX
AX=1608BX=0000CX=000ADX=0000SP=0041BP=0000SI=0000DI=0000
DS=1607ES=15F7SS=1608CS=160DIP=000ENVUPEIPLNZNAPONC
160D:
000EB84B02MOVAX,024B
-
-R;查看寄放器数据命令
AX=0302BX=0000CX=000ADX=0000SP=0014BP=0000SI=0000DI=0000
DS=1607ES=1607SS=12A0CS=129DIP=0028NVUPEIPLNZNAPONC
129D:
0028B8004CMOVAX,4C00
-RAX;查看和修改寄放器数据命令
AX0302
:
FFFF
-R;查看寄放器数据命令
AX=FFFFBX=0000CX=000ADX=0000SP=0014BP=0000SI=0000DI=0000
DS=1607ES=1607SS=12A0CS=129DIP=0028NVUPEIPLNZNAPONC
129D:
0028B8004CMOVAX,4C00
-
-F数据段地址:
偏移首地址偏移未地址填入的数据
-FDS:
00000030DF;对内存单元填凑数据
-DDS:
00;观察内存中的数据
1607:
0000DFDFDFDFDFDFDFDF-DFDFDFDFDFDFDFDF................
1607:
0010DFDFDFDFDFDFDFDF-DFDFDFDFDFDFDFDF................
1607:
0020DFDFDFDFDFDFDFDF-DFDFDFDFDFDFDFDF................
1607:
0030DFA2010088260200-B8004CCD210BA1D6.....&....L.!
...
1607:
00405D4850E8850C83C4-02C6140000002800]HP...........(.
-
-Q;退出”DEBUG“应用程序命令
D:
\MASM_8088\MASM>
附标志位注解
OF(ov/nv):
Over溢出标志位
DF(dn/up):
Direction方向标志位
IF(ei/di):
Enable允许中断标志位
SF(ng/pl):
Symbol符号标志位
ZF(zr/nz):
Zero零标志位
AF(ac/na):
Auxiliary辅助进位标志位
PF(pe/po):
Parity奇偶标志位
CF(cy/nc):
Carry进位标志位
溢出OV(溢出)NV(未溢出)
零位ZF(等于零)NZ(不等于零)
方向DN(减少)UP(增加)
辅助进位AC(进位)NA(无进位)
中断EI(许可)DI(禁止)
奇偶标志PE(偶)PO(奇)
符号NG(负)PL(正)
进位CY(进位)NC(无进位)
(二)Windows下的汇编调试
1.使用Emu8086软仿真软件来调试8086汇编语言程序
(1)、点击Open打开文件,装入源程序;
(2)、点击Compile对源程序选择进行编译;
⑹、选择另存为格式;
⑺、选择run进入程序的软仿真;
⑻、点击View选择Variables观察数据段的变量
实验一汇编语言上机调试及大体操作
(验证性)
1、实验目的:
(1)掌握常常利用DEBUG命令:
G,D,R,T,U,Q。
(2)掌握工具软件EMU8086。
(3)掌握完整程序设计方式的格式,能正确书写数据段,代码段等。
(4)掌握简单的数值转换算法
2、实验说明:
运算机中的数值有各类表达方式,这是运算机的基础。
掌握各类数制之间的转换是一种大体功。
3、程序框图:
4、参考程序:
;将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,123
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;最后一行要按回车键
5、实验及报告要求:
1)用适合的编辑软件编辑以上源文件并存入适合目录;要求补充注释未注释的伪指令和指令;
2)别离在DOS和Windows下编译、连接生成可执行文件,比较两个环境下生成的机械码的长度和内容;试指出第2、5、7、10、14条指令的IP,和机械码。
3)别离在debug和emu8086下调试该可执行文件,给出程序运行时的各段地址(CS=?
,DS=?
SS=?
ES=?
)举例说明debug的t,d,g,u等命令操作方式并对寄放器的转变作出解释;试改变被转换的三位数,并解释转换进程中标志寄放器中各标志位的结果;如何观察转换结果的转变?
4)写出完整的实验报告,专门是“实验结果”与“实验总结体会”部份,是评分的主要依据。
5)实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方式和微机原理学习方式作出总结。
6、试探题:
1)用单步执行命令t运行程序,运行到movax,4c00h,int21h指令后,cs和ip寄放器内容前后有何转变,产生转变的原因是什么?
2)试写出将BCD转换成二进制码的汇编程序。
提示:
10进制数转2进制数,算法:
Dn-1*10n-1+……+D0*100
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 8086 汇编语言 上机 调试