实验指导书-计算机组成原理与汇编语言程序设计_第1页
实验指导书-计算机组成原理与汇编语言程序设计_第2页
实验指导书-计算机组成原理与汇编语言程序设计_第3页
实验指导书-计算机组成原理与汇编语言程序设计_第4页
实验指导书-计算机组成原理与汇编语言程序设计_第5页
已阅读5页,还剩120页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

计算机组成原理与汇编语言实验指导书

云南大学软件学院本科生课程实验指导书

必算机殂成原理与汇编语言在序微行

王逍易超张艳

云南大学软件学院

二00五年八月

-0-

计算机组成原理与汇编语言实验指导书

计算机组成原理与汇编语言实验指导书

第一章DEBUG的使用

一、DEBUG概述

DEBUG是在DOS状态下面供程序员使用的程序调试工具。它可以用来检查内存

中任何地址中的内容以及修改特定地址中的内容。DEBUG还可以用于逐指令执行某

个程序,追踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与

磁盘扇区。此外,DEBUG还可以用于读写端口中的数值。

在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把任何类型的文

件读入内存中。DEBUG能够处理的数据为两种:十六进制数和ASCII码,使用两位

数表示十六进制数据(0〜9,A~F)。在DEBUG中涉及内存中的数据时,要指定数据

所在的内存单元的地址,地址的输入格式是:[段地址]:[位移]。如果没有输入地址,

DEBUG将假定为当前内存段,从位于地址100H的字节开始。前100H字节保留给程

序段前缀使用(称PSP结构,包含程序执行的各种信息),该区域用于建立DOS与程

序之间的联系。在DEBUG中,使用四位十六进制数表示地址(0-9,A〜F)。

DEBUG输入数据时有两种方法:提示方法和非提示方法。在提示方法下,输入

要求输入数据的命令,后跟保存数据的地址。执行后可以看到该地址中已有的内容

及一个冒号提示符。此时可以在提示符下输入一个新的值或者按下回车键或

CTRL+C回到“一”提示符。在非提示方法下,输入保持数据的内存地址以及要输

入的数据。

DEBUG的启动:

进入DOS状态下,键入DEBUG,按ENTER键,如:

C:\>DEBUG,则屏幕显示:

符号“一”是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。

DEBUG的退出:

在DEBUG的提示符后输入Q命令,按ENTER键,则退出DEBUG返回DOS。

DEBUG的使用:

在DEBUG的提示符后输入DEBUG命令,按ENTER键。

二、DEBUG命令详解

★A命令

格式:A[地址]

功能:将指令直接汇编成机器码输入到内存中。

参数说明:[地址]指定存放健入汇编语言指令的内存单元的位置。

A命令使用

说明:用于小段程序的汇编及修改目标程序,所有输入的数字均默认为十六进制,

并且不需要以“h”字符结尾。用户装入内存的汇编语句是连续存放的,若没有指定

地址,并且前面没有使用汇编命令,该语句被汇编到CS:0100区域,则在它上次停

止处开始汇编。

注意:

1.直接在A命令下输入跳转指令时,跳转指令后应跟跳转到的语句所在内存单元

-2-

计算机组成原理与汇编语言实验指导书

的地址,不能跟标号;使用跳转指令时,可以指定跳转指令的属性:near,far。

near前缀可以缩写为ne。如下例所示:

-a0100:0100

0100:0100jmp102

0100:0102jmpnear105

0100:0105jmpfar10a

2.汇编语言指令所涉及到的操作数可以是字操作数也可以是字节操作数,在语句

不能判别操作数的类型时,可以使用前缀wordptr或者前缀byteptr指定

操作数的类型。缩写分别是:wo和by。如下列所示:

-a0100:0100

0100:0100decwordptr[100]

0100:0102decwoptr[100]

0100:0105decbyteptr[100]

2.在DEBUG下,应注意区分立即操作数和内存地址的操作数,使用包括在中括号

([])中的操作数表示内存地址。

3.在DEBUG下,能够使用的伪指令仅有DB和N两个,分别用于定义字节和字操

作数,此时定义的操作数被存放在该定义指令所在的内存空间中。如下列所示

(注意内存空间的变换,why?):

-a0100:0100

0100:0100DB'ABCDEFG'

0100:0107

★C命令

格式:C[源地址范围][目的地址]

功能:比较两内存区域中的内容是否相同。若不同则按字节显示其地址和内容,若

相同则不显示任何内容。

参数说明:[源地址范围]指定要比较的内存第一个区域的起始和结束地址,或起始

地址和长度。[目的地址]指定要比较的第二个内存区域的起始地址。

C命令使用

说明:如果[源地址范围]和[目的地址]中内存单元的数据相同,Debug将不显示任

何内容而直接返回到Debug提示符。如果有差异,Debug将按如下格式显示:

[源地址]源地址中内容目的地址中内容[目的地址]

如下列所示:

-CCS:100105DS:300;(假定CS=0AF6;DS=1000)

0AF6:010088001000:0300

0AF6:0101CO001000:0301

0AF6:010289001000:0302

0AF6:0103D8001000:0303

0AF6:010465001000:0304

0AF6:010566001000:0305

-3-

计算机组成原理与汇编语言实验指导书

★D命令

格式:D[地址]或D[起始地址][目的地址]

功能:以内存映象方式显示内存中的数据。

参数说明:指定要显示内容的内存单元的起始地址和结束地址,或起始地址和长度。

如果不指定[地址],Debug将从以前d命令中所指定的地址范围的末尾开始显示

128个字节的内容;第一次从DS:100处开始显示。

D命令使用

说明:当使用d命令时,Debug分两个部分显示内存单元内容:左边显示内存单元

中存放的十六进制数;右边显示左边的十六进制所表示的ASCH字符,所有不可打

印字符用句号(.)表示。每行显示16个字节的内容,在第八和第九个字节之间有一个

连字符。

从键盘键入下面命令:

-dcs:10010f

Debug按以下格式显示地址范围中的内容(假定CS=0AF6):

0AF6:010077616E677869616F-696A6BFF0E0001FFwangxiaoijk

键入以下命令,Debug将从CS:100开始显示20h个字节的内容:

-dcs:100120

键入以下命令,Debug将显示范围从DS段的100h到115h中所有字节的内容:

-d100115

注意:在D命令中若不指定段寄存器,默认规定为DS。

★E命令

格式:E[地址][字节串]或E[地址]

功能:从指定的地址开始修改内存值。

参数说明:[地址]指定存放[字节串]第一个内存的位置,[字节串]是要放入内存单

元中的数据。

E命令使用

说明:当使用E命令时,有两种使用格式:

1、用E命令中包含的字节串替换从指定的地址开始的多个字节的内容;

2、E命令后不跟字节串,则允许按顺序方式显示和修改内存值,按卜.空格键显示下

一字节内容,若想修改,直接输入相应值;按下减号键显示上一字节内容,若

想修改,直接输入相应值。

3、停止执行e命令。按ENTER键。在任何字节位置都可以按ENTER。

注意:

1.若地址部分只输入偏移量,则E命令认为段包括在DS寄存器中。

2.[字节串]的值可以是十六进制字节或字符串。使用空格、逗号或制表符来分

隔值。必须将字符串包括在单或双引号中。

3.使用E命令后,内存单元中原来的数据符丢失,或者说被新输入的数据覆盖。

从键盘键入下面命令:

-4-

计算机组成原理与汇编语言实验指导书

-E100

Debug按下面的格式显示第一个字节的内容(假定DS=0AF6):

0AF6:0100EB.

要将该值更改为61,请在插入点键入(使用符号“一”表示)61,如下所示:

0AF6:0100AB.61

此时,若按下空格键,将显示下一个内存单元中的内容:

0AF6:0100AB.61EF.

此时,又可以在插入点键入新的内容,改写当前显示的内存内容,若不需要改写当前

内存单元的内容,可以直接按下空格键,将显示下一个内存单元的内容,如此,一直

到按ENTER停止e命令并返回到Debug提示符下。

若使用减号键,操作和按下空格键一样,区别在于将显示上一个内存单元的内容。

注意:使用该种方法,只能键入16进制数,不能键入字符串。

从键盘键入下面命令:

-EDS:100EF'ABC'41

则执行上面的命令后,从DS:100内存单元开始的5个连续的字节中的内容将被数据

0EFH,字符“A”“B”“C”的ASCH码和数据41H替换。

★F命令

格式:F[地址范围][字节或字节串]

功能:将要填写的字节或字节串填入由地址范围指定的存储器中。

参数说明:[地址范围]指定要填充内存区域的起始和结束地址,或起始地址和长度。

[字节或字节串]指定要输入的数据,可以由十六进制数或引号包括起来的字符串组

成。

F命令使用

说明:如果[地址范围]包含的字节数比[字节或字节串]中的数值大,Debug将对[字

节或字节串]中提供的值反复使用,直到[地址范围]中的所有字节全部填充。如果在

[地址范围]中的任何内存单元损坏或不存在,Debug将显示错误消息并停止f命令。

如果[字节或字节串]包含的数值多于[地址范围]中的字节数,Debug将忽略[字节

或字节串]中额外的值。

从键盘键入下面的命令:

-F1000:100105'ABCDEFG,

指令执行后,DEBUG使用,ABCDEF,填充1000:100到1000:105内存单元。

从键盘键入下面的命令:

1000:1001504045515244

指令执行后,DEBUG反复使用40,45,51,52,44填充从1000:100到1000:150的

内存单元,直到50h个字节全部填满为止。

★G命令

格式:G[=起始地址][[断点]……]

功能:执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一

-5-

计算机组成原理与汇编语言实验指导书

条要执行的命令。

参数说明:[=起始地址]指定当前在内存中要开始执行的指令所在的内存单元的地

址。如果不指定[=起始地址],DEBUG将从CS:IP寄存器中的当前地址开始执行程

序。[[断点]]指定可以设置为g命令的部分的1到10个临时断点。

G命令使用

说明:G命令中的=不能省略,可以只给出偏移地址,默认段地址为当前的CS:若

省略=,则该地址就成为G命令中的断点地址。程序将从指定的开始地址不停的执

行程序,一直到遇到结束指令为止,并显示“Programterminatednormally"。断点地

址只对本次G命令有效;下一条G命令若需要断点地址,应重新进行指定。当使用G

命令执行程序到断电地址后,显示断点地址处的指令和寄存器的内容。

注意:断点地址应为一条指令在内存单元中的首字节地址。

★H命令

格式:H[数值][数值]

功能:分别显示两个十六进制数相加的和以及第•个数减去第二个数的差。

参数说明:[数值]表示从0到FFFFh范围内的任何十六进制数字。

H命令使用

说明:Debug首先将指定的两个参数相加,然后用第一个参数中减去第二个参数。

并将计算的结果以4位16进制形式显示在下一行中:先显示计算和,然后显示计算差。

从键盘键入下面的命令:

H1234

执行后,将在下一行显示:

0046FFDE

★I命令

格式:I[端口地址]

功能:从指定的端口输入并显示(用十六进制)指定端口中的数据(字节)。

参数说明:[端口地址]指定要读取数据的端口地址。

I命令使用

说明:[端口地址]的分为应在。〜FFFFH的范围内。

从键盘键入下面的命令:

IFFFF

执行后,将在下一行显示(假定端口0FFFFH中的内容为FFH):

FF

★L命令

格式:L[地址][盘号:][逻辑扇区号][扇区数]

功能:将一个文件或盘的绝对扇区装入存储器。

参数说明:[地址]指定要在其中加载文件或扇区内容的内存空间的起始位置。[盘号:]

指定包含读取指定扇区的磁盘的驱动器。该值是数值型,表示为:0=A,l=B,2=

-6-

计算机组成原理与汇编语言实验指导书

C,……等。[逻辑扇区号]指定要加载其内容的第一个扇区的十六进制数。[扇区

数]指定要加载其内容的连续扇区的十六进制数。

L命令使用

说明:单个L命令能够装入的最大扇区数是80H,其中盘号0,1,2,3.…分别代

表A,B,C,……:若出现读盘错,显示错误信息。只有加载特定扇区的内容而不

是加载debug命令行或最近的Debugn(名称)命令中指定的文件时,才能使用

drive、start和number参数。L命令使用情况,可以分为下列几种情况:

1、使用不带参数的L命令

当使用不带参数的L命令时,在debug命令行上指定的文件将加载到从地址

CS:100开始内存中。Debug同时将BX和CX寄存器设置为加载的字节数(CX表

示低位,BX表示高位)。如果不在debug命令行指定文件,所装入的文件将是最近

使用n命令经常指定的文件。

2、使用带有address参数的L命令

使用带address参数的L命令,Debug将从内存位置address开始加载文件或

指定扇区的内容。???

3、使用带全部参数的L命令

使用带所有参数的L命令,Debug将加载指定磁盘扇区的内容而不是加载文件。

加载特定扇区的内容,指定范围内的每个扇区均从drive读取。Debug从start开

始加载,直到在number中指定的扇区数中的内容全部被加载。

从键盘键入如下命令(假定文件abc.exe存在当前目录之下):

Nwangxiao.exe

L

则把文件wangxiao.exe加载到CS:100开始的内存单元中。

若要将文件加载到1000:100开始内存单元中,键入:

L1000:100

★M命令

格式:M[地址范围][起始地址]

功能:把地址范围内的存储器单元的内容移到起始地址的指定地址中

参数说明:[地址范围]指定要复制内容的内存区域的起始和结束地址,或起始地址

和长度。[起始地址]指定要将range内容复制到该位置的起始地址。

M命令使用

说明:传送期间,源数据区和目标数据区可以部分重叠;传送后源区数据保持不变,

目的区的数据将使用源区中的数据进行改写。

从键盘键入如下命令:

-MCS:100150DS:500

执行该指令,Debug首先将CS:15O地址中的内容复制到地址DS:550中,然后将

CS:14F地址中的内容复制到CS:54F中,如此操作直至将CS:100地址中的内容

复制到地址DS:500中。

-7-

计算机组成原理与汇编语言实验指导书

★N命令

格式:N[盘号:][路径][文件名][扩展名]

功能:定义DEBUG使用的文件。

参数说明:[盘号:][路径][文件名][扩展名]指定文件所在的盘符,路径,文件名和

扩展名。

N命令使用

说明:可同时定义两个操作文件,并将形成的文件控制块相应的设置在内存CS:5C

和CS:6c匕供以后的L和W命令操作之用。

N命令的两个用途:

1、可以使用N为后面的L(加载)或W(写入)命令指定所使用的文件。

2、可以使用N命令指定正在被调试文件的命令行参数和开关。

如下所示:

假定在Debug中正在调试的程序wangxiao.com。若想为wangxiao.com指定两个参

数并运行此程序。可以键入如下的命令:

—Nparam1,param2

-G

从键盘键入如下的命令序列:

-Nwang.exe

-L

-Nxiaol.datxiao2.dat

-G

则第一个N命令将wang.exe指定为后接的L(加载)命令的文件,该命令将

wang.exe加载到内存。第二个N命令指定wang.exe将使用的参数。最后G命令将

使用参数xiaol.dat和xiao2.dat运行wang.exe文件。此功能如同在DOS命令行

中键入了wang.exexiaol.datxiao2.dat。

注意:不要在N命令的第二种形式后再次使用L命令,否则N命令的第二种形式中

指定的参数将不起作用。此外,如果在N命令的第二种形式后使用W(写入)命令,

将使用名称xiao2.dat保存正在调试的文件wang.exe。

每次使用N命令,都将影响下面的四个内存区域:

内存位置内容

CS:5C文件1的文件控制数据块(FCB)

CS:6C文件2的文件控制数据块(FCB)

CS:80N命令行的长度(以字符表示)

CS:81N命令行字符的开头

N命令指定的第一个文件名被放在CS:5C的FCB中。如果指定第二个文件名,第

二个文件文将放置到CS:6C的FCB中。N命令行上键入的字符数(除第一个字符

N之外)存储在位置CS:80。N命令行上的实际字符(再次,除了字母N之外)存储

在以CS:81开头的位置。

★O命令

-8-

计算机组成原理与汇编语言实验指导书

格式:0[端口地址][数据]

功能:发送数据(字节)到指定的输出端口。

参数说明:[端口地址]指定要写入数据的端口地址,[数据]指定要向[端口地址]中

写入的字节值。

0命令使用

说明:[端口地址]的分为应在0〜FFFFH的范围内,[数据]应为字节数据。

从键盘键入下面的命令;

-073FF

指令执行后,端口73H中的数据为0FFH。

★P命令

格式:P[=地址][数据]

功能:执行一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停

止在下一条指令上。

参数说明:『地址]指定第一条要执行指令的位置。如果不指定地址,则默认地址

是在CS:IP寄存器中指定的当前地址,[数据]指定在将控制返回给Debug之前要

执行的指令数,默认值为1。

P命令使用

说明:使用P命令执行程序,该程序不间断运行,直到循环、重复字符串指令、软件

中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止o

若被执行的指令不是循环、重复的字符串指令、软件中断或子程序,贝呼命令与T

(跟踪)命令的作用相同。

考虑程序在地址CS:168F处有一个call指令。要运行完call目标位置的子程序

然后将控制返回Debug,从键盘键入下面命令:

P=168F

执行指令后,按如下格式显示结果:

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

DS=0AF6ES=0AF6SS=0AF6CS=0AF6IP=1692NVUPEIPLNZACPONC

0AF6:1692BA2601MOVAX,0126

★Q命令

格式:Q

功能:退出DEBUG返回DOS。

参数说明:无参数。

Q命令使用

-Q

执行该命令后,结束DEBUG,返回DOS

★R命令

格式:R[寄存器]

-9-

计算机组成原理与汇编语言实验指导书

功能:1.显示单个寄存器的内容,并提供修改功能。2.显示所有寄存器内容,再

加上字母标志位状态以及要执行的下一条指令。3.显示8个标志位状态,并提供修

改功能。

参数说明:[寄存器]指定要显示其内容的寄存器名。

R命令使用

说明:可以使用的寄存器名有:AX、BX、CX、DX>SP、BP、SKDI、DS、ES、SS>

CS、IP、PC及F。键入R命令不跟任何可用的寄存器名,则将显示所有的寄存器的

内容以及CS:IP指向的存储单元中的内容;若键入R命令指定了寄存器名称,将以

十六进制数形式显示该寄存器中的内容,下一行显示冒号提示符,在冒号提示符后

面可以为寄存器键入新的数据。若不需要修改寄存器的数据,直接按ENTER键返回

Debug提示符。如果键入f字符代替寄存器名,Debug将每个标记的当前设置显示

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

的两字母代码;若不需要修改,直接ENTER键返回Debug提示符。可以修改全部

或部分标志位,可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。

任何没有指定新值的标志保持不变。在DEBUG下,标志位表示如下:

标志名标志为1标志为0

0FOVNV

DFDNUP

IFEIDI

SFNGPL

ZFZRNZ

AFACNA

PFPEP0

CFCYNC

注意:若输入的寄存器名不在上面的有效寄存器名之内,将显示:

bferror

R命令后只能跟一个有效的寄存器名。修改标志位如果指定没有在前面的表中列出

的标志代码,将显示:

bferror

若为一个标志位指定了多个值,Debug将显示以下消息:

dferror

要只查看标志的状态,键入以下命令:

-RF

将按如下格式显示:

NVUPDINGNZACPENC-_

此时可以按任意顺序键入一个或多个有效的标志值,其中可以有或没有空格,如下

所示:

NVUPDINGNZACPENC-PLEICY

执行指令后,将使用新的标志位数值代替旧值。

要查看当前所有寄存器的取值、所有标志位的内容和CS:IP指向的内存单元指令,

-10-

计算机组成原理与汇编语言实验指导书

键入以下命令:

-R

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

AX=OOOOBX=OOOOCX=OOOOI)X=OOOOSP=OOOOBP=OOOOSI=0000DI=0000

DS=0AF6ES=0AF6SS=0AF6CS=0AF6IP=1692NVUPEIPLNZACP0NC

0AF6:1692BA2601MOVAX,0126

从键盘上键入如下命令:

-RCX

执行后,将显示:

CX0000

在冒号后可以位CX键入新值,若不需要改变,直接按ENTER。

★S命令

格式:S[地址范围][字符串]

功能:在指定的地址范围内查找给定的字符串。

参数说明:[地址范围]指定要搜索范围的开始和结束地址。[字符串]指定要搜索的

字节值或字符串。字符串应包括在引号中。

S命令使用

说明:若在给定的分为内要搜索字节出现多次,将显示出所有地址。隐含地址为DS

段值。

假定从范围DS:100到DS:110查找是否包含61,键入下面命令:

-S10011061

执行程序后,显示:

0AF6:010A

0AF6:010F

若要在范围CS:100到CS:200内搜索字符串“wangxiao",键入下面的命令:

-SCS:100CS:200'wangxiao,

★T命令

格式:T[=地址][指令条数]

功能:逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容。

参数说明:[=地址]指定第一条要执行指令的位置。如果不指定地址,则默认地址

是在CS:IP寄存器中指定的当前地址,[指令条数]指定在将控制返回给Debug之

前要执行的指令数,默认值为1。

T命令使用

说明:通常采用跟踪一条指令,但用户也可以用指令条数设定••次跟踪多条指令,

每执行一条指令之后,显示所有寄存器的内容和标志状态以及下一条指令在内存中

的保存情况。T命令若不跟[=地址]参数,则从当前CS:IP处开始执行,第一次键入的

-11-

计算机组成原理与汇编语言实验指导书

T命令从CS:100处开始执行程序。T命令默认段寄存器是是CS。参考P命令。

键入下面得到命令:

-T

若是第一次执行,则显示:

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

DS=0AF6ES=0AF6SS=0AF6CS=0AE6IP=0103NVUPEIPLNZACP0NC

0AF6:0103BA2601MOVAX,0126

若要从CS:200处开始执行程序,则键入下面的命令:

T=CS:200

★U命令

格式:U[起始地址]或者[地址范围]

功能:将内存中的内容转换为汇编语句。

参数说明:[起始地址]或者[地址范围]指定要反汇编代码的起始地址和结束地址,或

起始地址和长度。

U命令使用

说明:U命令中如果没有使用参数,第一次使用,则U命令从CS:IP开始对20h个字节

内容进行反汇编;若不是第一次使用,则从前面U命令所显示地址后的第一个地址

开始开始对20h个字节内容进行反汇编。

若要从CS:100开始反汇编8(10h)字节,键入下面命令:

-UCS:100108

程序执行后,显示下面的结果:

0AF6:010021725FAND[BP+SI+5FLSI

0AF6:0103C606E3991AMOVBYTEPTR[99E3],1A

0AF6:0108C3RET

★W命令

格式:w[地址][盘符:][起始扇区][扇区数]

功能:将内存中的数据写入磁盘中。

参数说明:[地址]指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不

指定address,Debug程序将从CS:100开始。[盘符:]指定包含目标盘的驱动器。

该值是数值型:0=A,1=8,2=(3,等等。[起始扇区]指定要写入第一个扇区的十六

进制数。[扇区数]指定要写入的扇区数。

W命令使用

说明:在使用不带参数的W命令之前,BX和CX中应包含要写入文件的字节数,

BX为高位,CX为低位,写入的文件为最近N命令命名的文件。不能用W命令写

入.exe或.hex文件。

从键盘键入下面的命令:

-NABC.DAT

-12-

计算机组成原理与汇编语言实验指导书

-W

则执行上面的命令后,把当前CS:100指向的内存开始的数据写入到ABC.DAT文件

中,写入字节大小有BX和CX中大小规定。

假定要将起始地址为DS:200的内存内容写入到驱动器A的磁盘中。需要将数据从

磁盘的逻辑扇区号10H开始并持续10H个扇区。则键入下面命令:

-WDS:20001010

★XA命令

格式:XA[页面数]

功能:分配扩展内存的指定页面数

参数说明:[页面数]指定要分配的扩展内存的16KB页数。

XA命令使用

说明:要使用扩展内存,必须安装符合4.0版的Lotus/Intel/Microsoft扩展内存规

范(LIMEMS)的扩展内存设备驱动程序。如果指定的页面数可用,则将显示消息

表明所创建的句柄的十六进制数;否则显示相关的错误消息。

要分配扩展内存的8个页面,键入下面命令:

-XA8

执行指令后,若执行成功,显示下面消息:

Handlecreated=0003

若失败,则可能显示:

EMSnotinstalled

★XD命令

格式:XD[释放的句柄]

功能:释放指向扩展内存的句柄。

参数说明:[释放的句柄]指定要释放的句柄。

XD命令使用

说明:见XA命令说明

若要释放句柄0003,键入下面命令:

-XD0003

执行指令后,若执行成功,显示下面消息:

Handle0003deallocated

若失败,则可能显示:

EMSnotinstalled

★xs命令使用

说明:见XA命令说明

-13-

计算机组成原理与汇编语言实验指导书

★XM命令

格式:XM[要映射扩展内存的逻辑页面号][映射到的物理页面号][句柄]

功能:将属于指定句柄的扩展内存逻辑页映射到扩展内存的物理页。

参数说明:[要映射扩展内存的逻辑页面号]指定要映射到物理页的扩展内存的逻辑

页面号。[映射到的物理页面号]指定将映射到的物理页面号。[句柄]指定句柄。

XM命令使用

说明:见XA命令说明

若要将句柄0003的逻辑页3映射到物理页4,键入下面命令:

-XM340003

执行指令后,若执行成功,显示下面消息:

Logicalpage03mappedtophysicalpage04

★XS命令

格式:xs

功能:显示有关扩展内存状态的信息。

参数说明:无参数

三、DEBUG的有关说明

(1)在DEBUG状态下,所有输入的数值都不能带有后缀区分进制,输入的数

值都为16进制数;

(2)命令可大写或小写,DEBUG命令对大小不敏感;

(3)可以用<Ctrl>+<Break>键来停止一个命令的执行返回DEBUG状态

(4)每个命令只有在回车后才有效;

(5)按<Ctrl>+<NumeLock>键可暂停移动显示,按任一键继续;

(6)在DEBUG状态下面,输入?可以得到所有DEBUG命令的使用说明;

四、例题讲解

1.在汇编中若想对某一程序进行调试,可以使用debug进行单步T命令跟踪,但

当遇到调用int21H中断输入指令时,如何进行输入以便继续跟踪调试程序?

解:遇到int21h之类,用p即可完成中断的功能而不进入中断内部。单步调试

多用P,除非你对某个子程感到怀疑或有兴趣了,才用t命令进去看看,对血类的指

令也一样.

2.执行debug-a后,如果有一行输入错误,如何更改这一行?

解:

假如在Debug下进行如下输入:

-a

2129:0100movax,200

2129:0103movbx,200

2129:0106movcx,200

2129:0109

此时,发现movbx,200•句错误,应为movbx,20,可以敲回车返回"■”状态,然后输

-14-

计算机组成原理与汇编语言实验指导书

入:

-a103

2129:0103movbx,20

如果多或者少若干行,不必重新输入,可以用M命令移动后面的程序来去掉或者增

加程序空间。

3.在Debug下,如何显示BIOS的H期。

解:

-DFFFF:0006L8V按回车,

在作者的电脑上这里显示为“2/23/02.”

作者的电脑显示如下:

FFFF:0000322F-32332F303000

2/23/02.

相信你的电脑里也是用这种格式显示的。这里显示出来的是使用者BIOS的日期,有兴

趣的话可以重新开机看看,注意开机时的显示。

4.在你的电脑的COMMAND.COM文件里搜寻“IBM”这儿个字符。

解:

注意,文件COMMAND.COM在各个电脑的存放位置可能不一样。

以下是作者做的:

C:\WINDOWS\system32>debug

-n

-1

-sOlfftflBM1

-sOlflK'COMMAND1

0B3A:005D

0B3A:0082

0B3A:06C2

0B3A:07E5

0B3A:080D

0B3A:20E0

0B3A:210A

0B3A:22B8

OB3A:22E1

0B3A:234B

0B3A:23C7

0B3A:9E25

注意:

(1)搜寻是要区分大小写的。

⑵可以看到上面是没有找到“IBM”的,可以试一试“PATH”,“COMSPEC”,

“COMMAND”,已经找到了COMMAND.。

-15-

计算机组成原理与汇编语言实验指导书

(3)这种方法用在查找加密资料和已被删除的资料等方面时是十分有用的。

5.在DEBUG下编写程序,在计算机屏幕上输出“ABC”

解:如下

C:\D0CUME-1\WANGXI〜1>debug

-3

0AF4:0100movdl,41

0AF4:0102movah,02

0AF4:0104int21

0AF4:0106movdl,42

0AF4:0108int21

0AF4:010Amovdl,43

0AF4:010Cint21

0AF4:010Eint20

0AF4:0110

-r

AX=OOOOBX=OOOOCX=OOOODX=OOOOSP=FFEEBP=OOOOSI=OOOO

DI=OOOO

DS=0AF4ES=0AF4SS=0AF4CS=0AF4IP=0100NVUPEIPLNZNAPO

NC

0AF4:0100B241MOVDL,41

-rbx

BX0000

-rex

CX0000

:10

-nc:\masm\

-w

Writing00010bytes

-q

C:\DOCUME〜1\WANGXI〜1>

’'isnotrecognizedasaninternalorexternalcommand,

operableprogramorbatchfile.

C:\DOCUME〜I\WANGXI〜l>cd\

C:\>cdmasm

C:\masm>

ABC

C:\masm>

思考:BX和CX中的数值为何分别设置为0和10呢?

6.在Debug下查看程序的内容并运行之。

-16-

计算机组成原理与汇编语言实验指导书

解:

C:\masm>debug

-n

0B3A:0100B241MOVDL,41

0B3A:0102B402MOVAH,02

0B3A:0104CD21INT21

0B3A:0106B242MOVDL,42

0B3A:0108CD21INT21

0B3A:010AB243MOVDL,43

0B3A:010CCD21INT21

0B3A:010ECD20INT20

-r

AX=0000BX=0000CX=0010DX=0000SP=FFFEBP=OOOOSI=0000DI=0000

DS=0B3AES=0B3ASS=0B3ACS=0B3AIP=0100NVUPEIPLNZNAPONC

0B3A:0100B241MOVDL,41

-g

ABC

Programterminatednormally

五、练习

1.反复练习DEBUG的命令,熟练掌握只各命令的使用方法。

2.用键盘,将DS:100H起八个内存地址单元置AAH,将DS:200H起八个内存

单元置FFHo

3.用键盘,将AX,BX,CX,DX及DS,ES清0。

4.用A命令输入以下的程序,用单步命令T跟踪执行程序,并观察每一步的寄存

器内容和标志位的变化情况,并填写地址分配和目标代码。

地址分配目标代码源程序

________________________MOVAL,2

________________________PUSHBX

MOVBL,AL

________________________DECAL

DECAL

________________________DECAL

INCAL

________________________INCAL

POPBX

INT20H

-17-

计算机组成原理与汇编语言实验指导书

5.通过以上程序的调试和观察,试用汇编指令编一个简单的程序,将AAH,BBH,

CCH,DDH分别送AH,BH,CH,DH寄存器,用A命令输入,用T命令单步执

行,观察每一步的结果是否与预计结果相同。

6.对以下源程序进行调试,记录下每条指令的目标代码,相应寄存器变化情况

和程序的最终执行结果。

源程序:MOVAL,30H

MOVBL,26H

ADDAL,BL

PUSHAX

POPDX

MOVAH,02H

INT21H

INT20H

7.文件写盘操作:

(1)将实验4中的源程序用A命令写入CS:100起始的一片内存,再用U命令进

行反汇编,可以看出这段程序所占的内存长度。

(2)用R命令使BX,CX中包含该文件的字节数,其中BX为高位,CX为低位。

(3)—N盘名:文件名.扩展名

-W

则将该文件写入指定磁盘中。若要检查文件是否确实写入,可用下面的读盘

操作。

8.文件读盘操作:

—N盘名:文件名.扩展名

—L

将文件读入CS:200起始的一片内存,再用U命令进行反汇编显示检查。

9.用命令U查看8086/8088CPU在开机后执行的第一条指令。

10.用H命令检查下列各组16进制数加减结果并和你的手算结果比较:

(1)34H,22H(2)56H,78H(3)A5,79H(4)1284H,5678H(5)A758,347FH

-18-

计算机组成原理与汇编语言实验指导书

第二章80X86指令系统

2.1数据传送指令的使用

一、数据传送指令概述

负责把数据、地址或立即数传送到寄存器、存储单元以及I/O端口,或从内存

单元、I/O端口中读取数据。可以分为下面几类:

1.通用传送指令:MOV,PUSH,POP,XCHG,XLAT

2.输入输出指令指令:IN,OUT

3.目的地址传送指令:LEA,LDS,LES

4.标志位传送指令:LAHF,SAHF,PUSHF,POPF

注意:除SAHF和POPF指令外,所有指令对标志寄存器没有影响。

二、数据传送指令详解

1.通用传送指令(除了XCHG以外)是唯一允许以段寄存器为操作数指令。用于

在内存单元、寄存器、立即数之间进行数据传送。

★MOV传送指令

格式:MOVdest,src

功能:把一个字节(B)或一一个字(W)由源操作数src传送至目的操作数dest。

说明:

(1)不能直接在两个内存单元之间进行数据传递;

MOVMEM2,MEM1;错

MOVAX,MEM1;对

MOVMEM2,AX

(2)立即数不能直接送入段寄存器中;

MOVDS,2000;错

MOVAX,2000;对

MOVDS,AX

(3)不能直接在段寄存器之间的传送数据;

MOVES,DS;错

MOVAX,DS;对

MOVES,AX

(4)CS和IP不能作为目标操作数,可以作为源操作数;

MOVCS,AX

MOVAX,CS

MOVIP,AX

MOVAX,IP

★PUSH入栈指令

格式:PUSHsrc

功能:把个字从源操作数src压入由SP指向堆栈顶部。同时SP=SP—2。

-19-

计算机组成原理与汇编语言实验指导书

说明:

(1)PUSH入栈指令可以使用的源操作数src有:寄存器(通用寄存器,地址指

针,变址寄存器,段寄存器,存储器。

PUSHCS;可以,但是实际不要使用

PUSHIP;错

(2)PUSH的操作数必须为-—个字。字的低字节压入堆栈的低地址,高字节压入

堆栈的高地址中;

PUSHAX;把寄存器AL和AH中内容分别放在SP和SP+1指向的堆栈

空间中。

★POP出栈指令

格式:POPdest

功能:把当前SP所指向堆栈顶部的•个字弹出送入指定的目的操作数,同时

SP=SP+2o

说明:

(1)POP出栈指令可以使用的目的操作数dest有:寄存器(通用寄存器,地址

指针,变址寄存器,段寄存器CS除外),存储器。

POPCS;可以,但是实际不要使用

POPIP;错

(2)POP的操作数必须为一个字。堆栈弹出的低地址内容放入操作数的低字节,

高地址内容放入操作数高字节中;

POPAX;把5「和SP+1指向的堆栈空间中内容弹出放到寄存器AL和AH

中。

★XCHG交换指令

格式:XCHGdest,src

功能:把一个字节或一个字的源操作数与目的操作数进行交换。

说明:

(1)寄存器之间、寄存器和存储器之间进行交换,不能在两个存储器之间进行交

换,两个操作数中必须有一个为寄存器操作数;

XCHGBL,DL;对

XCHGAX,SI;对

XCHGCOUNT[DI],AX;对

(2)段寄存器不能作为一个操作数;

XCHG[BX],[DI];错

XCHGDS,AX;错

★XLAT换码指令

格式:XLATstr_table或XLAT

功能:把DS:(BX+AL)内存单元中的内容取出送入AL寄存器中。

说明:

(1)XLAT指令使用方法:

•先建立一个字节表格;

-20-

计算机组成原理与汇编语言实验指导书

•表格第一个字节偏移地址存入str_table送入BX寄存器;

•需要转换代码的序号(相对于表格首地址位移量)存入AL:(表中第一个

元素的序号为0)

•执行XLAT指令后,表中指定序号的元素存于AL中。(AL)为转换的代码。

(2)默认寄存器:

•BX:存放表格第一个字节偏移地址

•AL:使用XLAT指令前,存放相对于表格首字节的位移偏移量;使用XLAT

指令后,存放表格中指定的字节的内容;

(3)内存的数据段中有一十六进制数字的ASCH码表。首地址为:Hex_table,欲查

出元素'A5的ASCII码;

MOVBX,OFFSETHextable

MOVAL,OAH

XLATHextable

程序运行后,AL寄存器中的内容为41H。

2.输入输出指令用于在寄存器和外设端口之间进行数据交换,无论接受还是发送

数据,必须通过累加器AX(字)或AL(字节),又称累加器专用传送指令。输入输

出指令有两种使用格式:长格式和短格式。若需要访问的端口号小于256,则端口

号可以以立即数形式写在指令中,此格式称为长格式;若需要访问的端口号大于等

于256,则端口号应先放在DX寄存器中,此格式称为短格式。

★IN输入指令

格式:INAL,data8;端口地址8位,输入一个字节

INAX,data8;端口地址8位,输入一个字

INAL,DX;端口地址16位,输入一个字节

INAX,DX;端口地址16位,输入一个字

功能:用于CPU从外设端口接受数据。

说明:

(1)一个端口号只能存放一个字节数据;一个字数据应存放在2个端口中,高

地址端口存放高位字节,底地址端口存放低为位字节;

(2)把(29H)(28H)端口中数据(字数据,29H中是高8位)送入字变量

(DATA_WORD)中。

INAX,28H

MOVDATA_WORD,AX

★OUT输出指令

格式:OUTdata8,AL;端口地址8位,输出一个字节

OUTdata8,AX;端口地址8位,输出一个字

OUTDX,AL;端口地址16位,输出一个字节

OUTDX,AX;端口地址16位,输出一个字

功能:用于CPU向外设端口发送数据。

说明:

(1)参见IN指令说明;

-21-

计算机组成原理与汇编语言实验指导书

(2)把(AX)中的字数据送入05H和06H端口中。

OUT5,AL

3.目的地址传送指令用于获取操作数的地址信息

★LEA

格式:LEAregl6,meml6

功能:把指令中指定的存储器操作数有效地址装入指定的寄存器。

说明:

(1)LEA指令中的目标寄存器必须是16位的通用寄存器,源操作数必须是一

个存储器。

(2)LEA指令与MOV的区别:

LEABX,BUFFER;把BUFFER指向内存单元的有效地址送BX

寄存器

MOVBX,BUFFER;把BUFFER指向内存单元中的内容送BX

寄存器

LEA指令与MOV等价

LEABX,BUFFER;把BUFFER指向内存单元的有效地址送BX

寄存器

MOVBX,OFFSETBUFFER;同上

★LDS

格式:LDSreg16,mem32

功能:将指令指定mem32内存单元中的前两个单元内容(16位偏移量)装入指令指

定通用寄存器regl6,把后两个单元内容(段地址)装入到DS段寄存器。

说明:

(1)LDS默认规定把mem32

温馨提示

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

最新文档

评论

0/150

提交评论