汇编语言实验指导书.docx

上传人:b****8 文档编号:30645092 上传时间:2023-08-18 格式:DOCX 页数:101 大小:41.92KB
下载 相关 举报
汇编语言实验指导书.docx_第1页
第1页 / 共101页
汇编语言实验指导书.docx_第2页
第2页 / 共101页
汇编语言实验指导书.docx_第3页
第3页 / 共101页
汇编语言实验指导书.docx_第4页
第4页 / 共101页
汇编语言实验指导书.docx_第5页
第5页 / 共101页
点击查看更多>>
下载资源
资源描述

汇编语言实验指导书.docx

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

汇编语言实验指导书.docx

汇编语言实验指导书

汇编语言实验指导书

 

王勇刘辉 

 

上海电力学院计算机系

二00六年四月

目录

实验一DEBUG命令实验1

实验二字符串传递实验7

实验三循环程序实验15

实验四多重循环实验21

实验五分支程序实验28

实验六子程序参数传递实验34

实验七子程序嵌套实验37

实验八中断处理实验42

实验九BIOS中断实验46

实验十建立文件实验50

实验十一读文件实验55

实验十二综合性实验60

实验一DEBUG命令实验

一.实验目的:

掌握DEBUG的基本命令及其功能

二.实验内容:

DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。

1、DEBUG程序的启动

DEBUG的命令格式:

[drive:

][path]DEBUG[d:

][p][filename][.ext][param...]

其中:

drive:

 是指定DEBUG文件的磁盘驱动器标识符,DEBUG是外部DOS命令,所以必须把它从磁盘读入内存。

若未指定,DOS将使用当前默认磁盘驱动器。

path:

 是DOS查找DEBUG文件的一个子目录串表示的路径。

若未指定,DOS将使用当前工作目录。

d:

 是DEBUG将要调试的文件所在的磁盘驱动器。

p:

 是查找DEBUG将要调试的文件所需的子目录路径,若未指定,DOS使用当前目录。

filename[.ext]是DEBUG将要调试的文件名。

param 是将被调试的程序(或文件)的命令行参数。

例如:

在DOS提示符下,可键入命令:

C>debug

DEBUG所完成的初始化动作,假定文件名没有,启动DEBUG:

段寄存器CS、DS、ES和SS置为DEBUG程序后的第一个段。

指令指针寄存器IP置为100H(程序段前缀PSP后的第一个语句)。

堆栈指针SP置为段末或COMMAND.COM暂驻部分的结束地址(其中较小的那个地址)。

其余通用寄存器均置为0,标志寄存器置为下述状态。

NV   UP   EI   PL   NE   NA   PO   NC

如果在DOS提示符下,可键入命令,包含文件名:

C>debugname.exe

段寄存器DS和ES指向PSP。

寄存器BX和CX含有程序长度。

2、DEBUG的主要命令

(1)汇编命令A,格式为:

-A[地址]

该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。

例如:

-a

136B:

0100movax,100

136B:

0103movbx,200

136B:

0106movcx,300136B:

0109movdx,400

136B:

010C

-

(2)反汇编命令U,有两种格式:

1)-U[地址]

该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。

例如:

-u

13C9:

00001EPUSHDS

13C9:

00012BC0SUBAX,AX

13C9:

000350PUSHAX

13C9:

0004B8C313MOVAX,13C3

13C9:

00078ED8MOVDS,AX

13C9:

0009B8C613MOVAX,13C6

13C9:

000C8EC0MOVES,AX

13C9:

000E8D360000LEASI,[0000]

13C9:

00128D3E0000LEADI,[0000]

13C9:

0016FCCLD

13C9:

0017B92800MOVCX,0028

13C9:

001AF3REPZ

13C9:

001BA4MOVSB

13C9:

001CCBRETF

13C9:

001D0000ADD[BX+SI],AL

13C9:

001F0000ADD[BX+SI],AL

2)-U范围

该命令对指定范围的内存单元进行反汇编,

例如:

-u13c9:

000e001b

13C9:

000E8D360000LEASI,[0000]

13C9:

00128D3E0000LEADI,[0000]

13C9:

0016FCCLD

13C9:

0017B92800MOVCX,0028

13C9:

001AF3REPZ

13C9:

001BA4MOVSB

-

(3)运行命令G,格式为:

-G[=地址1][地址2[地址3。

]]

其中地址1规定了运行起始地址,后面的若干地址均为断点地址。

例如:

-g1c

AX=13C6BX=0000CX=0000DX=0000SP=FFFCBP=0000SI=0028DI=0028

DS=13C3ES=13C6SS=13C3CS=13C9IP=001CNVUPEIPLZRNAPENC

13C9:

001CCBRETF

-

(4)追踪命令T,有两种格式:

1)逐条指令追踪:

-T[=地址]

该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。

-t

AX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000

DS=13B3ES=13B3SS=13C3CS=13C9IP=0001NVUPEIPLNZNAPONC

13C9:

00012BC0SUBAX,AX

-

2)多条指令追踪:

-T[=地址][值]

该命令从指定地址起执行n条命令后停下来,n由[值]确定。

-t3

AX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000

DS=13B3ES=13B3SS=13C3CS=13C9IP=0001NVUPEIPLNZNAPONC

13C9:

00012BC0SUBAX,AX

AX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000

DS=13B3ES=13B3SS=13C3CS=13C9IP=0003NVUPEIPLZRNAPENC

13C9:

000350PUSHAX

AX=0000BX=0000CX=007DDX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=13B3ES=13B3SS=13C3CS=13C9IP=0004NVUPEIPLZRNAPENC

13C9:

0004B8C313MOVAX,13C3

(5)显示内存单元内容的命令D,格式为:

-D[地址]或-D[范围]

-dds:

0

13C3:

00006161616161616161-6161616161616161aaaaaaaaaaaaaaaa

13C3:

00106161616161616161-6161616161616161aaaaaaaaaaaaaaaa

13C3:

00206161616161616161-0000000000000000aaaaaaaa........

13C3:

00306161616161616161-6161616161616161aaaaaaaaaaaaaaaa

13C3:

00406161616161616161-6161616161616161aaaaaaaaaaaaaaaa

13C3:

00506161616161616161-0000000000000000aaaaaaaa........

13C3:

00601E2BC050B8C3138E-D8B8C6138EC08D36.+.P...........6

13C3:

007000008D3E0000FCB9-2800F3A4CB000000...>....(.......

-

(6)修改内存单元内容的命令E,它有两种格式:

1)用给定的内容代替指定范围的单元内容:

-E地址内容表

例如:

-E2000:

0100F3“XYZ”8D

其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元2000:

0100到0104的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。

2)逐个单元相继地修改:

-E地址

例如:

-E100:

18E4:

010089.78

此命令是将原100号单元的内容89改为78。

78是程序员键入的。

(7)检查和修改寄存器内容的命令R,它有三种方式:

1)显示CPU内部所有寄存器内容和标志位状态;格式为:

-R

R命令显示中标志位状态的含义如下表所示:

标志名

置位

复位

溢出Overflow(是/否)

OV

NV

方向Direction(减量/增量)

DN

UP

中断Interrupt(允许/屏蔽)

EI

DI

符号Sign(负/正)

NG

PL

零Zero(是/否)

ZR

NZ

辅助进位AuxiliaryCarry(是/否)

AC

NA

奇偶Parity(偶/奇)

PE

PO

进位Carry(是/否)

CY

NC

2)显示和修改某个指定寄存器内容,格式为:

-R寄存器名

例如打入:

-RAX

系统将响应如下:

AXFIF4

表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:

-RBX

BX0369

059F

则BX内容由0369改为059F

3)显示和修改标志位状态,命令格式为:

-RF

系统将给出响应,如

OVDNEINGZRACPECY-

这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。

OVDNEINGZRACPECY-PONZDINV

(8)命名命令N,格式为:

-N文件名

此命令将文件名格式化在CS:

5CH的文件控制块内,以便使用L或W命令把文件装入内存进行调试或者存盘。

(9)装入命令L,它有两种功能:

1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:

-L地址驱动器扇区号扇区数

2)装入指定文件,格式为:

-L[地址]

此命令装入已在CS:

5CH中格式化的文件控制块所指定的文件。

在用L命令前,BX和CX中应包含所读文件的字节数。

(10)写命令W,有两种格式:

1)把数据写入磁盘的指定扇区:

-W地址驱动器扇区号扇区数

2)把数据写入指定文件中:

-W[地址]

此命令把指定内存区域中的数据写入由CS:

5CH处的FCB所规定的文件中。

在用W命令前,BX和CX中应包含要写入文件的字节数。

(11)退出DEBUG命令Q,该命令格式为

Q

它退出DEBUG程序,返回DOS,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。

三.实验要求:

四.实验报告:

写出在DEBUG状态下编写、运行程序的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

 

实验二字符串传递实验

一.实验目的:

掌握字符串的传递过程

二.实验内容:

P146例4.30把40个字母a的字符串从源缓冲区传送到目的缓冲区

DOS命令行格式下,按F5键可以输出上次输入的命令

把DOS命令行格式下运行结果直接写入文件,用重定向符命令>>

C:

\MASM58.ASMMORE>>G:

\MASM\RESULT\58.DOC

 

1、编译:

c:

\masm.asm

2、链接:

c:

\link.obj

3、调试:

c:

\debug.exe

4、运行:

c:

\.exe

1)先用命令U反汇编整个程序,查看每条指令的物理地址,

1、编译:

C:

\masm430.asm

Microsoft(R)MacroAssemblerVersion5.00

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

Sourcelisting[NUL.LST]:

Cross-reference[NUL.CRF]:

50792+450136Bytessymbolspacefree0WarningErrors

0SevereErrors

2、链接:

c:

\link430.obj

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.

RunFile[430.EXE]:

ListFile[NUL.MAP]:

Libraries[.LIB]:

LINK:

warningL4021:

nostacksegment

3、调试:

c:

\debug430.exe

1)、先用命令U反汇编整个程序,查看每条指令的物理地址,其显示内容的含义为:

内存地址指令代码反汇编的程序代码

-u0B75:

00001EPUSHDS

0B75:

00012BC0SUBAX,AX

0B75:

000350PUSHAX

0B75:

0004B86F0BMOVAX,0B6F;数据段的首地址ds0b6f

0B75:

00078ED8MOVDS,AX

0B75:

0009B8720BMOVAX,0B72;附加段的首地址es0b72

0B75:

000C8EC0MOVES,AX

0B75:

000E8D360000LEASI,[0000]

0B75:

00128D3E0000LEADI,[0000]

0B75:

0016FCCLD

0B75:

0017B92800MOVCX,0028

0B75:

001AF3REPZ

0B75:

001BA4MOVSB

0B75:

001CB402MOVAH,02;为了在DOS格式下,程序运行完毕后可以看到运行结果,特地增加了一个输入语句

0B75:

001ECD21INT21

-u

0B75:

0020CBRETF

2)、从上一步结果中找到数据段的首地址0B6F,附加段的首地址0B72,查看里面存储的数据,数据段从首地址0B6F开始40个字节中存储了40个字符a:

-d0b6f:

0000

0B6F:

00006161616161616161-6161616161616161aaaaaaaaaaaaaaaa

0B6F:

00106161616161616161-6161616161616161aaaaaaaaaaaaaaaa

0B6F:

00206161616161616161-0000000000000000aaaaaaaa........

0B6F:

00300000000000000000-0000000000000000................

0B6F:

00400000000000000000-0000000000000000................

0B6F:

00500000000000000000-0000000000000000................

0B6F:

00601E2BC050B86F0B8E-D8B8720B8EC08D36.+.P.o....r....6

0B6F:

007000008D3E0000FCB9-2800F3A4B402CD21...>....(......!

-d0b72:

0000;附加段从首地址0B72开始40个字节中存储了40个空字符

0B72:

00000000000000000000-0000000000000000................

0B72:

00100000000000000000-0000000000000000................

0B72:

00200000000000000000-0000000000000000................

0B72:

00301E2BC050B86F0B8E-D8B8720B8EC08D36.+.P.o....r....6

0B72:

004000008D3E0000FCB9-2800F3A4B402CD21...>....(......!

0B72:

0050CB00000000000000-0000000000000000................

0B72:

00606161616161616161-6161616161616161aaaaaaaaaaaaaaaa

0B72:

00706161616161616161-6161616161616161aaaaaaaaaaaaaaaa

 

3)、从反汇编地址中找到把数据段的首地址0B6F传给寄存器AX的指令地址0B75:

0007,用G命令执行到地址0007,然后用T命令单步执行,看寄存器AX,DS,ES的内容的变化

-G0007

AX=0B6FBX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=0B5FES=0B5FSS=0B6FCS=0B75IP=0007NVUPEIPLZRNAPENC

0B75:

00078ED8MOVDS,AX

-T

AX=0B6FBX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=0B6FES=0B5FSS=0B6FCS=0B75IP=0009NVUPEIPLZRNAPENC

0B75:

0009B8720BMOVAX,0B72

-T

AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=0B6FES=0B5FSS=0B6FCS=0B75IP=000CNVUPEIPLZRNAPENC

0B75:

000C8EC0MOVES,AX

-T

AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=0B6FES=0B72SS=0B6FCS=0B75IP=000ENVUPEIPLZRNAPENC

0B75:

000E8D360000LEASI,[0000]DS:

0000=6161

-T

AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=0B6FES=0B72SS=0B6FCS=0B75IP=0012NVUPEIPLZRNAPENC

0B75:

00128D3E0000LEADI,[0000]DS:

0000=6161

-T

AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=0B6FES=0B72SS=0B6FCS=0B75IP=0016NVUPEIPLZRNAPENC

0B75:

0016FCCLD

4)、让程序执行到传送准备工作完成后的地址0B75:

0016FCCLD,查看源偏移地址SI和目标偏移地址DI的值,以及移动次数存放的寄存器CX,然后用T命令单步执行,看寄存器源地址(DS:

DI)和目标地址(ES:

SI)的内容的变化

-g0016

AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=0B6FES=0B72SS=0B6FCS=0B75IP=0016NVUPEIPLZRNAPENC

0B75:

0016FCCLD

-t

AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=0B6FES=0B72SS=0B6FCS=0B75IP=0017NVUPEIPLZRNAPENC

0B75:

0017B92800MOVCX,0028

-t

AX=0B72BX=0000CX=0028DX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=0B6FES=0B72SS=0B6FCS=0B75IP=001ANVUPEIPLZRNAPENC

0B75:

001AF3REPZ

0B75:

001BA4MOVSB

-t

AX=0B72BX=0000CX=0027DX=0000SP=FFFCBP=0000SI=0001DI=0001

DS=0B6FES=0B72SS=0B6FCS=0B75IP=001ANVUPEIPLZRNAPENC

0B75:

001AF3REPZ

0B75:

001BA4MOVSB

-t

AX=0B72BX=0000CX=0026DX=0000SP=FFFCBP=0000SI=0002DI=0002

DS=0B6FES=0B72SS=0B6FCS=0B75IP=001ANVUPEIPLZRNAPENC

0B75:

001AF3REPZ

0B75:

001BA4MOVSB

-t

AX=0B72BX=0000CX=0025DX=0000SP=FFFCBP=0000SI=0003DI=0003

D

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

当前位置:首页 > 人文社科 > 文化宗教

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

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