《汇编语言》实验指导书V0918.docx

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

《汇编语言》实验指导书V0918.docx

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

《汇编语言》实验指导书V0918.docx

《汇编语言》实验指导书V0918

 

《汇编语言》

实验指导书

 

教师:

关玉蓉

班级:

学期:

版本:

 

黄冈师范学院计算机学院

2014年9月15日

《微机原理与汇编语言》实验课的性质、目的及基本要求

《微机原理与汇编语言》是计算机科学与技术专业本科生学习其他课程(如接口技术、单片机等)的专业基础课程,因此是计算机类专业学生的必修课,该课程在学生的计算机专业知识结构中占有重要的地位。

本实验课的目的是加强学生《微机原理与汇编语言》的实践,使学生熟悉如何使用DEBUG调试程序,掌握汇编语言程序设计的基本方法和技术,并能用汇编语言进行简单的软件开发。

通过汇编语言程序的设计和调试,使学生从根本上认识、了解计算机的内部工作原理,深入体会、理解计算机如何实现各种复杂的运算与操作,掌握运用汇编语言解决有关硬件问题、不同语言环境的接口问题以及充分利用系统资源优化代码的基本方法,打下较扎实的系统软件、应用软件的程序设计基础,培养软件研制的基本技能。

目录

实验一调试工具的使用方法1

实验二汇编语言上机过程6

实验三选择与循环程序设计13

实验四子程序设计5

实验五中断与I/O程序设计10

实验六VC++与汇编语言的混合编程14

附录一8088汇编速查手册18

附录二常用的部分系统功能调用和BIOS中断调用21

附录三汇编语言常用出错信息26

实验一调试工具的使用方法

1.实验目的

掌握调试工具DEBUG的使用方法,理解汇编指令、存储单元和寄存器等有关概念,能够对简单的汇编语言程序进行调试。

2.实验内容

(1)学习调试工具DEBUG的使用方法,熟悉DEBUG常用命令的功能和用法。

(2)利用DEBUG调试简单的汇编语言程序,体会汇编指令的功能、寄存器的作用、存储单元地址与内容的概念和作用、以及程序的执行过程。

3.实验要求

(1)掌握DEBUG的常用命令和基本的程序调试方法

(2)熟悉和掌握指令系统常用指令的功能和用法,能熟练运用DEBUG调试工具调试简单的程序,并初步掌握使用DOS系统功能调用的方法。

4.重点与难点

存储器和寄存器的概念、各寄存器的用途、常用指令的功能和用法、用DEBUG调试程序的方法。

5.实验结果验收

熟练运用DEBUG调试工具完成本实验6.2节要求的程序设计和调试

6.实验指导

6.1调试工具DEBUG简介

DEBUG是DOS操作系统为汇编语言程序设计者和系统管理员提供的一个通用调试工具,利用DEBUG可以读写、传送、比较、查找和显示存储器单元内容,设置程序起始执行地址或断点,执行程序或分段执行程序,跟踪程序执行,显示处理器状态,汇编或反汇编程序等。

用DEBUG编程简单、方便和直观,可以直接查看程序执行情况,便于熟悉和理解指令,掌握基本编程技巧。

DEBUG只使用十六进制表示数据(十六进制数后不加“H”),屏幕的显示数据形式如下:

1400:

010024656E64730D0A20-20636F6465202024*ends..code*

1400:

01107365676D656E740D-0A20202020202024segment..*

1400:

01702461782c300D0A09-2020202070757368*ax,0push

屏幕每行显示内容分为三部分,一行共显示十六个字节单元的内容。

第一部分是本行所显示的16个字节数据在存储器中的起始存放地址;第二部分是以十六进制显示的16个字节数据;第三部分是将本行所显示字节数据看作ASCII码时显示的字符,若某字节数据对应不可显示的ASCII码,则显示一个“.”字符代替该字节数据的显示字符。

DEBUG只有十几条单字母命令,功能强且易掌握,常用DEBUG命令如下:

1)DEBUG的进入和退出

进入DEBUG时,如果要同时装入某程序,键入下面的命令:

H:

>DEBUG<文件名>[<参数>]

其中文件名指定要装入的程序目标码文件,其扩展名可以是.COM或.EXE。

<参数>是由被装入程序接收的参数。

此外,也可以用下面的方式进入DEBUG:

H:

>DEBUG

-

“-”是DEBUG的命令提示符,表明已进入DEBUG状态。

在“-”提示符之后,可以键入DEBUG命令。

退出DEBUG时,键入如下命令从DEBUG状态返回DOS:

-Q

2)汇编与反汇编命令

汇编命令A和反汇编命令U是常使用的DEBUG命令。

①汇编命令A

格式:

A[<起始地址>]

功能:

逐行汇编程序,主要用于小段程序的汇编。

说明:

使用A命令汇编程序,不允许程序中出现标号和伪指令,但MS-DOS的DEBUG允许使用DB和DW这两条伪指令。

如果未给出起始地址,汇编后的程序代码从指令指针寄存器IP的值指定的地址开始存放。

按两次回车键可退出汇编命令A的状态。

例1-1汇编一段程序,该程序的功能是在屏幕上输出一个大写字母A。

-A100

1141:

0100MOVDL,41

1141:

0102MOVAH,02

1141:

0104INT21

1141:

0106INT20

②反汇编命令U

格式:

U[<地址范围>]

功能:

在指定的地址范围内,将二进制机器指令逐条翻译为汇编语言符号指令。

例1-2将例1-1中汇编的程序进行反汇编

-U100107

1141:

0100B241MOVDL,41

1141:

0102B402MOVAH,02

1141:

0104CD21INT21

1141:

0106CD20INT20

3)执行程序命令

在DEBUG下,可以完整地执行程序、分段执行程序或单步执行程序。

①执行程序命令G

格式:

G[=<程序起始地址>][<断点>…]

功能:

完整地或分段执行程序。

说明:

G命令可以从头至尾完整地执行程序,如果G命令带有有断点参数,则执行到断点地址时暂停并显示当前各寄存器状态,断点最多允许设置100个。

程序正常结束时显示“Programterminatednormally”。

例1-3执行例1-1中汇编的程序。

-G=100

A

Programterminatednormally

②跟踪执行命令P和T

格式:

P[=<地址>][<跟踪条数>]

T[=<地址>][<跟踪条数>]

功能:

跟踪命令P和T可以逐条跟踪指令的执行,以便调试程序。

说明:

每条指令执行后都将显示各寄存器的当前值。

P命令与T命令的差别是,P命令按程序书写的指令为单位,一次跟踪完一条书写指令(执行一组相关的指令),而T命令按存储单元中存放的指令为单位,一次跟踪一条指令的执行。

例1-4用P命令跟踪例1-1中的程序。

设程序执行前的各寄存器初值如下,然后开始用P命令跟踪例1-1程序:

AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=1141ES=1141SS=1141CS=1141IP=0100NVUPEIPLNZNAPONC

1141:

0100B241MOVDL,41

-P=100

AX=0000BX=0000CX=0000DX=0041SP=FFEEBP=0000SI=0000DI=0000

DS=1141ES=1141SS=1141CS=1141IP=0102NVUPEIPLNZNAPONC

1141:

0102B402MOVAH,02

-P

AX=0200BX=0000CX=0000DX=0041SP=FFEEBP=0000SI=0000DI=0000

DS=1141ES=1141SS=1141CS=1141IP=0104NVUPEIPLNZNAPONC

1141:

0104CD21INT21

-P

A

AX=0241BX=0000CX=0000DX=0041SP=FFEEBP=0000SI=0000DI=0000

DS=1141ES=1141SS=1141CS=1141IP=0106NVUPEIPLNZNAPONC

1141:

0106CD20INT20

-P

Programterminatednormally

用P命令只需跟踪执行4次,程序就执行完毕。

如果用T命令逐条指令跟踪执行,则将跟踪进入DOS功能调用的软中断服务程序中。

4)显示寄存器命令R

格式:

R[<寄存器>]

功能:

显示或修改寄存器内容。

说明:

当R命令后面不指定寄存器时,显示所有寄存器的内容。

例1-5显示所有寄存器内容

-R

AX=0100XB=0000CX=2000DX=00000SP=FFEEBP=0000SI=0000DI=0000

DS=07E1ES=07E1SS=07E1CS=07E1IP=0114NVUPDIPLNZNAPONC

例1-6修改寄存器内容

要修改某寄存器内容,可在R命令后键入寄存器名,DEBUG将显示出这个寄存器的值,然后键入新值就可修改该寄存器内容。

例如修改AX寄存器的内容:

-RAX

AX4500

:

3000

用RF命令可显示和修改标志寄存器FR中的标志位,无论修改哪一位标志位,只需要键入该标志位的表示符号(各标志位的符号表示如表1.1所示),并且标志位值的键入顺序可任意。

例1-7修改FR寄存器的零标志位和进位标志位。

-RF

NVUPEIPLZRNAPECY-NZNC(修改零标志和进位标志)

-RF

NVUPEIPLNZNAPENC-(显示修改结果)

表1.1标志寄存器各标志位符号及意义

标志位

符号表示

=1

=0

OF

溢出(是/否)

OV

NV

DF

方向(减/增)

DN

UP

IF

中断(开/关)

EI

DI

SF

符号(负/正)

NG

PL

ZF

零(是/否)

ZR

NZ

AF

辅助进位(是/否)

AC

NA

PF

奇偶(偶/奇)

PE

PO

CF

进位(是/否)

CY

NC

5)存储器单元访问命令

①显示存储器单元命令D

格式:

D[<地址范围>]

功能:

显示指定地址范围内的存储区数据,包括十六进制数据形式及其对应的ASCII码字符显示。

例1-8显示110H到116H存储器单元的内容。

-D110116

1540:

01107365676D656E74segment

②写存储器单元命令E

格式:

E<地址>[<字符串>]

功能:

逐个修改指定单元内容或将字节串写入指定的一组连续单元。

例1-9将字节串string写入以142H为起始地址的存储器区。

-E142string

例1-10逐个单元向彩显视频缓冲区写入41H、42H、41H、42H,彩显视频缓冲区的段地址为B800H,数据写入后立即显示出大写的ABAB。

-EB800:

70

B800:

007030.4107.0030.4207.0030.4107.f030.4207.f0

B800:

007820.

注意,“.”前为存储器单元原内容,“.”后为键入的数据,按空格键继续修改下一个存储器单元。

例中前两个AB为正常显示,后两个AB为反相、闪烁显示。

③填充命令F

格式:

F<地址范围><要填入的字节或字节串>

功能:

在指定地址范围内写入数据。

例1-11联用R命令和F命令在彩显视频缓冲区中写入一串小写字母a。

-RDS(修改DS,使DS指向彩显缓冲区B8000H)

DS0000

:

B800

-F0000005061(在0到50H单元内填满a)

6)其他命令

除以上常用命令外,DEBUG还提供了存储区数据比较命令C、数据查找命令S、数据移动命令M和十六进制数运算命令H等。

表1.2列出了DEBUG的全部命令以便于查阅。

表1.2DEBUG命令表

命令及其功能

格式

A(Assemble)汇编源程序

A[<地址>]

U(Unassemble)对二进制指令代码进行反汇编

U[<地址范围>]

T(Trace)跟踪执行程序并显示寄存器内容

T[=<地址>][<跟踪条数>]

P(Proceed)跟踪执行一组相关的指令

P[=<地址>][<跟踪条数>]

D(Dump)显示存储区数据

D[<地址>]或D[<地址范围>]

E(Enter)修改存储区数据

E<地址>[<字符串>]

F(Fill)将成组数据填入存储区

F<地址范围><要填入的字节或字节串>

G(Go)运行程序

G[=<起始地址>][<断点地址>…]

R(Register)显示和修改寄存器内容

R[<寄存器>]

N(Name)定义文件名

N<文件名>[<文件名>…]

L(Load)装入文件或磁盘扇区

L[<地址>][<盘符><相对扇区号><扇区数>]

W(Write)写文件或写磁盘扇区

W[<地址>[<盘符><相对扇区号><扇区数>]]

M(Move)传送存储区数据块

M<源地址范围><目的地址>

I(Input)读/显示端口

I<端口号>

O(Output)输出数据到端口

O<端口号><字节>

H(Hexarithmetic)十六进制加减法运算

H<数值><数值>

C(Compare)比较存储区数据

C<源地址范围><目的地址>

S(Search)检索字节或字符串

S<地址范围><要检索的字节或字节串>

Q(Quit)退出DEBUG

Q

6.2实验题

(1)下面的例子可用于调试程序的实验,并且作为几个常用DOS系统功能调用的示范。

①将大写字母A转换为小写字母a

-A200

MOVDL,41;A->DL

ORDL,20;A->a

MOVAH,2;功能号->AH

INT21;调用DOS功能调用2号功能,显示一个字符

INT20;退出程序执行,返回DOS

-G=200

思考并尝试修改程序,实现如下功能:

将大写字母B转换为小写字母b。

②从键盘输入一个字符并回显

-A220

MOVAH,1;功能号->AH

INT21;调用DOS功能调用1号功能,从键盘接收一个字符

MOVDL,AL;将接收的字符送DL,准备显示

MOVAH,2;功能号->AH

INT21;调用DOS功能调用2号功能,显示一个字符

INT20;退出程序执行,返回DOS

-G=220

③显示字符串

-E120‘Howdoyoudo?

$’

-A100

MOVDX,120;待显示的字符串地址->DX

MOVAH,9;功能号->AH

INT21;调用DOS功能调用9号功能,显示一个字符串

INT20;退出程序执行,返回DOS

-G=100

思考并尝试修改程序:

如果将字符串存放在300H开始的存储区,应该怎样修改程序?

(2)从BX所指的内存单元开始连续存放着两个字数据(被减数和减数),按寄存器间接寻址方式写出指令序列,取得被减数和减数,求两数之差,并将差存放于减数之后。

要求计算:

①3580H-3000H②3-5

提示:

先用DEBUG的E命令将被减数和减数写入内存某一块存储区(例如以200H为起始地址的存储区),然后在A命令状态下写程序,将数据存储区地址(200H)送入BX寄存器,利用寄存器间接寻址方式访问存储单元中的被减数和减数,再计算差和存放差。

思考并动手尝试:

如何查看程序执行结果?

(3)要求使用串操作指令编写一程序段,先将以400H为起始地址的存储区(40个字节单元)初始化为空格,然后将以500H为起始地址的存储区中的15个字符,传送到以400H为起始地址的存储区中。

(4)利用DEBUG的调试功能,体会、熟悉和掌握指令系统常用指令的使用方法及功能。

实验二汇编语言上机过程

1.实验目的

综合应用指令与伪指令编写简单完整的宏汇编语言程序,掌握常用的运算符、伪指令及宏汇编语言程序的结构,理解内存分段管理的方法和原理,熟悉调试宏汇编语言程序的上机过程及方法,掌握基本的循环程序设计方法。

2.实验内容

使用汇编程序ML(或MASM)、连接程序LINK及DEBUG调试简单的宏汇编语言程序,综合应用指令完成基本的循环程序设计。

3.实验要求

综合应用指令与伪指令编写简单完整的宏汇编语言程序,并熟悉汇编、连接及调试的方法和过程,完成实现简单功能的循环程序。

4.重点

掌握常用运算符和伪指令的功能与用法,能正确地编写分段结构的宏汇编语言程序。

5.实验结果验收

(1)编写四段结构和二段结构的宏汇编语言程序并调试成功

(2)编写具有一定实用功能的循环程序并输出程序执行结果

6.实验指导

6.1上机步骤

编辑、汇编、连接、运行汇编语言程序的步骤如下:

1)编辑源程序文件

用EDIT或者任何一种文本编辑工具(如UltraEdit32等)建立源程序文件,注意汇编语言程序源文件扩展名必须是“.ASM”。

例如,用EDIT建立源程序文件FILE.ASM的命令如下:

H:

>EDITFILE.ASM

执行上述命令将出现一个编辑窗口,在此窗口内进行源程序编辑。

按“Alt”键可以下拉出菜单选择需要的操作功能。

按热键“X”,再按“Enter”键,将保存源文件并退出EDIT编辑窗口。

2)汇编源程序

①用MASM5.X版汇编程序进行汇编

H:

>MASMFILE

Microsoft(R)MacroAssemblerVersion5.01

Copyright(C)MicrosoftCorp1981-1985,1987.Allrightreserved.

Objectfilename[FILE.OBJ]:

SourceListing[NUL.LST]:

crossreference[NUL.CRF]:

0WarningErrors

0SeverErrors

②用MASM6.X版汇编程序进行汇编

H:

>ML/cFILE.ASM(只产生目标文件,不进行连接)

H:

>MLFILE(产生目标文件并自动进行连接,产生可执行文件)

汇编无错后,可进行目标文件的连接。

2)连接

H:

>LINKFILE

Microsoft(R)OverlayLinkerVersion5.03

Copyright(C)MicrosoftCorp1983-1987.Allrightreserved.

RunFile[FILE.EXE]:

ListFile[FILE.MAP]:

Libraries[.LIB]:

DefinitionsFile[NUL.DEF]:

3)运行程序

H:

>FILE

6.2四段结构的宏汇编语言程序示例

(1)完整的段定义

例2-1下面是一个简单的汇编语言源程序,该程序以完整的段定义格式定义了数据段、附加段、堆栈段和代码段,功能是完成字符串传送,将40个星号“*”从数据段传送到附加段。

datasegment;定义数据段

sbufferdb40dup(*)

dataends;数据段结束

extrasegment;定义附加段

dbufferdb40dup(?

extraends;附加段结束

stacksegmentparastack‘stack’;定义堆栈段

db100dup(0)

stackends;堆栈段结束

codesegment;定义代码段

mainprocfar;定义主过程开始

assumecs:

code,ds:

data,es:

extra,ss:

stack

start:

movax,data;设置数据段地址,初始化DS段寄存器

movds,ax

movax,extra;设置附加段地址,初始化ES段寄存器

moves,ax

leasi,sbuffer;源字符串存储区首址送SI寄存器

leadi,dbuffer;目的存储区首址送DI寄存器

cld;设置方向标志(DF=0)

movcx,40;源字符串长度送CX寄存器

repmovsb;字符串传送

movax,4c00h;返回DOS

int21h

mainendp;主过程结束

codeends;代码段结束

endstart;源程序结束

(2)简化的段定义

例2-2下面是例2-1源程序的简化段定义格式。

.modelsmall;定义存储模式

.data;定义数据段

sbufferdb40dup(*)

.data?

;定义data?

数据段

dbufferdb40dup(?

.stack100;定义堆栈段(100字节)

.code;定义代码段

.startup;定义程序起始点

movax,@data;设置附加段地址,初始化ES段寄存器

moves,ax

leasi,sbuffer;源字符串存储区首址送SI寄存器

leadi,dbuffer;目的存储区首址送DI寄存器

cld;设置方向标志(DF=0)

movcx,40;源字符串长度送CX寄存器

repmovsb;字符串传送

.exit0;返回DOS

end;源程序结束

(3)汇编(同时产生列表文件)、连接并运行

将上述简化段定义源程序建立为源文件stars40.asm后,汇编命令如下:

H:

>ML/c/Fl/Sgstars40.asm

上述命令将产生目标文件stars40.obj和列表文件stars40.lst。

其中选项/c要求只汇编不连接,选项/Fl要求产生列表文件,选项/Sg要求在列表文件中列出由汇编程序根据伪指令所产生的机器指令。

对stars40.obj文件进行连接,产生可执行文件stars40.exe,连接命令如下:

H:

>LINKstars40

运行可执行文件stars40.exe,命令如下:

H:

>stars40

(4)用DEBUG调试和分析stars40.asm程序

①进入DEBUG时装入stars40.exe程序,如图2.1所示,执行命令:

debugstars40.exe。

图2.1进入DEBUG并装入stars

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

当前位置:首页 > 党团工作 > 党团建设

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

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