《汇编语言与接口技术》实验指导.docx

上传人:b****7 文档编号:16453884 上传时间:2023-07-13 格式:DOCX 页数:81 大小:279.25KB
下载 相关 举报
《汇编语言与接口技术》实验指导.docx_第1页
第1页 / 共81页
《汇编语言与接口技术》实验指导.docx_第2页
第2页 / 共81页
《汇编语言与接口技术》实验指导.docx_第3页
第3页 / 共81页
《汇编语言与接口技术》实验指导.docx_第4页
第4页 / 共81页
《汇编语言与接口技术》实验指导.docx_第5页
第5页 / 共81页
《汇编语言与接口技术》实验指导.docx_第6页
第6页 / 共81页
《汇编语言与接口技术》实验指导.docx_第7页
第7页 / 共81页
《汇编语言与接口技术》实验指导.docx_第8页
第8页 / 共81页
《汇编语言与接口技术》实验指导.docx_第9页
第9页 / 共81页
《汇编语言与接口技术》实验指导.docx_第10页
第10页 / 共81页
《汇编语言与接口技术》实验指导.docx_第11页
第11页 / 共81页
《汇编语言与接口技术》实验指导.docx_第12页
第12页 / 共81页
《汇编语言与接口技术》实验指导.docx_第13页
第13页 / 共81页
《汇编语言与接口技术》实验指导.docx_第14页
第14页 / 共81页
《汇编语言与接口技术》实验指导.docx_第15页
第15页 / 共81页
《汇编语言与接口技术》实验指导.docx_第16页
第16页 / 共81页
《汇编语言与接口技术》实验指导.docx_第17页
第17页 / 共81页
《汇编语言与接口技术》实验指导.docx_第18页
第18页 / 共81页
《汇编语言与接口技术》实验指导.docx_第19页
第19页 / 共81页
《汇编语言与接口技术》实验指导.docx_第20页
第20页 / 共81页
亲,该文档总共81页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《汇编语言与接口技术》实验指导.docx

《《汇编语言与接口技术》实验指导.docx》由会员分享,可在线阅读,更多相关《《汇编语言与接口技术》实验指导.docx(81页珍藏版)》请在冰点文库上搜索。

《汇编语言与接口技术》实验指导.docx

《汇编语言与接口技术》实验指导

 

《汇编语言与接口技术》

实验指导

 

河南大学ji院

2013.9

 

汇编语言实验环境和要求

《汇编语言》是计算机及计算机类专业学生的专业基础课,是培养学生直接使用计算机硬件资源能力的一门课程。

它不仅能帮助学生进一步理解计算机组成原理课程中的各种概念,而且还为其他课程:

操作系统、接口与通信技术和计算机控制技术等课程提供必要的预备知识。

该课程在计算机学科设置中起着承上启下的作用。

一、实验环境

汇编实验是在一般PC机上完成的,采用MASM6.11宏汇编进行实验。

MASM6.11版本对硬件环境无特殊要求,对软件的要求如下:

(1)操作系统:

Windows2000的命令提示符状态。

在Windows下进入DOS命令行的方法:

“开始”“运行”à键入“cmd”即可进入DOS命令行;

(2)编辑环境:

EDIT.COM、记事本等文本编辑器(随操作系统提供)。

(3)汇编和连接程序文件:

汇编程序MASM.EXE连接程序LINK.EXE

汇编连接程序ML.EXE汇编链接错误提示ML.ERR

(4)调试程序:

DEBUG.EXE(随操作系统提供)。

二、PC机DEBUG调试工具的使用

DEBUG.EXE程序是专门为分析和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。

是学习汇编语言必须掌握的调试工具。

1、DEBUG程序使用

在命令提示符下键入命令:

DEBUG[盘符:

][路径][文件名.EXE][参数1][参数2]

这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG状态下,此时可以用DEBUG命令进行程序调试。

在DEBUG环境下,默认采用十六进制数制,所有数值不需要带数制后缀。

若进入DEBUG的命令中将所有的参数都省略,则仅进入DEBUG环境,内存中不包含特定的程序和数据。

此时,可写入指令和数据进行验证调试,也可以使用N或者L命令从指定盘上装入要调试的程序。

如果进入DEBUG的命令中包含文件名,则进入DEBUG环境的同时,将指定程序调入内存,当前程序的代码段作为默认的CS段,从0单元保存。

2、DEBUG的常用命令

DEBUG命令都是单字母命令,按照不同命令的格式其后可加上一个或多个参数,若包含多个命令参数,其间用空格作为分隔符。

DEBUG命令不区分大小写。

(1)汇编命令A

格式:

A[起始地址]

功能:

以汇编指令的形式输入代码,系统自动将汇编指令翻译成机器指令代码,并从默认或指定地址单元开始存放。

若缺省起始地址,则从当前CS:

100地址开始存放。

A命令按行汇编,主要是用于小段程序的汇编或对目标程序的修改。

举例:

Ø命令:

A含义:

从默认地址输入汇编指令;

Ø命令:

A1000:

20含义:

从地址为1000H:

20H的单元输入汇编指令;

Ø命令:

ACS:

1000含义:

从CS段的1000H单元输入汇编指令;

(2)反汇编命令U

格式1:

U[起始地址]

格式2:

U[起始地址][结束地址|字节数]

功能:

格式1从指定起始地址处开始将32个字节的目标代码(非32条指令)转换成汇编指令形式,如果省略起始地址,则从当前CS:

IP指向地址开始反汇编、或接着上次U命令继续反汇编。

格式2将指定范围的内存单元中的目标代码转换成汇编指令。

注意,这里的反汇编是以指令为单位进行显示。

界面说明:

Ø界面左边:

以逻辑地址形式显示每条汇编指令所在存储单元的首单元地址;

Ø界面中间:

每条汇编指令对应的机器指令代码;

Ø界面右边:

处理了符号之后的汇编指令;

举例:

Ø命令:

U含义:

查看默认地址的汇编指令,默认条数;

Ø命令:

U0含义:

从0地址查看汇编指令,默认CS段;

Ø命令:

U050含义:

查看地址0到50H的汇编指令,默认CS段;

地址范围要确认该范围中所有指令都是完整的。

Ø命令:

UDS:

0含义:

将DS:

0地址中的内容当作指令,查看默认条数;

(3)显示、修改寄存器命令R

格式:

R[寄存器名]

功能:

如果给出寄存器名,则显示该寄存器的内容并可进行修改。

如果不指定寄存器名,则显示所有寄存器的内容及当前值(不能修改)。

R命令只能显示、修改16位寄存器,对于标志寄存器只能通过执行指令的方式修改。

界面说明:

Ø界面中间两行:

显示各寄存器内容;先显示13个寄存器的值;后面的8个符号分别表示OF、DF、IF、SF、ZF、AF、PF、CF标志位的状态,符号含义如下表:

标志位

OF

DF

IF

SF

ZF

AF

PF

CF

置位符号

(1)

OV

DN

EI

NG

ZR

AC

PE

CY

复位符号(0)

NV

UP

DI

PL

NZ

NA

PO

NC

Ø界面最后一行:

显示下一条将要执行的指令;若指令中有存储单元寻址方式的操作数,则指令后显示该操作数的地址和数值;

举例:

Ø命令:

R含义:

查看所有寄存器内容;

Ø命令:

Rax含义:

查看寄存器AX中的内容,并可修改;

(4)显示存储单元命令D

格式1:

D[起始地址]

格式2:

D[起始地址][结束地址|L字节数]

功能:

格式1从起始地址开始按十六进制显示128个单元的内容,每行16个单元,共8行。

格式2显示指定范围内存储单元的内容,其他显示方式与格式1一样。

如果省略起始地址或地址范围,则从当前的地址开始按格式1显示。

界面说明:

Ø界面左边:

以逻辑地址形式显示指定的或默认的存储单元地址;

Ø界面中间:

存储单元中的实际存放内容,每一行显示16个单元,每个单元存放一个字节数据;

Ø界面右边:

存储单元中值的对应的ASCII码字符;若存储单元中存放的是不可显示的ASCII码值,则显示“.”;

例如:

-D200;表示从DS:

0200H开始显示128个单元内容

-D100120;表示显示DS:

0100-DS:

0120单元的内容

说明:

在DEBUG中,地址表示方式有如下形式:

段寄存器名:

相对地址,如:

DS:

100

段基值:

偏移地址(相对地址),如:

23A0:

1500

举例:

Ø命令:

D含义:

默认查看;

Ø命令:

D1000:

0含义:

从指定单元查看数据,默认长度;

Ø命令:

DDS:

0含义:

从指定单元查看DS段中的数据,默认长度;

Ø命令:

D05含义:

查看DS段中0~5单元中的6个数据;

Ø命令:

D10L5含义:

查看DS段中从10H开始的连续5个单元内容;

(5)修改存储单元命令E

格式1:

E[起始地址][内容表]

格式2:

E[地址]

功能:

格式1按内容表的内容修改从起始地址开始的多个存储单元内容,即用内容表指定的内容来代替存储单元当前内容。

例如:

—EDS:

0100'VAR'1234

表示从DS:

0100为起始单元的连续五个字节单元内容依次被修改为

'V'、'A'、'R'、12H、34H。

格式2是逐个修改指定地址单元的当前内容。

如:

—EDS:

0010

156F:

001041.5F

其中156F:

0010单元原来的值是41H,5FH为输入的修改值。

若只修改一个单元的内容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,就显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回DEBUG“-”提示符。

如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元的内容。

举例:

Ø命令:

E100

含义:

查看DS段中100H单元起始的存储单元内容,并可随时修改;

Ø命令:

EES:

1013120

含义:

将ES段中地址为10H~12H的3个单元中的值修改为1、31H、20H;

Ø命令:

E10‘ABCD’

含义:

将DS段中地址10H~13H的连续4个单元内容修改为41H~44H;

(6)运行命令G

格式:

G[=起始地址][断点地址]

功能:

CPU从指定起始地址开始执行,在断点地址处停止,即断点地址中的指令不执行。

若省略起始地址,则从当前CS:

IP指示地址开始执行一条指令。

注意,断点地址必须是某一条指令的起始地址,否则查看到的程序有可能会出错。

举例:

Ø命令:

G含义:

从当前位置连续执行程序,到结束;

Ø命令:

G=0含义:

从0地址连续执行程序,到结束;

Ø命令:

G14含义:

从当前位置执行程序到14H,中断;

Ø命令:

G=320含义:

从地址3执行程序到地址20H,中断;

(7)跟踪命令T

格式:

T[=起始地址][指令条数]

功能:

从指定地址开始执行指定条数的指令,若省略指令条数,则默认执行一条指令,若省略起始地址,则从当前CS:

IP指示地址开始执行。

举例:

Ø命令:

T含义:

从当前位置单步执行1条指令;

Ø命令:

T3含义:

从当前位置单步执行3条指令;

Ø命令:

T=0含义:

从0地址单步执行1条指令;

Ø命令:

T=42含义:

从4地址单步执行2条指令;

(8)退出命令Q

格式:

Q

功能:

退出DEBUG,返回到操作系统。

三、PC机汇编语言程序设计实验步骤

⑴编辑源程序文件

使用EDIT文本编辑器编辑源文件,键入

EDIT<源文件名.ASM>

或EDIT

但使用后者时应注意将文件保存为.ASM文件。

⑵汇编连接源程序文件

ML<源文件名.ASM>

如果源程序没有错误,则自动生成.OBJ文件和.EXE可执行文件。

若源程序有语法错误时,会出现错误信息提示,需回到编辑状态下修改源程序后重新汇编。

⑶运行程序

经过汇编、连接后生成的.EXE文件,可直接运行,只要键入相应的文件名即可。

⑷调试程序:

使用DEBUG调试前面生成的可执行的.EXE文件。

各种DEBUG命令如前所述。

四、实验报告书写要求

⑴使用专用的实验报告纸,每个实验一份,字迹工整,内容清晰,注意填写必要的信息(如:

姓名、学号、班级、辅导教师、同实验者);

⑵填写实验题目、实验目的等;实验步骤中要求列出当次实验的过程及各种数据输入输出的情况;汇编语言程序设计部分还要写出完整的源程序,以及上机调试过程中遇到的问题和解决方法。

预备实验一DEBUG命令练习

实验目的

1、熟悉汇编语言程序的编写、汇编、运行的一般过程;

2、掌握常用的DEBUG命令,并可应用于汇编语言程序调试过程中。

实验内容

1、使用给定程序练习汇编语言程序的编辑、汇编、执行、调试的过程;

2、在DEBUG状态下,练习常用的DEBUG命令调试给定程序。

实验学时

本实验内容共用4学时,分两次实验完成。

实验步骤

1、汇编语言程序的编辑、汇编、执行练习

(1)建立汇编语言程序源文件

使用DOS或Windows下的任何文本编辑器来建立汇编语言程序源文件,建议使用记事本,文件后缀名应保存为“.asm”(请注意不要隐藏已知后缀名)。

将如下程序代码保存为“test.asm”的源文件。

程序功能:

在屏幕上显示CHAR变量所定义的字符。

程序代码:

DATASEGMENT

CHARDB‘F’

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDL,CHAR

MOVAH,2

INT21H

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

(2)汇编源程序,生成可执行文件

在保证工作目录下存在ml.exe文件和link.exe文件时,可直接对汇编语言源程序进行汇编连接,使用的命令如下(以test.asm文件名为例):

mltest.asm

若源程序无语法和逻辑错误,即可汇编连接成功,同时生成目标文件test.obj和可执行文件test.exe。

当源程序中存在语法错误时,汇编连接不会进行。

若工作目录下存在ml.err文件,则会显示包含错误存在行的提示信息,程序员可以依次来判断错误所在。

图1test.asm文件的汇编过程

注意:

该命令中源文件的后缀名一定不可省去,否则会提示无法找到源文件。

本程序中常出现的错误:

①第2行出错:

源程序第2行中的“CHARDB‘F’”单引号改为英文状态,如图2中的第一行错误“invalidcharacterinfile”;该错误会导致第三行的错误“undefinedsymbol”,即CHAR定义语句写错,导致程序中使用CHAR变量时无法找到。

②第11行出错:

源程序第11行中的“MOVAX,4C00H”,将数字“00”写成了字母“oo”;该错误会导致如图2中的第二行错误“nondigitinnumber”,即该使用数值中没有找到数字。

③找不到源文件:

源文件不在当前操作的目录下;或者文件名用错了。

图2错误信息

(3)执行程序,查看结果

在DOS命令行下,运行生成的可执行文件,命令为:

test.exe

该命令中,文件的后缀名可省去。

若程序有输入输出内容,则会在DOS命令行下看到结果。

若程序没有输入输出内容,则只能进入DEBUG状态下查看程序的运行结果。

2、DEBUG命令练习

将上面生成的可执行文件test.exe文件调入DEBUG进行调试,使用的命令是:

debugtest.exe

注意,这里调入的是可执行文件,后缀名必须加。

进入DEBUG下,命令提示符是“-”,可以使用各种DEBUG命令调试。

这里建议使用以下命令查看,注意以下命令是进入DEBUG后连续执行的结果,单独使用可能无法得到预期效果。

(1)反汇编命令U

当调入程序文件后,直接使用无参数的U命令可从第一条指令开始查看当前的程序代码。

屏幕显示的内容是:

默认从第一行代码开始显示,共反汇编32个单元的指令(指令条数依据指令长度而不同,以整条指令为单位)。

请注意查看DEBUG状态下的指令与源文件中的指令有何不同。

(2)寄存器查看命令R

直接使用无参的R命令可查看当前各寄存器状态,由于程序还未执行,可以看到寄存器的状态为初始的随机值。

请注意当前CS:

IP寄存器的内容与上一步U命令看到的指令地址是一致的,但DS、ES等段寄存器则为初始的随机值。

(3)查看存储单元命令D

直接使用无参数的D命令,显示存储单元内容。

应注意区分的是:

当前查看到的是从DS:

0地址开始的连续128个单位的数据,并不是当前程序的数据段数据。

(4)单步执行命令T

从程序开始单步执行程序的前两条指令,使用的命令格式为:

T2

执行完前两条指令即返回,显示当前的寄存器状态,请注意查看当前的CS、IP寄存器状态与执行指令前的差别,请试着解释这两个寄存器的含义。

注意:

INT指令不可单步执行,需使用G命令连续执行。

(5)查看存储单元命令D

使用带参数的D命令,显示从有效地址为0的存储单元开始的连续128个单元中的数据。

在此查看存储单元地址、单元内容、以及对应的字符显示。

命令为:

D0

请注意该D命令显示的内容与上一个D命令显示的单元地址是否相同,为什么?

(6)反汇编命令U

直接使用反汇编命令U,会接着上次T命令执行的位置05处开始反汇编显示指令。

(7)断点/连续执行命令G

使用断点执行的功能,从当前位置执行到显示指令结束,命令为:

G0D

程序执行,可在屏幕上看到“F”字符的显示。

注意,该命令中的“0D”是断点地址,即指令“MOVAX,4C00H”的保存位置,该命令会将该位置之前的所有指令执行完毕。

断点地址必须是U命令可见的地址。

(8)修改存储单元内容命令E

使用E命令将CHAR变量中的字符修改为“M”,命令为:

E0‘M’

或者使用命令

E0

在提示下输入M的ASCII码4DH。

(9)查看存储单元内容命令D

使用D命令查看所修改的内容,命令为:

D0L1

(10)连续执行命令G

从第一条指令开始重新执行程序,使用G命令:

G=010

指定程序执行的区间,在屏幕上可以看到“M”字符的显示。

(11)汇编命令A

在DEBUG下修改汇编语言程序,使用A命令:

A5

在给定的单元中输入指令“MOVDL,39”,两次回车,返回到DEBUG提示符下。

(12)连续执行命令G

重新执行程序,使用G命令:

G=0

指定程序执行的区间,在屏幕上可以看到“9”字符的显示,同时显示“Programterminatednormally”的提示信息,表示程序执行结束。

(13)退出命令Q

执行Q命令,即可从DEBUG状态下退出,返回DOS系统。

思考问题

1.DEBUG状态下如何观察源程序?

和文本编辑方式下的源程序有哪些区别?

2.试解释以上第2步中各DEBUG命令的含义。

3.若要将程序中的第三条汇编指令换成“MOVDL,61H”,则更换该指令的DEBUG命令应为什么?

更换后程序的执行结果是什么?

实验报告要求

本次实验不写实验报告。

练习

尝试按上面的方法调试该程序。

程序功能:

从键盘上输入一个字符串,保存于数据段中,分别显示该字符串的长度和字符串中第二个字符。

程序代码:

DATASEGMENT

INMESSDB'PLEASEINPUTASTRING(LENGTH<9):

$'

LENMESSDB10,13,'THELENGTHOFTHESTRINGIS:

$'

CHARMESSDB10,13,'THESECONDCHAROFTHESTRINGIS:

$'

INSTRINGDB10,?

10DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,INMESS;①显示提示信息

MOVAH,09H

INT21H

LEADX,INSTRING;②输入字符串,保存于INSTRING

MOVAH,0AH

INT21H

LEADX,LENMESS;③显示提示信息

MOVAH,09H

INT21H

LEABX,INSTRING;④获取输入字符串的长度值,并显示

INCBX

MOVDL,[BX]

ADDDL,30H

MOVAH,02H

INT21H

LEADX,CHARMESS;⑤显示提示信息

MOVAH,09H

INT21H

MOVDL,[BX+2];⑥显示字符串中的第二个字符

MOVAH,02H

INT21H

MOVAX,4C00H;⑦程序返回

INT21H

CODEENDS

ENDSTART

调试内容:

(1)将生成的可执行文件调入DEBUG,观察各寄存器的内容;

(2)断点执行到指令①的位置,观察各寄存器的变化情况、数据段中定义的各字符串INMESS、LENMESS、CHARMESS、INSTRING的位置;

(3)断点执行到指令②的位置,观察程序执行的结果;

(4)断点执行到指令③的位置,从键盘输入字符串,返回后观察输入字符串的保存位置;

(5)断点执行到指令④的位置,观察程序执行的结果;

(6)分别单步执行指令④开始的4条指令,试观察每条指令执行的结果;

(7)断点执行到指令⑤的位置,观察程序执行的结果;

(8)断点执行到指令⑥的位置,观察程序执行的结果;

(9)断点执行到指令⑦的位置,观察程序执行的结果;

预备实验二预备知识练习

实验目的

1、熟悉各种操作数的寻址方式,并能在DEBUG环境中查看各操作数;

2、熟悉8086指令系统中的各类指令的用法和功能,为以后的程序编写打下基础。

实验内容

1、使用给定程序练习汇编语言程序的编辑、汇编、执行、调试的过程;

2、在DEBUG状态下,练习常用的DEBUG命令调试给定程序。

实验学时

本实验内容共用6学时,分三次实验完成。

实验步骤

1、寻址方式练习

(1)在DEBUG命令行下,按以下步骤完成操作。

(A)使用e命令修改存储地址以150、200为首的6个单元的内容:

-e150

****:

0150**.00**.01

-e200

****:

0200**.10**.20**.30**.40

注意:

带下划线的部分是需要输入的内容。

(B)使用查看命令d,查看上步所修改的存储单元的内容(注意对应的段地址):

-d150L2

-d200L4

(C)使用汇编命令a,输入以下指令序列:

-a100

****:

0100movax,cs

****:

0102movds,ax

****:

0104movbx,100

****:

0107movax,[150]

****:

010Aaddbx,ax

****:

010Cmoval,[bx]

****:

010Eaddal,[bx+1]

****:

0111movsi,2

****:

0114addal,[bx+si]

****:

0116movah,0

****:

0118movch,0

****:

011Amovcl,[bx+si+1]

****:

011Daddax,cx

(D)使用反汇编命令u,查看上步输入的汇编语言程序(注意对应的段地址):

-u100

(E)使用单步执行命令t执行该指令序列,查看每一步执行的结果,并记录。

(2)使用适当的DEBUG命令,按以下步骤完成操作。

(A)修改以下寄存器的值:

(DS)=1000H,(ES)=2000H,(SI)=1FEH

(B)将从存储单元1000H:

01FEH开始的连续四个单元内容修改为:

11H、22H、33H、44H;将从存储单元2000H:

01FEH开始的连续四个单元内容修改为:

12H、34H、56H、78H;

(C)输入汇编指令:

MOVAX,DS

MOVBX,[SI+2]

MOVCX,[BX]

ES:

MOVDX,[SI]

(D)指出以上各指令中源操作数的寻址方式,逻辑地址,并使用相关的DEBUG查看源操作数的值;

(3)在Debug命令行下,完成以下操作。

(A)将字数据2345H存放到地址为1200H:

100H单元中;

(B)使用适当的DEBUG命令,采用三种不同的逻辑地址形式查看这个字数据;

(C)选择不同的寻址方式,使用MOV指令将这个字数据送入AX寄存器中;要求至少采用3种不同的寻址方式。

2、操作符与表达式练习

(1)已知数据段定义如下,请验证以下各指令的正误,并指出错误原因,或给出指令执行结果。

DATASEGMENT

WordVardw2dup(?

ByteVardb?

DATAENDS

验证指令:

①MOVbyteptrES:

WordVar[BX],100

②M

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

当前位置:首页 > 工作范文 > 行政公文

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

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