汇编语言程序设计实验指导书(2024更新)_第1页
汇编语言程序设计实验指导书(2024更新)_第2页
汇编语言程序设计实验指导书(2024更新)_第3页
汇编语言程序设计实验指导书(2024更新)_第4页
汇编语言程序设计实验指导书(2024更新)_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序设计指导书

禹定臣

去油学院信息工程学院2024.02

目录

试验一调试程序DEBUG及8086指令运用..............3

试验目的:..............................................................................3

内容及步骤:...........................................................................3

试骏报告要求:.........................................................................4

附:DEBUG吩咐详解.....................................................................5

试验二内存操作数及寻址方法..........................21

试险目的:..........................................................................................................................................21

试验内容和步骤:......................................................................21

试验报告要求:........................................................................23

试验三数据串传送和查表程序..........................23

试验目的:.............................................................................23

试脸内容及步骤:......................................................................23

试险报告要求:........................................................................25

试验四屏幕字符显示程序...............................26

试验目的:.............................................................................26

试脸内容及步骤:......................................................................26

试验报告要求:........................................................................27

试验五二进制数显示成十六进制数的屏幕字符显示程序...................................28

试验目的:.............................................................................28

试脸内容及步骤:......................................................................28

试验报告要求;........................................................................29

试验六查表指令及子程序嵌套试验......................29

试骏目的:.............................................................................29

试验内容及步骤:......................................................................29

试脸报告要求:........................................................................32

试验七8255接口电路试验..............................33

试验要求:...........................................................................33

试验目的:...........................................................................33

试脸说明:...........................................................................33

试验电路:.............................................................................33

试骏程序:...........................................................................34

试验一调试程序DEBUG及8086指令运用

试验目的:

通过试验驾驭下列学问:

1、8086指令:MOV,ADD,ADC,SUB,SBB,DAA,XCHG

3、DEBUG吩咐:A,D,E,G,Q,R,T,U,F,H。

4、BCD码,ASCII码及用16进制数表示二进制码的方法。

5、8086寄存器:AX,BX,CX,DX,F,IP。

内容及步骤:

一、DEBUG吩咐运用:

1、打DEBUG进入DEBUG限制,显示提示苻

2s用吩咐F10010F'A'将'A'的ASCH码填入内存。

3、用吩咐D10010F视察内存中的16进制码及屏幕右边的ASCII字符。

4、用吩咐F11011F41重复上二项试验,视察结果并比较。

5、用吩咐E100303132……3F将3OH-3FH写入地址为100起先的内存

单元中,再用D吩咐视察结果,看键入的16进制数是什么字符的ASCII码?

6、用H吩咐检查下列各组16进制数加减结果并和你的手算结果比较:

(1)3411,2211(2)56117811(3)A5,7911(4)1284H,567811(5)A758,347FII

7、用R吩咐检查各寄存器内容,特殊留意AX,BX,CX,DX,IP及标记位中ZF,CF

和AF的内容。

8、用R吩咐将AX,BX内容改写为1050H及23A8H。

二、8086/8088常用指令练习

1、传送指令

1)用A吩咐在内存100H处键入卜.列内容:

MOVAX,1234

MOVBX,5678

XCHGAX,BX

MOVAH,35

MOVAL,48

MOVDX,75AB

XCHGAX,DX

2)用U吩咐检查键入的程序并记录,特殊留意左边的机器码。

3)用T吩咐逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变更状况。并留

意标记位有无变更.

2、加减法指令:

1)用A吩咐在内存100H处键入下列内容:

MOVAH,34

MOVAL,22

ADDAL,AH

SUBAL,78

MOVCX,1284

MOVDX,5678

ADDCX,DX

SUBCX,AX

SUBex,ex

2)用U吩咐检查键入的程序及对应的机器码。

3)用T吩咐逐条运行这些指令,检查并记录有关寄存器及ZF状况。

思索:这次运行还是打入T,行不行?怎么办?用R吩咐检查•下IP的内容。留意T吩咐与IP

的关系。

3、带进位加减法:

1)用A吩咐在内存200H处键入下列内容,并用U吩咐检查:

MOVAll,12

MOVAL,84

MOVCH,56

MOVCL,78

ADDAL,CL

ADCAH,CH

MOVDH,A7

MOVDL,58

SUBDL,7F

SBBDH,34

2)用T吩咐逐条运行这些指令,检查并记录有寄存器及CF内容。

3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。

4、BCD码加减法

1)内容:

MOVAL,58

ADDAL,25

DAA

2)要求:用A吩咐键入,U吩咐检查,T吩咐逐条运行并记录有关寄存器及AF内容。

试验报告要求:

1、16进制数加减法手算结果及试验结果

2、8086/8088常用指令练习部分的逐条运行记录,思索结果及自编程序运行记录(列出

自编程序)。

附:Debug吩咐详解

1、Debug:A(汇编)

干脆将8086/8087/8088记忆码合并到内存。该吩咐从汇编语言语句创建可执

行的机器码。全部数值都是十六进制格式,必需按一到四个字符输入这些数值。

在引用的操作代码(操作码)前指定前缀记忆码。

a[address]

参数address指定键入汇编语言指令的位置。对address运用十六进制值,并健入

不以“h”字符结尾的每个值。假如不指定地址,a将在它上次停止处起先汇编

范例

a吩咐支持全部形式的间接注册吩咐,如下例所示:

addbx,34[bp+2].[si-l]

pop[bp+dij

push[si])

还支持全部操作码同义词,如下例所示:

loopz100

loope100

ja200

jnbe200

对于8087操作码,必需指定wait或fwait前缀,如下例所示:

fwaitfaddst,st(3);thislineassembles

;anfwaitprefix

说明

运用记忆码

段的替代记忆码为cs:、ds:、es:和ss:0远程返回的记忆码是retf。字符串处

理的记忆码必需明确声明字符串大小。例如,运用movsw可以移动16位的字串,

运用mov***(文字因故被系统屏蔽)***(文字因故被系统屏蔽)可以移动8位

字节串。

汇编跳转和调用

汇编程序依据字节替换自动将短、近和远的跳转及调用汇编到目标地址。通

过运用near或far前缀可以替代这样的跳转或调用,如下例所示:

-aO100:0500

()100:0500jmp502;a2-byteshortjump

0100:0502jmpnear505;a3-bytenearjump

0100:0505jmpfar50a;a5-bytefarjump

可以将near前缀缗写为ne。

区分字和字节内存位置

当某个操作数可以引用某个字内存位置或者字节内存位置时,必需用前

缀wordptr或者前缀bytepu•指定数据类型。可接受的缩写分别是w。和by。以

下范例显示两种格式:

decwo[si]

negbyteptr[128]

指定操作数

Debug运用包括在中括号(口)的操作数引用内存地址的习惯用法。这是因为

另一方面Debug不能区分马上操作数和内存地址的操作数。以下范例显示两种

格式:

movax,21;loadAXwith21h

movax,[21];loadAXwiththe

;contentsof

;memorylocation21h

运用伪指令

运用a吩咐供应两个常用的伪指令:db操作码,将字节值干脆汇编到内存,

dw操作码,将字值干脆汇编到内存。以下是两个伪指令的范例:

db1,2,3,4,“THISISANEXAMPLE11

dbTHISISAQUOTATIONMARK:"

db"THISISAQUOTATIONMARK:"

dw1000,2000,3000;'BACH"

2、Debug(转储)

显示肯定范围内存地址的内容。

d[range]

参数

range

指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。有关

有效的range值的信息,请单击“相关主题”列表中的“Debug说明"。假如不

指定range,Debug程序将从以前d吩咐中所指定的地址范围的末尾起先显

示128个字节的内容。

有关显示寄存器内容的信息,请单击“相关主题”列表中的DebugR(寄存

器)。

范例

假定键入以下吩咐:

des:10010f

Debug按以下格式显示范围中的内容:

04BA:0100544F4D0053415759-4552000000000000

TOM.SAWYER......

假如在没有参数的状况下键入d吩咐,Debug按以前范例中所描述的内容来

编排显示格式。显示的每行以比前一行的地址大16个字节(假如是显示40列的

屏幕,则为8个字节)的地址开头。

对于后面键入的每个不带参数的d吩咐,Debug将紧接在最终显示的吩咐后

马上显示字节内容。

假如键入以下吩咐,Debug将从CS:100起先显示20h个字节的内容:

dcs:100l20

假如键入以下吩咐,Debug将显示范围从CS段的100h到115h中全部字节

的内容:

des:100115

说明

当运用d吩咐时,Debug以两个部分显示内存内容:十六进制部分(每个字

节的值都用十六进制格式表示)和ASCII码部分(每个字节的值都用ASCII码

字符表示)。每个非打印字符在显示的ASCII部分由句号(.)表示。每个显示行显

示16字节的内容,第8字节和第9字节之间有一个连字符。每个显示行从16字

节的边界上起先。

3、Debug:E(键入)

将数据输入到内存中指定的地址。

可以按十六进制或ASCII格式键入数据。以前存储在指定位置的任何数据

全部丢失。

eaddress

参数

address

指定输入数据的第一个内存位置。

list

指定要输入到内存的连续字节中的数据。

有关集成记忆码的信息,请单击“相关主题”列表中的DebugA(汇编)。

有关显示内存部分内容的信息,请单击“相关主题”列表中的DebugD(转

储)。

++

范例

假定键入以下吩咐:

ecs:100

Debug按下面的格式显示第一个字节的内容:

04BA:0100EB.

要将该值更改为41,请在插入点键入41,如下所示:

04BA:0100EB.41_

可以用一个e吩质键入连续的字节值。在键入新值后按SPACEBAR(空格

键),而不是按ENTER键。Debug显示卜一个值。在此范例中,假如按三

次SPACEBAR(空格键),Debug将显示下面的值:

04BA:0100EB.4110.00.BC._

要将十六进制值BC更改为42,请在插入点键入42,如下所示:

04BA:0I00EB.4110.00.BC.42_

假定确定值10应当是6F。要订正该值,请按HYPHEN键两次以返回到地

址0101(值10)。Debug显示以下内容:

04BA:0100EB.4110.00.BC.42-

04BA:010200.-

04BA:010110._

在插入点键入6f更改值,如下所示:

04BA:010110.6f_

按ENTER停止e吩咐并返回到Debug提示符下。

以下是字符串项的范例:

eds:l()()"Thisisthetextexample"

该字符串将从DS:100起先填充24个字节。

++

说明

运用address参数

假如在没有指定瓦选的lisl参数的值状况下指定address的值,Debug将显

示地址和内容,在下一行重复地址,并等待您的输入。此时,您可以执行卜.列操

作之一:

•替换字节值U为此,请在当前值后键入新值U假如您键入的值不是有效

的十六进制值,或该值包含两个以上的数字,则Debug不会回显无效或额外的

字符。

­进入下一个字节。为此,请按SPACEBAR(空格键)。要更改该字节中

的值,请在当前值后键入新值。假如按SPACEBAR(空格键)时,移动超过了8位

界限,Debug程序将显示新的一行并在行首显示新地址。

・返回到前一个字节。为此,请按HYPHEN键(-)。可以反复

按HYPHEN键(-)向后移动超过多个字节。在按HYPHEN时,Debug起先新行

并显示当前地址和字节值。

•停止执行e吩咐。为此,请按ENTER键c在任何字节位置都可以

按ENTERo

运用list参数

假如指定list参数的值,随后的e吩咐将运用列表中的值替换现有的字节

值。假如发生错误,将不更改任何字节值。

Lisi值可以是I六进制字节或字符串。运用空格、逗号或制表符来分隔值。

必需将字符串包括在单或双引号中。

++++

4、Debug:F(填充)

运用指定的值填充指定内存区域中的地址。

可以指定十六进制或ASCH格式表示的数据。任何以前存储在指定位置的

数据将会丢失。

frangelist

参数

range

指定要填充内存区域的起始和结束地址,或起始地址和长度。关于有效

的range值的信息,请单击“相关主题”列表中的“Debug说明”。

list

指定要输入的数据。ListnJ以由十六进制数或引号包括起来的字符串组成。

++

范例

假定键入以下吩咐:

f()4ba:10011004245525441

作为响应,Debug运用指定的值填充从04BA:100到O4BA:1FF的内存位置。

Debug重复这五个值直到100h个字节全部填满为止。

++

说明

运用range参数

假如range包含的字节数比list中的数值大,Debug将在list中反复指派值,

直到range中的全部字节全部填充。

假如在range中的任何内存损坏或不存在,Debug将显示错误消息并停

止f吩咐。

运用list参数

假如list包含的数值多于range中的字节数,Debug将忽视list中额外的值。

5、Debug:G(转向)

运行当前在内存中的程序。

g[=address][breakpoints]

参数

=address

指定当前在内存中要起先执行的程序地址。假如不指定address,Windows

2000将从CS:IP寄存器中的当前地址起先执行程序。

breakpoints

指定可以设置为g吩咐的部分的1到1()个临时断点。

有关执行循环、重复的字符串指令、软件中断或子程序的信息,请单击“相

关主题”列表中的DebugP(执行)。

有关执行指令的信息,请单击“相关主题”列表中的DebugT(跟踪)。

范例

假定键入以下吩咐:

gcs:755()

Windows20()0运行当前内存中的程序,直到执行到CS段中的断点地

址7550为止。Debug将显示寄存器的内容和标记的状态并结束g吩咐。

以下吩咐设置两个断点:

gcs:7550,cs:8()00

假如在Debug遇到断点之后再次键入g吩咐,将从在断点之后的指令起先

执行,而不是在通常的起先地址执行。

++

说明

运用address参数

必需在address参数之前运用等号(=)以区分起先地址(address)和断点地址

(breakpoints)o

指定断点

程序在它遇到的第一个断点处停止,而不论您在breakpoint列表的什么位置

键入断点。Debug在每个断点处用中断代码代替原始指令。

当程序到达断点时,Debug将全部断点地址复原到它们的最初指令并显示全

部寄存器的内容、全部标记的状态以及最终执行指令的解码形式。Debug显示的

信息与运用Debugr(寄存器)吩咐并指定断点时所显示的信息相同。

假如不在断点处停止程序,Debug程序将不运用原始指令替换中断代码。

设置断点的限制

可以只在包含8086操作代码(操作码)的第一个字节的地址上设置断点。

假如设置了10个以上的断点,Debug将显示以下信息:

bperror

对用户堆栈指针的要求

用户堆栈指针必需有效且必需有6个字节可用于g吩咐。该吩咐运用iret指

令跳转到正在被测试的程序。Debug设置用户堆栈指针并将用户标记、代码段寄

存器和指令指针压入用户堆栈。(假如用户堆栈无效或太小,操作系统可能会失

败。)Debug在指定的断点处设置中断代码(OCCh)。

重新启动程序

不要在Windows2000显示以下消息后尝试重新启动程序;

Programterminatednormally

要正确地运行程序,必需通过运用Debugn(名称)和1(加载)吩咐重新

加载该程序。

++++

6、Debug:H(十六进制)

对指定的两个参数执行十六进制运算。

hvalue1value2

参数

value1

代表从0到FFFFh范围内的任何十六进制数字。

value2

代表从0到FFFFh范围内其次个十六进制数字。

++

范例

假定键入以下吩咐:

hl9f10a

Debug执行运算并显示以下结果。

02A90095

++

说明

Debug首先将指定的两个参数相加,然后从第一个参数中减去其次个参数。

这些计算的结果显示在一行中:先计算和,然后计算差。

++++

7、Debug:M(移动)

将一个内存块中的内容复制到另一个内存块中。

mrangeaddress

参数

range

指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。

address

指定要将range内容复制到该位置的起始地址。

++

范例

假定键入以卜吩咐:

mcs:l()()11()cs:5()0

Debug首先将CS:11()地址中的内容复制到地址CS:51()中,然后

将CS:1OF地址中的内容复制到CS:5OF中,如此操作直至将CS:1OO地址中的内

容复制到地址CS:5OO中。要查看结果,请运用Debugd(转储)吩咐,并运用m吩

咐指定目标地址。

++

说明

复制操作对现有数据的影响

假如新数据没有写入正在被复制的数据块中的地址,则源数据将保持不变。

但是,假如目标块已经包含数据(就象它在覆盖副本操作中一样),则将改写该数

据。(覆盖复制操作是指那些目标数据块部分内容覆盖原数据块部分内容的操

作。)

执行覆盖复制操作

m吩咐执行目标地址的覆盖复制操作,而不丢失数据。将改写的地址内容首

先复制。因此,假如将较高位地址的数据复制到较低位地址,则复制操作从原块

的最低位地址起先并向最高位地址进行。反之,假如要将数据从低地址复制到高

地址,复制操作从原块的最高地址起先,向最低地址进行。

++++

8、Debug:Q(退出)

停止Debug会话,不保存当前测试的文件。

当您键入q以后,限制返回到Windows2000的吩咐提示符。

参数

该吩咐不带参数。

有关保存文件的信息,请单击“相关主题”列表中的DebugW(写入)。

++++

9、Debug:R(寄存器)

显示或变更一个或多个CPU寄存器的内容。

r[register-namel

参数

假如在没有参数的状况下运用,则r吩咐显示全部寄存器的内容以及寄存器

存储区域中的标记。

register-name

指定要显示其内容的寄存器名。

有关显示内存部分内容的信息,请单击“相关主题”列表中的DebugD(转

储)。

有关反汇编字节的信息,请单击“相关主题”列表中的DebugU(反汇编)。

十十

范例

要查看全部寄存器的内容、全部标记的状态和当前位置的指令解码表,请键

入以下吩咐:

r

假如当前位置是CS:11A,显示外观将类似于以下内容:

AX=OEOOBX=OOFFCX=0007DX=01FFSP=039DBP=OOOOSI=005C

DI=OOOO

DS=04BAES=04BASS=04BACS=04BAIP=OUANVUPDINGNZACPE

NC

04BA:011ACD21INT2I

要只查看标记的状态,请键入以下吩咐:

rf

Debug按以下格式显示信息:

NVUPDINGNZACPENC-_

现在,您可以按随意依次键入一个或多个有效的标记值,其中可以有或没有

空格,如下所示:

nvupdingnzacpenc-pleicy

Debug结束r吩咐并显示Debug提示符。要查看更改,请键入r或许吩咐。

Debug将显示以卜内容:

NVUPEIPLNZACPECY-_

按ENTER返回到Debug提示符。

++

说明

运用r吩咐

假如指定了寄存器名称,Windows2000将显示以十六进制标记表示的寄存

器的16位值,并将冒号显示为提示符。假如要更改包含在寄存器中的值,除非

键入新值并按ENTER键;否则,请按ENTER键返回Debug提示符。

有效寄存器名

以下是regisler・name的有效值:ax、bx、ex、dx、sp>bp>si、di、ds、es、

ss、cs、ip、pc及f。ip和pc都引用指令指针。

假如指定寄存器名称,而不是从前面的列表中指定,Windows2000将显示

以下消息:

brerror

运用f字符而不是寄存器名

假如键入f字符代替寄存器名,Debug将每个标记的当前设置显示为两字母

代码,然后显示Debug提示符。要更改标记的设置,请从下表中键入适当的两

字母代码:

标记名设置清除

溢出ovnv

方向dn(减)up(增)

中断ei(启用)di(禁用)

正负ng(负)pl(正)

零zrnz

协助进位acna

奇偶校验pe(偶校验)po(奇校验)

进位cync

可以按任何依次键入新的标记值。不须要在这些值之间留出空格。要停

止r吩咐,请按ENTER键。任何没有指定新值的标记保持不变。

用r吩咐显示的邮件

假如为标记指定了多个值,Debug将显不以卜消息、:

dferror

假如指定没有在前面的表中列出的标记代码,Debug将显示以下消息:

bferror

在这两种状况下,Debug将忽视全部在无效项目之后指定的设置。

Debug的默认设置

在启动Debug时。,会将段寄存器设置到空闲内存的低端,指令指针设置

为OlOOh,清除全部标记,并且将其余寄存器设置为零,除了被设置

为FFEEh的sp之外。

++++

10、Debug:T(跟踪)

执行一条指令,并显示全部注册的内容、全部标记的状态和所执行指令的解

码形式。

t[=address][numberl

参数

=address

指定Debug启动跟踪指令的地址。假如省略address参数,跟踪将从程序

的CS:IP寄存器所指定的地址起先。有关address参数有效值的信息,请单击“相

关主题”列表中的Debug。

number

指定要跟踪的指令数。该值必需是十六进制数。默认值为1。

有关执行循环、重复的字符串指令、软件中断或子例程的信息,请单击“相

关主题”列表中的DebugP(执行)。

有关执行当前内存中程序的信息,请单击“相关主题”列表中的DebugG(转

向)°

++

范例

要执行一个指令(CS:IP指向的指令),然后显示寄存器的内容、标记的状

态以及指令的解码形式,请键入以下吩咐:

t

假如程序中的指令位于04BA:0UA,Debug口」能显示卜列信息:

AX=()E()()BX=()()FFCX=0007DX=01FFSP=039DBP=()(X)()SI=()()5C

DI=OOOO

DS=04BAES=04BASS=04BACS=04BAIP=011ANVUPDINGNZACPE

NC

04BA:011ACD21INT21

++

说明

跟踪只读内存中的指令

t吩咐运用8086或8()88微处理器的硬件跟踪模式。因此,也可以跟踪存储

在只读内存(ROM)中的指令。

运用地址参数

必需在address参数之前运用等号(=)以便将它与number参数区分。

11、Debug:U(反汇编)

反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码看起

来象已汇编文件的列表。

u[range]

参数

假如在没有参数的状况下运用,则u吩咐分解20h字节(默认值),从前

面u吩咐所显示地址后的第一个地址起先。

range

指定要反汇编代码的起始地址和结束地址,或起始地址和长度。有

关range参数有效值的信息,请单击“相关主题”列表中的Debug。

有关集成记忆码的信息,请单击“相关主题”列表中的DebugA(汇编)。

有关显示内存部分内容的信息,请单击“相关主题”列表中的DebugD(转

储)。

++

范例

要反汇编16(10h)字节,从地址04BA:0100起先,请键入以下吩咐:

u04ba:1001I0

Debug按以下格式显示结果:

04BA:0100206472AND[SI+72],AH

04BA:010369DB69

04BA:01047665JBE016B

04BA:0106207370AND[BP+DI+70],DH

04BA:010965DB65

04BA:010A63DB63

04BA:010B69DB69

04BA:0I0C66DB66

04BA:010D69DB69

04BA:010E63DB63

O4BA:OIOF6lDB61

假如只显示从04BA:0100到04BA:0108特定地址的信息,请键入以下吩咐:

u()4ba:01000108

Debug显示以下内容:

04BA:0100206472AND[SI+72],AH

04BA:010369DB69

04BA:01047665JBE016B

04BA:0106207370AND[BP+DI+70],DH

++++

试验二内存操作数及寻址方法

试验目的:

通过试验驾驭下列学问:

1、8086/8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。

2、8086/8088指令:INC,DEC,LOOP,INT3,INT20H,寄存器SI,DU

3、8086/8088汇编语言伪操作:BYTEPTR,WORDPTR。

4、求累加和程序和多字节加减法程序。

试验内容和步骤:

一、内存操作数及各种寻址方式运用:

内容:

MOVAX,123411

MOV[1000H],AX

MOVBX,1002H

MOVBYTEPTR[BX],20H

MOVDL,39H

INCBX

MOV[BX],DL

DECDL

MOVSI,3

MOV[BX+SI],DL

MOV[BX+SI+1],DL

MOVWORDPTR[BX+SH-2],2846H

步骤:(也可用emu8086)

1)用A吩咐键入上述程序,并用T吩咐逐条运行。

2)每运行一条有关内存操作数的指令,要用【)吩咐检查并记录有关内存单元的内容并注

明是什么寻址方式。

留意D吩咐显示结果中右边的ASCII字符及双字节数存放法。

思索:有关指令中BYTEPTK及WUKDPTK伪操作不加行不行?试一试。

二、求累加和程序:

程序:

MOVBX,1000H

MOVCX,10

SUBAX,AX

LOP:ADDAL,[BX]

ADCAU,0

INCBX

J:LOOPLOP

INT3H;断点中断

步骤:

1)用A吩咐将程序键入到100H起先的内存中,在键入时登记标号LOP和J的实际地址,在键

入LOOP指令时LOP用实际地址值代替。

2)用吩咐、AA将此程序命名为文件AA(文件名可任取)。

3)用R吩咐将BX:CX改为程序长度值(即最终一条指令后面的地址减去开

始地址)

4)用吩咐*100将此程序存到AA命名的磁盘文件中。

5)用吩咐Q退出DEBUG。

6)用吩咐DEBUGAA再次调入DEBUG和文件AA,可用U吩咐检查调入程序。

若调入DEBUG时忘了加AA文件名,可用N吩咐和L吩咐将文件调入。

7)用E吩咐在内存地址1000H处键入16个数字

8)用吩咐G=100J(J用实际地址代替),使程序运行并停在断点J上,检查

AX,BX的值是否符合你的预料值。

9)用T吩咐运行一步,视察程样方向(IP值)和CX值是否与你的估计一样,

若不一样,检查程序是否有错。

10)重复GJ与T,再检查AX是否正确。

11)用G吩咐使程序运行到结束,检查AX值是否正确。

三、多字节加法程序。

程序:

MOVDL1000H

MOVCX:8

MOVSI:2000H

CLC

LOP:MOVAL;[SI]

ADC[DI],AL

INCSI

INCDI

LOOPLOP

INT20H:INT2()H为DOS中断返回』NT3为断点中断(用于DEBUG)

步骤:

1)用吩咐键入此程序

2)用E吩咐在1000H起先处键入一个8字节被加数,在2000H起先处键入一个8字节加数,均

为低字节在前面。

3)。用G吩咐运行此程序,并用D吩咐检查其结果(存放在哪里?),是否正确?

4)将INT20H指令改为INT3,有何区分?若这条指令不加,行不行?试一试。

四。自编程序:

用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放

地址同上题。调试并做记录。

试验报告要求:

1、各项试验结果记录。

2、自编程序原稿及调试后修正稿,写出原稿错在那里。

试验三数据串传送和查表程序

试验目的:

通过试验驾驭下列学问:

1、堆栈、堆栈指示器SP和堆栈操作指令PUSH、POP。

2、段寄存器和物理地址计算。

3、查表法和查表指令XLAT。

4、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP。

5、循环指令ROL、逻辑与指令AND和清方向位指令CLD。

6、伪操作指令DB。

试验内容及步骤:

一、利用查表方法把DX的内容(16进制数)转换成ASCII码:

1、用A吩咐键入下列程序:

MOVBX,1OODH

MOV1)(,200011

MOVCX,4

LOP:PUSHex

MOVCL,4

ROLDX,CL

POPex

MOVAL,DL

ANDAL,OFH

XLAT

CLD

STOSB

LOOPLOP

INT20H

2、用A吩咐在1000H处键入下歹UASCII码并用D吩咐检查之:

DB'0123456789ABCDEF,

用D吩咐检查时留意左边的ASCII码值和右边的字符。

3、用R吩咐给DX送一个四位的16进制数(例7F8EH)«

4、用T吩咐逐条运行这程序到LOOP指令处,视察并记录每次运行结果,特殊是SP和堆栈内

容(用D吩咐检查)

5、用G吩咐将此程序运行到结束,并用D吩咐检查200011处所转换的结果。可留意屏幕右

边的ASCII字符与DX是否一样。

二、数据串搬家程序:

1、用A吩咐键入下列程序:

MOVSI,1OODH

MOVDI,150011

MOVCX,OFH

LOP:MOVAL,[SI]

MOV[DI],AL

INCSI

INC1)1

LOOPLOP

INT2011

2、用A吩咐DB伪指令在1000H键入下列字符串:

*IBM_PCCOMPUTER)

3、用G吩咐运行此程序,并用D吩咐检查FI的地址处的字符与源串是否一样。

4、若此程序中的目的地址改为1002H,再运行此程序,看能不能把1000H起先的

字符串搬到I002H起先的地方去?修改程序以做到这一点。

三、段寄存器概念及字符串传送指令练习:

1、用A吩咐键入下列程序:

MOVSI,0

MOVDI,0

MOVAX,1OODH

MOVDS,AX

MOVAX,1500H

MOVES,AX

MOVCX,OFH

CLD

REPMOVSB

INT20H

2、用A吩咐DB伪指令在1OOOH:OOOOH处键入字符串'IBM_PCCOMPUTER',并用D命检查之

3、用D吩咐检查OFOOH:1OOOH处内容,看是否一样。为什么?

4、用G吩咐运行此程序,检查目的地址1500H:0000H处内容。并登记DS与ES值。

5、修改此程序,使ES与DS为同一值,以削减一条指令,而源物理地址和目的物理地址(是

多少?)仍和原来一样。

试验报告要求:

1、各项试验记录和思索题。

2、要求你修改的程序的清单(修改后)和调试记录。

试验四屏幕字符显示程序

试验目的:

通过试验驾驭下列学问:

1、8086/8088指令:JMP,ROR,XOR,HLTo

2、利用DOS功能调用1NT21H的2号和9号功能进行屏幕显示的方法。

3、干脆向RAM(VRAM)送ASCII码进行屏幕显示的方法。

4、IBM-PC机的ASCII码表及限制字符。

5、吩咐()文件及运用方法。

6、利用"Break退出程序的方法及局限性。

试验内容及步骤:

一、利用INT2109H号功能调用显示字符串。

1、用A吩咐在100H处键入下列程序:

MOVAH,9

MOVDX,110

INT21

INT20

2、用A吩咐在UOH处键入下列字符串的ASCII码:

DB'Thisisabcimple!$,

3、用N吩咐和W吩咐将此程序(包括数据区)存入文件名为AA的磁盘文件中。(存入前

BX:CX必需置为文件长度值)。

4、用Q吩咐退出DEBUG。

5、在DOS吩咐下打AA,运行此程序,即在屏幕上显示'Thisisasample!'字符串,若不出

现,用DEBUG检查程序有无错误。

二、利用INT21H2号功能显示字符:

1、用A吩咐在100H处键入下列程序:

XORDL:DL

MOVCX,100

LOP:MOVAIL2

INT21

INCDL

LOOPLOP

INT20

2、用G吩咐运行程序,即在屏幕卜依次缓慢的显示256个ASCII字符.细致视察每个字符.

和IBM-PCASCII码表比照,看07H-0I川处限制字符显示结果与表上有何不同?

3、按CTRL+BREAK退出此程序,若一次不行可多做几次。

三、干脆向VRAM送ASCII码显示字符

1、用A吩咐在100H处键入下列程序:

MOVAX,BOOD

MOVDS,AX

XORAL,AL

XORBX,BX

MOVCX,100

LOP:MOV[BX],AL

INCBX

INCAL

PUSHCX

MOVCX,8

DELY:PUSHCX

MOVCX,0

J:LOOPJ

POPCX

LOOPDELY

POPCX

LOOPLOP

INT20

2、用N吩咐和W吩咐将此程序存入BB文件中。(肯定要先存入!)

3、用G吩咐运行此程序,细致视察每一个ASCII码显示结果,并和字符表及上一道程序运

行状况进行比照,其限制字符区(07-0DH)显示结果和INT21H2号功能调用有何不同?

四。自编一个程序,要求显示AX的内容,即能显示AX=xxxx。

调试时AX的内容可用R吩咐赋值,也可用MOV指令赋值。

试验报告要求:

1、各项试验记录及视察体会。

2、利用INT21H显示和干脆向VRAM送ASCH码显示方法在显示结果上有什么不同?

3、自编程序草稿及调试结果。

试验五二进制数显示成十六进制数的屏幕字符显示程序

试验目的:

通过试验驾驭下列学问:

1、8086指令:JG,SHR,MOV,OR,CMP,INC,LEA,INT等。

2、利用DOS功能调用INT21H的9号功能进行屏幕显示的方法。

试验内容及步骤:

一、利用INT2109H号功能调用显示字符串。

1、字符串显示09H功能说明

功能:在屏幕上显示在存储器内以“$”为结束符的字符串(不显示).

入口参数:DS:DX=串首址。

例4一个以“$”结束的字符串已存放在mess为首地址的内存缓冲区中,利用09号功

能调用如下:

movah,9

movdx,segmess;ds:dx=串地址

movds,dx

movdx,offsetmess

int21h

2、从唳ss起先处存放下列字符串的ASCII码;

'Thisisasample!$*

写程序把它显示出来。

3、把上面你写出的程序存为aa

4、在DOS吩咐下打AA,运行此程序,即在屏幕上显示'Thisisasample!'字符串,若不出

现,用DEBUG检查程序有无错误。

二、自编一个程序,要求把NUM单元存放的一个8位二进数,显示成16进制数,

如NUM单元的内容为僧1001011"要求能显示“RESULT=4BH”.

程序框架为:

DATASEGMENT

NUMDB01001011B

BUFDBODH,OAH,'RESULT3

STRDB4DUP(?)

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEl)S:DATA,SS:STACK,CS:CODE

START:MOVAX;DATA

MOVDS;AX

MOVAH;4CH

INT21H

CODEENDS

ENDSTART

试验报告要求:

1、各项试验记录及视察体会。

2、自编程序草稿及调试结果。

试验六查表指令及子程序嵌套试验

试验目的:

通过试验驾驭下列学问:

1、8086/8088指令:MOV,XLAT,LEA,JNE,CALL,RET,PUSH,POP,CMP,INT。

2、数据段的定义方法。

3、XLAT指令的运用方法。

4、子程序的嵌套调用及子程序参数传递的方法。

5、利用DOS功能调用INT21H的4cH号功能返回DOS的方法。

6、MASM、LINK、DEBUG、EMU8086等汇编、调试工具的运用方法。

试验内容及步骤:

一、调试以下两个程序,读懂程序,尤其是其次个程序,要驾驭阶乘的算法,最终写出

程序的运行结果及结果存放的位置。

1、已知某班学生的英语成果按学号(从1起先)从小到大的依次排列在TAB表中,要查的学

生的学号放在变量N0中,查表结果放在变量ENGLISH中。编写程序如下:

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

DATASEGMENT

TABDB80,85,86,71,79,96

DB83,56,32,66,78。84

NODB10

ENGLISTDB?

DATAENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

BEGIN:MOVAX,DATA

MOVDS,AX

LEABX,TAB

MOVAL,NO

DELAL

XLATTAB

MOVENGLISH,AL

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

2、计算5!的程序示例,RESULT是保存阶乘的存储单元。

程序如下:

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

DATASEGMENT

NDW5

RESULTDW?

DATAENDS

CODESEGMENT

ASSUMECS:CODE,SS:STACK,I)S:1)ATA

START:MOVAX,DATA

MOVDS,AX

MOVAX,N

CALLFACT

MOVAX,RESULT

MOVAH,4CH

INT2111

FACTPROC

CMPAX,0

JNELI

MOVRESULT,1

JMPEXIT

LI:PUSHAX

DECAX

CALLFACT

POPAX

MOVRESULT

MOVRESNLT,AX

EXIT:RET

FACTENDP

CODEENDS

ENDSTART

二、读一读以下程序,看一看运行结果。(选作)

DATASEGMENT

ATRIDB6EH,52H,94H,52H,6EH

DATAENDS

STACKSEGMENTPARASTACK*STACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

ST:MOVAX,DATA

MOVDS,AX

MOVAH,0;设置80X25彩色文本方式

MOVAL,3

INT10H

LEASI,ATRI;属性字节值表首址存SI

MOVDI,5;显示5个字符

MOVDX,0A13II;显示位置

MOVAH,15;取当前页号

INT10H

LP:MOVAH,2;置光标位置

INCDL

INT10H

MOVAL,5,显示梅花形字符

MOVBL,[SI]

MOVCX,1

MOVAH,9

INT10H

INCSI;指向下一属性字节

DECDI;判显示完否

J

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论