实验一8086汇编语言上机调试.docx

上传人:b****5 文档编号:28499893 上传时间:2023-07-15 格式:DOCX 页数:17 大小:290.35KB
下载 相关 举报
实验一8086汇编语言上机调试.docx_第1页
第1页 / 共17页
实验一8086汇编语言上机调试.docx_第2页
第2页 / 共17页
实验一8086汇编语言上机调试.docx_第3页
第3页 / 共17页
实验一8086汇编语言上机调试.docx_第4页
第4页 / 共17页
实验一8086汇编语言上机调试.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

实验一8086汇编语言上机调试.docx

《实验一8086汇编语言上机调试.docx》由会员分享,可在线阅读,更多相关《实验一8086汇编语言上机调试.docx(17页珍藏版)》请在冰豆网上搜索。

实验一8086汇编语言上机调试.docx

实验一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

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1