汇编语言程序设计基本命令

汇编语言程序设计基本命令
汇编语言程序设计基本命令

实验一汇编语言程序的建立、调试和执行

第一节汇编语言程序的建立和执行

要建立和运行汇编语言程序,系统盘上应该首先有如下文件:

https://www.360docs.net/doc/b63996942.html, ;行编辑程序

ASM.EXE ;汇编程序

MASM.EXE ;宏汇编程序

LINK.EXE ;链接程序

https://www.360docs.net/doc/b63996942.html, ;调试程序

其中 ASM.EXE 是普通汇编程序,它不支持宏汇编,如果要用宏汇编,则必须用MASM.EXE。

下面,以建立和执行用户程序 ABC.EXE 为例来说明上机过程。

1、用 EDIT 命令建立汇编语言源程序(ASM文件)

源程序就是用汇编语言的语句编写的程序,它不能被机器识别。源程序必须以 .ASM 为附加文件名。

例如打入命令:

A> EDIT ABC.ASM 回车;其中 ABC为文件名,.ASM为附加文件名,也即是扩展名。

此时用户可以通过编辑程序的插入命令编写用户程序 ABC.ASM。下面以加偶校验程序为例输入源程序。EDIT的使用方法可以查阅手册。

加偶校验到ASCII字符

标准的ASCII码字符集用七位二进制编码来表示一个字符,而在微机中通常用一字符(8 位)来存放一个字符,它的最高位始终为零。但字符在传送时,特别是在串行传送时,由于传送距离长容易出错,就要进行校验。对一个字符的校验常用奇偶校验,即用最高位作为校验位,使得每一字符包括校验位,其中"1"的个数为奇数(奇校验)或为偶数(偶校验)。在传送时,校验电路自动产生校验位作为最高位传送;在接收时,对接收到的整个字符中的"1"的个数进行检验,有错则提示。

例若有一个ASCII字符串,它们的起始地址放在单元STRING内,要求从串中取出每一个字符,检查其中包含的"1"的个数,若已为偶数,则它的最高有效位置"0";否则,最高有效位置"1"后,送回。

参考程序:

data segment

string db '1234567890'

count equ $-string

data ends

stack segment para stack'stack'

db 100 dup(?)

stack ends

code segment

assume cs:code,ds:data,es:data,ss:stack

start proc far

begin: push ds

mov ax,0

push ax

mov ax,data

mov ds,ax

mov es,ax

lea si,string

mov cx,count

again: lodsb

and al,al

jpe next

or al,80h

mov [si-1],al

next: dec cx

jnz again

ret

start endp

code ends

end begin

2、用ASM(或者MASM)命令产生目标文件[OBJ文件]

源程序建立以后,就可以用汇编程序 ASM.EXE(或者 MASM.EXE)进行汇编,所谓汇编,实际上就是把以 .ASM 为扩展名的源文件转换成用二进制代码表示的目标文件,目标文件以 .OBJ为扩展名。汇编过程中,汇编程序对源文件进行二次扫描,如果源程序中有语法错误,则汇编过程结束后,汇编程序会指出源程序中的错误,这时,用户可以再用编辑程序来修改源程序中的错误,最后,得到没有语法错误的OBJ文件。

例如:对 ABC.ASM 的汇编过程如下:

A>MASM ABC.ASM ;必须写出扩展名 .ASM

此时,汇编程序给出如下回答:

The IBM Pcrsonal Computer Assembler Version 1.00(C) Copyright IBM Corp 1997

Object filename [EX MOVS.OBJ]:

Source Listing [NUL.LST]: ABC

Cross reference [NUL.CRF]: ABC

从上面的操作过程中可以见到,汇编程序的输入文件就是用户编写的汇编语言源程序,它必须以 ASM为文件扩展名,汇编程序的输出文件有三个,第一个是目标文件,它以 .OBJ为扩展名,产生OBJ文件是我们进行汇编操作的主要目的,所以这个文件是一定要产生,也一定会产生的,操作时,这一步只要打入回车就行了,第二个是列表文件,它以 .LST为扩展名,列表文件同时给出源程序和机器语言程序,从而,可以使调试变得方便,列表文件是

可有可无的,如果不需要,则在屏幕上出现提示信息[NUL.LST]:时,打入回车即可,如果需要,则打入文件名和回车;第三个是交叉符号表,此表给出了用户定义的所有符号,对每个符号都列出了将其定义的所在行号和引用的行号,并在定义行号上加上"#"号,同列表文件一样,交叉符号表也是为了便于调试而设置的,对于一些规模较大的程序,交叉符号表为调试工作带来很大方便,当然,交叉符号表也是可有可无的,如不需要,那么,在屏幕上出现提示信息[NUL.CRF]:时,打入回车即可。

汇编过程结束时,会给出源程序中的警告性错误[Warning Errors]和严重错误[Severs Errors],前者指一般性错误,后者指语法性错误,当存在这两类错误时,屏幕上除指出错误个数外,还给出错误信息代号,程序员可以通过查找手册弄清错误的性质。

如果汇编过程中,发现有错误,则程序员应该重新用编辑命令修改错误,再进行汇编,最终直到汇编正确通过,要指出的是汇编过程只能指出源程序中语法错误,并不能指出算法错误和其它错误。

3、 LINK命令产生执行文件(EXE文件)

汇编过程根据源程序产生出二进制的目标文件(OBJ文件),但OBJ文件用的浮动地址,它不能直接上机执行,所以还必须使用链接程序(LINK)将OBJ文件转换成执行的EXE文件,LINK命令还可以将某一个目标文件和其它多个模块(这些模块可以是由用户编写的,也可以是某个程序库中存在的)链接起来。

具体操作如下(以对 ABC.OBJ 进行链接为例):

A> LINK ABC ;不必写出扩展名

此时,在屏幕上见到如下回答信息:

IBM 5552 Multistation Linker 2.00(C)Copyright IBM Corp 1997

Run File[ABC.EXE]: ;回车

List File[NUL.MAP]: ;回车

Libraries[.LIB]: ;回车

Warning: NO STACK Scgment

LINK 命令有一个输入文件,即 OBJ 文件,有时,用户程序用到库函数,此时,对于提示信息Libraries[.LIB], 要输入库名。

LINK 过程产生两个输出文件,一个是扩展名为 .EXE 的执行文件,产生此文件当然是LINK 过程的主要目的,另一个是扩展名为 .MAP 的列表分配文件,有人也称它为映象文件,它给出每个段在内存中的分配情况,比如某一个列表分配文件为如下内容:Warning: NO STACK Segment

Start Stop Length Name Class

0000H 0015H 0016H CODE

0020H 0045H 0026H DATA

0050H 0061H 0012H EXTRA

origin Group

Program entry Point at 00000:0000

MAP 文件也是可有可无的

从 LINK 过程的提示信息中,可看到最后给出了一个“无堆栈段”的警告性错误,这并不影响程序的执行。当然,源程序中设置了堆栈段,则无此提示信息。

4、程序的执行

有了 .EXE 文件后,就可以执行程序了,此时,只要打入文件名即可。仍以 ABC 为例:A>ABC 回车

A〉

实际上,大部分程序必须经过调试阶段才能纠正程序设计中的错误,从而得到正确的结果,所谓调试阶段,就是用调试程序(DEBUG程序)发现错误,再经过编辑、汇编、链接纠正错误。关于DEBUG程序中的各种命令,可参阅下一节内容,下面给出最常用的几个命令。先进入 DEBUG 程序并装入要调试的程序 ABC.EXE,操作命令如下:

A〉DEBUG ABC.EXE ;进入 DEBUG ,并装配ABC.EXE

此时,屏幕上出现一个短划线。为了察看程序运行情况,常常要分段运行程序,为此,要设立“断点”,即让程序运行到某处自动停下,并把所有寄存器的内容显示出来。为了确定我们所要设定的断点地址,常常用到反汇编命令,反汇编命令格式如下:

-U ;从当前地址开始反汇编

也可以从某个地址处开始反汇编,如下所示。

-U200 ;从CS:200处开始反汇编

程序员心中确定了断点地址后,就可以用G命令来设置断点。比如,想把断点设置在0120H 处,则如下打入命令:

-G0120

此时,程序在0120H处停下,并显示出所有寄存器以及各标志位的当前值,在最后一行还给出下一条将要执行的指令的地址,机器语言和汇编语言,程序员可以从显示的寄存器的内容来了解程序运行是否正确。

对于某些程序段,单从寄存器的内容看不到程序运行的结果,而需要观察数据段的内容,此时可用D命令,使用格式如下:

-d DS : 0000 ;从数据段的0单元开始显示128个字节

在有些情况下,为了确定错误到底由哪条指令的执行所引起,要用到跟综命令,跟踪命令也叫单步执行命令,此命令使程序每执行一条指令,便给出所有寄存器的内容。

比如:

-T3 ;从当前地址往下执行三条指令

此命令使得从当前地址往下执行三条指令,每执行一条,便给出各寄存器内容。最后,给出下一条要执行的指令的地址,机器语言和汇编语言。

从DEBUG退出时,使用如下命令:

-Q

每一个有经验的程序员都必定熟练掌握调试程序的各主要命令,为此,初学者要花一些功夫查阅、掌握 DOS 手册中有关 DEBUG 程序的说明。

第二节调试程序 DEBUG

一、如何调用 DEBUG 程序

在 PC-DOS 的提示符A>下,可打入如下命令;

A>DEBUG[d:][Path[filename[.ext]][Parm1]][Parm2]

其中,DEBUG 是调试程序的文件名,后面是要调试的程序的文件标识符。若在命令中规定了文件标识符,则在 DOS 把 DEBUG 程序调入内存后,DEBUG 程序把要调试的程序(根

据文件标识符)调入内存,若在命令中没有规定文件标识符,则 DEBUG 程序或者与正在内存中的内容打交道,或可以用 Name 和 Load 命令,从盘上输入要调试的程序。

命令行中的[Parm1(参数1)][Parm2(参数2)],我们在后面结合具体的命令加以介绍。在 DEBUG 程序调入后,发出提示符“-”,说明现在系统在 DEBUG 程序的管理之下。所有的 DEBUG命令,也只有在出现提示符后才有效。

二、 DEBUG 程序对寄存器和标志位的初始化

在 DEBUG 程序启动后,它把各个寄存器和标志位,置成以下状态:

1、段寄存器(CS,DS,ES和SS)置于自由存储空间的底部,也就是 DEBUG 程序结束以后的第一个段。

2、指令指针(IP)置为‘0100’。

3、堆栈指针置到段的结尾处,或者是装入程序的临时底部,取决于哪一个更低。

4、余下的寄存器(AX,BX,CX,DX,BP,SI和DI)置为0。然后,若调用 DEBUG 时包含一个要调试的程序的文件标识符,则 CX 中包含以字节表示的文字长度。若文件大于64K ,则文件长度包含在 BX 和 CX 中(高的部分在 BX 中)。

5、标志位都置为清除状态。

6、default 的磁盘缓冲区置于码段的X“80”。

注:若由 DEBUG 调入的程序,具有扩展名 .EXE,则 DEBUG 必须进行再分配,把段寄存器,堆栈指针,指令指针置为文件中所规定的值。

三、有关 DEBUG 命令的一些共同信息

1、DEBUG 命令都是一个字母,后面跟有一个或多个参数。

2、命令和参数可以用大写或小写或混合方式输入。

3、命令和参数间,可以用定界符分隔。然而定界符只是在两个邻接的十六进制值之间是必需的。因此,下列命令是等效的:

dcs : 100 110

d cs : 100 110

d,cs : 100,110

4、可以用按 Ctrl -Break 键来停止一个命令的执行,返回 DEBUG 提示符。

5、每一个命令,只有在按了 Enter 键以后才有效,才开始执行。

6、若一个命令产生相当大数量的输出行,为了能在屏幕上当一行卷走以前读清楚它,可以在显示过程中按 Ctrl-Num Lock 键,以暂定上卷;也可以按任何一个字符来重新启动。

7、若 DEBUG 检查出一个语法错误,则显示具有错误的行和指示错误所在。例如:

d cs : 100 cs : 110

error

四、显示内存单元内容的命令(Dump Command)

为了了解程序执行的结果,检查内存单元的内容是十分重要的。此命令能检查指定范围的存储单元的内容。命令的格式为:

D[地址]

或D[范围]

其中,D是命令字母,[地址]或[范围]都是为了指定要显示的存储单元的范围。

存储单元的内容,用两种方式显示:一种是每一个存储单元的内容(每一字节)用两位十六进制数显示,另一种是用相应的ASCII字符显示。

显示有两种格式,若是40列系统显示格式,每一行开始在8个字节的界限上和显示8个字节,若是80列系统显示格式,每一行开始在16个字节的界限上和显示16个字节。

显示命令有两种常用的格式:

1、格式为

D 地址

或 D

则从指定地址开始,显示 40H 个字节(相应于系统的 40 列显示格式),或 80H 个字节(相应于 80 列显示格式)。

若命令中没有指定起始地址,则从上一个 D 命令所显示的最后一个单元的下一个单元开始。若以前没有使用过 D 命令,则从由 DEBUG 初始化的段寄存器的内容,加上地址位移量0100H作为起始地址。

若在命令中所打入的地址中,只包含起始地址的位移量,则 D 命令认为段地址包含在 DS 中。例如:

-d100

08F8 : 0100 00 23 67 98 56 0A A3 A8 -F6 FF D5 D3 E4 7F BE 00 .#.V.#.

08F8 : 0110 01 BB 00 02 B9 0E 00 AC - 49 3A 04 7F 02 8A 04 46 .:..9...I:...........F

08F8 : 0120 E2 F7 88 07 F4 00 00 00 -00 00 00 00 00 00 00 00 bw..t...............

08F8 : 0130 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ......................

08F8 : 0140 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ......................

08F8 : 0150 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ......................

08F8 : 0160 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ......................

08F8 : 0170 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ......................

2、显示指定范围的内容

D 范围

在范围中包含起始地址和结束地址。若输入的起始地址中,未包含段地址部分,则 D 命令认为段地址在 DS 中,而输入的结尾地址中,只允许有地址位移量。例如:

-dds : 0100 0130

08F8 : 0100 00 23 67 98 56 0A A3 A8 -F6 FF D5 D3 E4 7F BE 00 .#.V.#.

08F8 : 0110 01 BB 00 02 B9 0E 00 AC - 49 3A 04 7F 02 8A 04 46 .:..9...I:...........F

08F8 : 0120 E2 F7 88 07 F4 00 00 00 -00 00 00 00 00 00 00 00 bw..t...............

08F8 : 0130 00

五、修改存储单元内容的命令(Enter Command)

此命令用于修改存储单元的内容,它有两种基本格式:

1、用命令中给定的内容表去代替指定范围的内存单元的内容:

E 地址内容表

例如: E ds : 100 F3"XYZ"8D

则内存单元 ds : 100 到ds : 104 这5个存储单元的内容,由表中指定的5个字节的内容(其

中两个用两位十六进制数表示,如 F3 8D ;另三个用字符表示,则用它们的ASCII值代入)所代替。

例如:

eds : 0100 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46

-dds : 0100 0130

07B5 : 0100 30 31 32 33 34 35 36 37 - 38 39 41 42 43 44 45 46 0123456789ABCDEF

07B5 : 0110 E0 BB 00 00 BF 30 00 00 - 00 00 00 00 00 00 00 00 ; ..?0......................

07B5 : 0120 00 AA 00 00 00 30 31 32 - 00 00 00 33 34 00 00 00 .*..012...34............

07B5 : 0130 41

2、一个单元一个单元地连续修改方式:

E 地址

在输入了上述命令后,屏幕上显示指定单元的地址和原有的内容之后,可以采取以下几种操

作中的一种:

⑴ 再输入一个字节的十六进制数,以代替原单元中的内容,然后可以采取以下三个操作之一。

⑵按空格键,则上一个替换要求完成,且显示下一单元的地址和原有的内容,要修改的话,则输入两位十六进制数,再按空格……这样就可以连续不断地进行修改。若某一单元的内容,

不需要修改,而操作要进行下去, 则可直接按空格键。

⑶输入一个连接号-, 则显示前一个单元的地址和内容, 若要修改的话, 就输入一个

字节的内容, 然后按-, 则又显示前一个单元的地址和内容……这样, 就可以连续不断

地进行反向修改。若所显示的前一单元的内容不需要修改, 可直接按-键。

⑷按 Enter 键以结束 E 命令。

例:

-dds : 0000

07B5 : 0000 41 42 43 44 45 46 F0 FE -1D F0 DB 01 07 06 E0 01 ABCDEF..................

07B5 : 0010 07 06 E2 04 3B 05 3B 05 - 01 01 01 00 02 FF FF FF ...............................

07B5 : 0020 FF FF FF FF FF 00 00 00 - FF FF 00 04 05 03 02 00 ..............................

07B5 : 0030 07 05 04 04 03 00 00 09 - 00 00 00 00 00 00 00 00 .............................

07B5 : 0040 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00

00 ...........................

07B5 : 0050 CD 21 CB 00 00 00 00 00 - 00 00 00 00 00 20 20 20 M!K.................

07B5 : 0060 20 20 20 20 20 20 00 00 - 00 00 00 00 00 20 20 20 ..............

07B5 : 0070 20 20 20 20 20 20 00 00 - 00 00 00 00 00 00 00 00 ........

-eds : 0000

07B5 : 0000 41 . 30 42 . 31 43 . 32 44 .

07B5 : 0003 44 . 33 45.34 46 . 35 F0 . 36 FE . 37

07B5 : 0008 1D. 38 F0 . 39 DB . 41

-dds : 0000

07B5 : 0000 30 31 32 33 34 35 36 37 - 38 39 41 01 07 06 E0 01 0123456789A...........

07B5 : 0010 07 06 E2 04 3B 05 3B 05 - 01 01 01 00 02 FF FF FF ...............................

07B5 : 0020 FF FF FF FF FF 00 00 00 - FF FF 00 04 05 03 02 00 ..............................

07B5 : 0030 07 05 04 04 03 00 00 09 - 00 00 00 00 00 00 00 00 .............................

07B5 : 0040 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ...........................

07B5 : 0050 CD 21 CB 00 00 00 00 00 - 00 00 00 00 00 20 20 20 M!K.................

07B5 : 0060 20 20 20 20 20 20 00 00 - 00 00 00 00 00 20 20 20 ..............

07B5 : 0070 20 20 20 20 20 20 00 00 - 00 00 00 00 00 00 00 00 ........

六、检查和修改寄存器内容的命令(Register Command)

为了了解程序运行是否正确,用 R 命令检查寄存器内容的操作是十分重要的。

R 命令有三种功能:

。能显示 CPU 内部的所有寄存器的内容和全部标志位的状态。

。能显示和修改一个指定的寄存器的内容。

。能显示和修改所有标志位的状态。

下面分别给予介绍:

1、命令格式为:

R

则系统的响应为:

-r

AX=0000 BX=0000 CX=004A DX=0000 SP=0064 BP=0000 SI=0000

DS=07B5 ES=07B5 SS=07CA CS=07C6 IP=0000 NV UP DI PL NZ NA PO NC

07C6 :0000 B8C507 MOV AX,07C5

前两行显示了所有 CPU 内部寄存器的内容和全部标志位的状态(其含义在下面介绍),第三行显示了现行的 CS :IP 所指的指令的机器码和反汇编符号,这就是下一条即将要执行的指令。

2、命令的格式为:

R 寄存器名

例如为了检查和修改寄存器 AX 的内容,可打入以下命令:

R AX

则系统可能出现如下响应:

AX F1F4

:_

此时,可采取以下两种操作之一:

⑴ 若不需要改变其内容,则直接按 Enter 键。

⑵ 若需要改变其内容的话,可输入 1~4 个十六进制字符值,再按 Enter 键,以实现修改。

例如:

-r

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

DS=07B5 ES=07B5 SS=07CE CS=07C5 IP=0000 NV UP DI PL NZ NA PO NC

07C5 : 0000 3031 XOR [BX+DI], DH DS : 0000=30

-r ax

AX 0000

: 0064

-r bx

BX 0000

: 0000

-r si

SI 0000

: 1200

-r di

DI 0000

: 2000

-r

AX=0064 BX=1000 CX=0090 DX=0000 SP=0064 BP=0000 SI=1200 DI=2000

DS=07B5 ES=07B5 SS=07CE CS=07C5 IP=0000 NV UP DI PL NZ NA PO NC

07C5 : 0000 3031 XOR [BX+DI], DH DS :

3、显示和修改标志位状态

在8088中,共有九个标志位,其中追踪标志T,不能直接用指令改变,其它 8 个标志可以显示和修改,在显示时,8 个标志的显示次序和符号如下:

命令的格式为:

系统可能给出如下响应:

OV DN EI NG ZR AC PE CY

于是可以采取以下两种之一的操作:

⑴、若不需要修改任一个已设置的标志状态,可直接按 Enter。

⑵、若有一个或多个标志需要修改,则可以输入此标志的相反的值,输入的标志的次序是无关的,输入的各个标志之间,可以没有空格,然后按 Enter 键,以实现修改。

例如:

OV DE EI NG ZR AC PE CY_PONZDINV

七、运行命令( Go Command)

为了检查程序运行是否正确,希望在运行中能设置断点,以便一段一段对程序进行调试。

G 命令的格式为:

G [=address][address[address……]]

其中, 第一个参数 = address 是规定了执行的起始地址 : 以 CS 中的内容作为段地址, 以等号后面的地址值作为地址位移量。在输入时 = 号是不可缺少的(与后面输入的断点地址相区分)。

若不输入起始地址,则以CS : IP 作为起始地址。

后面的地址参数是断点地址。若在命令行中,除了起始地址以外,没有任何地址参数,则程序执行时没有断点。这适用于要用不同参数去多次运行程序的情况。

在开始调试程序时,往往要设置断点。DEBUG 程序中允许最多可设置 10 个断点,这些断点地址的次序是任意的。设置多个断点的好处是:若程序有多个模块,多个通路,不管是哪一个通路执行,都有可能在断点处停下来。

DEBUG 程序用一个中断类型 3 指令(操作码为 CCH )来代替被调试的程序在断点地址处的指令操作码。当程序执行到一个断点地址时,就停了下来,显示 CPU 内部所有寄存器的内容和全部标志位的状态(相当于一条 R 命令);被调试程序的所有断点处的指令被恢复(若程序执行未遇到断点,则不恢复);全部断点被取消;返回 DEBUG 。

于是,就可以利用各种 DEBUG 命令来检查程序运行的结果和进行必要的修改。

注释:

⑴一旦程序已经执行完, DEBUG 显示信息“Program terminated normally (程序正常结束)”,若还要执行此程序,必须首先重新输入程序。

⑵命令中的地址参数所指的单元,必须包含有效的 8088 的指令码,若指定的地址单元不

包含有效指令的第一个字节,则会出现不可预料的结果。

⑶对于 GO 命令,堆栈必须至少包含有 6 个可用的字节;否则会出现不可预料的结果。

⑷若输入的断点地址只包含地址位移量,则 G 命令认为其段地址在段寄存器 CS 中。

八、追踪命令(Trace Command)

追踪命令有两种格式:

1、一条指令一条指令地追踪

若打入命令

T[=address]

则执行一条指定地址处的指令后就停下来;显示 CPU 的所有寄存器内容和全部的标志位的

状态;返回 DEBUG 。可以用其他的 DEBUG 命令进一步检查此条指令执行的结果,并作

必要的修改。

若在指令中没有指定地址,则从CS : IP 的现行值执行。例如:

-t

AX=007F BX=0200 CX=0000 DX=0000 SP=707E BP=0000 SI=0000 DI=0000

DS=08F8 ES=08F8 SS=08F8 CS=08F8 IP=0111 NV UP DI PL

NZ NA PO NC

08F8 : 0111 BB0002 MOV BX,0200

-t

AX=007F BX=0200 CX=0000 DX=0000 SP=707E BP=0000 SI=0000 DI=0000

DS=08F8 ES=08F8 SS=08F8 CS=08F8 IP=0114 NV UP DI PL

NZ NA PO NC

08F8 : 0114 B90E00 MOV CX,000E

-t

AX=007F BX=0200 CX=000E DX=0000 SP=707E BP=0000 SI=0000 DI=0000

DS=08F8 ES=08F8 SS=08F8 CS=08F8 IP=0117 NV UP DI PL NZ

NA PO NC

08F8 : 0117 AC LODSB

-t

AX=0000 BX=0200 CX=000E DX=0000 SP=707E BP=0000 SI=0000 DI=0000

DS=08F8 ES=08F8 SS=08F8 CS=08F8 IP=0118 NV UP DI PL NZ

NA PO NC

08F8 : 0118 49 DEC CX

-t

AX=0000 BX=0200 CX=000D DX=0000 SP=707E BP=0000 SI=0000

DI=0000

DS=08F8 ES=08F8 SS=08F8 CS=08F8 IP=0119 NV UP DI PL NZ NA PO NC

08F8 : 0119 3A04 CMP AL, [SI]

2、多条追踪命令

命令的格式为:

T[=address][值]

此命令从指定的地址开始(若命令中给定了起始地址,则从这给定地址开始。若未给定,则从当前的 CS : IP开始)执行由命令中的值所决定的几条指令,执行就停下来了,T命令显示每条指令执行后的所有寄存器的内容及全部标志位的状态。执行停下来后返回 DEBUG。可以用 DEBUG 命令进一步检查指令执行后的结果,并作必要的修改。

九、汇编命令(Assemble Command)

若在调试中发现程序中的某一部分要改写,或要增补一段等等,就可以直接在 DEBUG 下输入、汇编、运行和调试这一段程序,这比每一次修改都要经过编辑、汇编、连接……这样的过程简便多了。

汇编命令的格式为:

A [地址]

于是从指定的地址开始,可以输入汇编语言的语句,A 命令把它们汇编成机器码从指定的地址单元开始连接存放。

若在命令中没有指定地址,但前面用过汇编命令的话,则接着上一个汇编命令的最后一个单元开始存放。若前面未用过汇编命令,则从CS : 100 单元开始连续存放。

若输入的语句中有错,DEBUG 就显示:

∧error

且重新显示现行的汇编地址,等待新的输入。

DEBUG 支持标准的 8086 / 8088 汇编语言语法(和 8087 指令系统),具有以下一些规则:

1、所有输入的数字值全为十六进制数,可输入1~4个十六进制数字字符。

2、前缀助记符必须在相关的指令之前输入,也可以分别放在不同的行。

3、段超越助记符为 CS: DS: ES:和 SS

4、串操作助记符中,必须注明串操作的长度,即说明是字操作还是字节操作。

5、交叉段返回(远返回)的助记符为 RETF。

6、汇编程序能自动汇编短、近和远的转移和调用,取决于到目的地址的字节位移量。这些也能够由 NEAR 和 FAR 前缀来超越。例如:

0100 0500 JMP 502 ; 两字节短转移指令

0100 0502 JMP NEAR 505 ;三字节近转移指令

0100 0505 JMP FAR 50A ;五字节远转移指令

7、DEBUG 不能确定某些操作数涉及的是字存储单元还是字节存储单元。在这种情况下,必须用前缀“WORD PRT”(可缩写为“WO”)或“BYTE PRT”(可缩写为“BY”)来明确说明数据类型。例如:

NEG BYTE PTE [128]

DEC WO [SI]

8、DEBUG 也不能确定一个操作数是立即数还是存储单元的地址。所以 DEBUG 中把存储单元的地址,放在方括号中。例如:

MOV AX,21 ;把 21H 送至AX

MOV AX,[21] ;把地址为21H 以及 21H+1 的存储单元的内容送至AX。

9、两个最常用的伪指令 DB 和 DW 也能被使用,用来直接把字节和字的值送入相应的存储单元。

例如:

DB 1,2,3,4,“THIS IS AN EXAMPLE”

DB 1000,2000,3000,“BACH”

10、DEBUG 支持所有形式的寄存器间接寻址命令。例如:

ADD BX,34[BP+2][SI-1]

POP [BP+DI]

11、DEBUG 支持所有的操作码的同义词。例如:

LOOPZ 100

JA 200

下面我们举一个例子,来说明 A 命令的使用:

-acs : 0100

08F8 : 0100 db 30,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46 08F8 : 0110 mov si, 0100

08F8 : 0113 mov di, 0200

08F8 : 0116 mov cx,10

08F8 : 0119 rep movsb

08F8 : 011B hit

08F8 : 011C

先用伪指令 DB 输入要传送的源操作数;然后输入数据块传送程序。在程序输入完毕后,最后一行不输入内容,直接按<CR>使返回 DEBUG 。

为了验证输入的程序是否正确,可以用反汇编命令(在后面介绍)U。

-ucs : 0110

08F8 : 0110 BE0001 MOV SI, 0100

08F8 : 0113 BF0002 MOV DI, 0200

08F8 : 0116 B91000 MOV CX, 0010

08F8 : 0119 F3 REPZ

08F8 : 011A A4 MOVSB

08F8 : 011B F4 HLT

08F8 : 011C 0000 ADD [BX+SI], AL

08F8 : 011E 0000 ADD [BX+SI], AL

08F8 : 0120 0000 ADD [BX+SI], AL

08F8 : 0122 0000 ADD [BX+SI], AL

08F8 : 0124 0000 ADD [BX+SI], AL

08F8 : 0126 0000 ADD [BX+SI], AL

08F8 : 0128 0000 ADD [BX+SI], AL

08F8 : 012A 0000 ADD [BX+SI], AL

08F8 : 012C 0000 ADD [BX+SI], AL

我们的程序到 08F8 :011B 单元结束,后面的是原存储单元中的内容,经反汇编后所得到的指令形式。

十、反汇编命令(Unassemble Command)

若在内存某一区域中,已经有了某一个程序的目标码,为了能清楚了解此程序的内容,就希望能把目标程序反汇编为源程序,这就要用到 U 命令。

U 命令有两种常用的格式。

1、一种格式为:

U

或U 地址

则从指定的地址开始,反汇编 16 个字节(在系统的 40 列显示方式),或反汇编 32 个字节(在 80 列显示方式)。

若在命令中没有指定地址,则以上一个 U 命令的最后一条指令的地址的下一条单元作为起始地址;若没有输入过 U 命令,则以由 DEBUG 初始化的段寄存器的值,作段地址;以0100作为地址位移量。例如:

A>debug examll.exe

-u

091C : 0000 B81F09 MOV AX, 091F

091C : 0003 8ED8 MOV DS,AX

091C : 0005 8EC0 MOV ES,AX

091C : 0007 B82209 MOV AX,0922

091C : 000A 8ED0 MOV SS,AX

091C : 000C B86400 MOV AX,0064

091C : 000F 8EE0 MOV SP,AX

091C : 0011 BE1100 MOV SI,0000

091C : 0014 BF1100 MOV DI,0011

091C : 0017 B91100 MOV CX,0011

091C : 001A FC CLD

091C : 001B F3 REPZ

091C : 001C A6 CMPSB

091C : 001D 7505 JNZ 0024

091C : 001F B000 MOV AL,00

这样的 U 命令一次显示 32 个字节(80列显示格式),但程序未完,可再用 U 命令接着显示。

2、第二种格式为

U 范围

对指定范围的内存单元进行反汇编。

范围可以由起始地址,结束地址来规定,例如:

U 04BA : 0100 0108

也可以由起始地址及长度来规定,例如

U 04BA :0100 L7

这与上一个命令的效果是相同的。

若命令中规定结束地址,则结束地址中只能包含地址位移量。例如:

-ucs : 0000 0029

091C :0000 B81F09 MOV AX,091F

091C :0003 8ED8 MOV DS,AX

091C :0005 8EC0 MOV ES, AX

091C :0007 B82209 MOV AX,0922

091C :000A 8ED0 MOV SS, AX

091C :000C B86400 MOV AX, 0064

091C :000F 8BE0 MOV SP, AX

091C :0011 BE0000 MOV SI, 0000

091C :0014 BF1100 MOV DI, 0011

091C :0017 B91100 MOV CX,0011

091C :001A FC CLD

091C :001B F3 REPZ

091C :001C A6 CMPSB

091C :001D 7505 JNZ 0024

091C :001F B000 MOV AL,00

091C :0021 EB03 JMP 0026

091C :0023 90 NOP

091C :0024 B0FF MOV AL,0FF

091C :0026 A22200 MOV [0022],AL

091C :0029 F4 HLT

此命令一次把指定范围的内容反汇编出来。故若已经要反汇编的程序的长度(字节数),则用此命令一次可把整个程序都反汇编出来,这是比较方便的。

十一、输入命令(Input Command)

此命令能从指定的端口输入一个字节且显示出来。命令的格式为:

I 端口地址

例:

I 34

5F

从端口地址 34H 输入一字节的内容 5FH

十二、输出命令(Output Command)

此命令能向指定的端口输出一个字节,命令的格式为:

O 端口地址字节值

十三、命名命令(Name Command)

此命令有两个功能:

1、把命令中给定的两个文件标识符(filespec)格式化,且放在 CS:5C 和 CS:6C 的两个文件控制块中(若在调用 DEBUG 程序时具有一个文件标识符,则它已格式化在 CS:5C 的文件控制块中)。

文件控制块是后面要介绍的 Load 命令和 Write 命令所需要的,且能提供所要求的文件名。

2、能把命令中打入的文件标识符和别的参数,精确地按照打入的情况,包括定界符,放至自 CS:81 开始的参数保存区中,在 CS:80 中保存输入的字符个数。在寄存器 AX 中保存前两个文件标识符中的驱动器标志。

N 命令的格式为:

N 文件标识符(文件标识符)

若在调用 DEBUG 程序时,没有规定文件标识符,则必须先用 N 命令把要调用的文件标识符格式化到 CS:51 的文件控制块中,才能用 Load 命令把它调入内存以进行调式。例

如:

A> DEBUG

- N myprog

- L

为了定义正在调式的程序所需要的文件标识符及其它参数,可输入以下命令:A> DEBUG myprog

N file1 file2

在这种情况下,在调用 DEBUG 时,就已经把文件 myprog 调入,且放在自 CS :100 开始的存储区中,而且此文件的文件控制块已格式化在 CS:5C 开始的区域中。

而 N 命令要格式化 file1 和 file2 的文件控制块至 CS:5C 和 CS:6C处,这样 file1 文件控制块就把原来的 myprog 的文件控制块冲掉了。

N 命令还把命令行中除命令字母 N 以外的所有字符(包括定界符)放至 CS :81 起始的缓冲区中,在 CS :80 中包含了字符个数。例如:

-n exam1.obj

-dcs : 0000

08F8 : 0000 CD 20 00 50 00 9A EE FE - 1D F0 42 02 07 06 70 02 M.P..nB.PB...P.

08F8 : 0010 07 06 E2 04 3B 05 3B 05 - 01 01 01 00 02 FF FF FF ..b.:.:..............

08F8 : 0020 FF FF FF FF FF FF FF FF - FF FF FF FF 04 06 CA 2A ....:.:.............J*.

08F8 : 0030 07 06 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ....:.:...............

08F8 : 0040 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ....:.:...............

08F8 : 0050 CD 21 CB 00 00 00 00 00 - 00 00 00 00 00 45 58 41 M!K...........EXA.

08F8 : 0060 4D 21 20 20 20 4F 42 4A - 00 00 00 00 00 20 20 20 MI.OBJ..............

08F8 : 0070 20 20 20 20 20 20 20 20 - 00 00 00 00 00 00 00 00 ........................

-d

08F8 : 0080 0A 20 45 58 41 4D 31 2E - 4F 42 4A 0D 0D 3A 0D 00 .EXAM1.OBJ....

08F8 : 0090 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ....:.:.................

08F8 : 00A0 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ....:.:.................

08F8 : 00B0 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 ....:.:.................

08F8 : 00C0 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 ....:.:.................

08F8 : 00D0 00 00 00 00 00 00 00 00 - 00 00 00 00 00

00 00 00 ....:.:.................

08F8 : 00E0 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ....:.:.................

08F8 : 00F0 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ....:.:.................

十四、装入命令(Load Command)

L 命令有两种基本的功能:

1、把磁盘上指定区域(指定驱动器和指定扇区范围)的内容,装入到内存的指定区域中去,命令的格式为:

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

其中地址是装入内存的起始地址,若输入时没有给定段地址,则 L 命令认为段地址包含在CS 中,第一个扇区号是指定的起始的相对扇区号,后一个是指定要装入的扇区数,L 命令一次能读入的最大区段数为 80H 。例如:

L 400 :100 1 10 32

是指从 B 驱动器(由驱动器号 1 指定)相对扇区号 10H 开始装 32H (50)个扇区的内容至内存从 400 :100 开始的区域中。

2、装入指定的文件

命令格式为:

L 地址

或L

此命令装入已在 CS :5C中格式化的文件控制块所指定的文件。所以在使用这种格式的 L 命令之前,在 CS :5C 中必须有已格式化的文件标识符,这通常可以先用一条 N 命令来实现。

若命令中没有规定地址,则文件装入到 CS :100 开始的内存区域中,若命令中规定了地址,则装入至指定的区域中,但若是具有扩展名 .COM 或 .EXE 的文件,则始终是装入至CS :100的区域中,即使在命令中指定了地址,此地址也将忽略。

在 BX 和 CX 中包含所读的文件的字节数,但若所读的文件具有扩展名 .EXE,则 BX 和CX 中包含实际的程序长度。

十五、写命令(Write Command)

此命令把正在调试的数据写入磁盘中。W 命令一次能写入的最大区段数为 80H ,W 命令也有两种基本格式:

1、把数据写至指定的区段

命令的格式为:

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

此命令把由地址所指定的内存区域中的数据,写入至指定的驱动器,起始扇区由命令中的相对扇区号指定,要写入的区段数也由命令中给定。

注释:

⑴ 写数据至指定扇区的操作要十分小心,因若有差错,就会破坏盘上的原有内容。

⑵ 若命令中给定的地址,只包含地址位移量的话,则 W 命令认为段地址在 CS 中。

⑶记住起始扇区号和区段数,都是用十六进制数表示的。例如:

WIFD 1 100 A

此命令把内存起始地址为 CS :01FD 的缓冲区中的数据,写入到驱动器B,起始扇区号

为相对扇区号 100H(256),共写入 0AH(10)个扇区。

2、写入至指定的文件中

命令的格式为:

W

或W 地址

此命令把指定内存区域中的数据,写入到由 CS:5C处的文件控制块所规定的文件中。

若命令中没有指定地址,则内存区域从 CS :100 开始;若命令中给定地址,则从指定地址开始。

在用 W 命令以前,CS:5C 中必须有要写入的文件控制块,这可以先用一条 N 命令来实现。

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

若企图写入具有扩展名 .EXE 或 .HEX的文件,则 DEBUG 显示一个错误信息。因为这些文件的写入要用一种特殊格式,而对此格式 DEBUG 程序不支持。

十六、退出命令(Quit Command)

当把程序调试完,就要退出 DEBUG 程序,返回 DOS ,可采用 Q 命令。命令格式为:Q

Q 命令并不把在内存中的文件存盘。若需要存盘的话,必须先用 W 命令。

十七、F(填充)命令

把表中的值填到内存单元中。

格式:F range List

说明:如果 List 所含的字节数比 range 小,则 List 被重复使用,如 List 所含的字节数比range 大,则多余被略去。

-D 0280 029F

0CDD:0280 45 98 29 03 39 AD 73 32 -05 6B 07 89 48 93 94 09

0CDD:0290 75 32 68 67 39 40 0A 0B -34 23 44 14 56 76 67 90

-F 0280 L20 ‘ABCDEF0123456789’;把 ASCII 码填入到从280 开始的32 个单元里

-D 0280 029F

0CDD:0280 41 42 43 44 45 46 30 31 -32 33 34 35 36 37 38 39

0CDD:0290 41 42 43 44 45 46 30 31 -32 33 34 35 36 37 38 39

-D 0100 010F

0CDD:0100 73 83 84 8C 9D 8A 21 34 -CD DC DE ED AD 8D 9D 9A

-F 0100 L9 ‘ABCDEF0123456789’;删除多余的3-9

-D 0100 010F

0CDD:0100 41 42 43 44 45 46 30 31 -32 DC DE ED

AD 8D 9D 9A

十八、M (传送)命令

把由 range 规定的内存单元区域的内容传送到 address 开始的单元。

格式:M range address ;range 指定被传送内容原来的首地址和目标地址,address 指定传送到内存开始单元的目标地址

说明:传送期间总是执行覆盖传送,源区域的数据保持不变。

-D DS:0100 010F

0CDD:0100 CD 84 93 93 20 27 20 20 -29 19 93 29 29 82 74 92

-D DS:0000 000F

0CDD:0000 84 93 29 20 43 58 37 03 -29 F9 A8 C8 D8 38 8D 8A

-DCS:0800 080F

0CDD:0800 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00

-M CS:0000 000F CS:0100 ;把CS:0000开始的 0FH 个单元内容传送到 CS:0100开始的单元里。

-D DS:0100 010F

0CDD:0100 84 93 29 20 43 58 37 03 -29 F9 A8 C8 D8 38 8D 8A

-M CS:0100 010F CS:0800 ;把 DS:100 开始的0FH 个单元内容传送到 CS:0800 开始的单元里。

-D CS:0800 080F

0DDD:0800 84 93 29 20 43 58 37 03 -29 F9 A8 C8 D8 38 8D 8A

下面以程序段来说明 M (传送)命令的运用

例:

-U

0CDE:0100 B90500 MOV CX,0005H

0CDE:0103 BF5001 MOV DI,0150H

0CDE:0106 B3FF BBB: MOV BL,0FFH

0CDE:0108 8A05 MOV AL,[DI]

0CDE:010A 3C3A CMP AL,3AH

0CDE:010C 7306 JNB DONE

0CDE:010E 2C30 SUB AL,30H

0CDE:0110 7202 JB DONE

0CDE:0112 88C3 MOV BL,AL

0CDE:0114 88D8 DONE:MOV AL,BL

0CDE:0116 88450A MOV [DI+0A],AL

0CDE:011A E2EA LOOP BBB

0CDE:011C CD20 INT 20

0CDE:011E CD 21 INT 21

使用 M 命令删除该程序的第四条指令MOV AL,[DI]

-M 010A 011E 0108

-U ;此时,用 U 命令反汇编看到MOV AL,[DI] 已被删除。0CDE:0100 B90500 MOV CX,0005H

0CDE:0103 BF5001 MOV DI,0150H

0CDE:0106 B3FF BBB: MOV BL,0FFH

0CDE:0108 3C3A CMP AL,3AH

0CDE:010A 7306 JNB DONE

0CDE:010C 2C30 SUB AL,30H

0CDE:011E 7202 JB DONE

0CDE:0110 88C3 MOV BL,AL

0CDE:0112 88D8 DONE:MOV AL,BL

0CDE:0114 88450A MOV [DI+0A],AL

0CDE:0117 47 INC DI

0CDE:0118 E2EA LOOP BBB

0CDE:011A CD20 INT 20

0CDE:011C CD 21 INT 21

使用 M 命令把被删除的指令 MOV AL,[DI] 插入程序段中。

-M 108 11C 208 ;把要插入的地方至程序结束指令 INT 20 的下一条指令的程序段移开。

注:此时的目标首地址是208,也就是说,目标末地址是21C。

-A108 ;使用 A 命令插入指令 MOV AL,[DI]

0CDE:108 MOV AL,[DI]

0CDE:10A

-M 208 21C 10A ;把移开的程序段放回被插入指令的后面

-U ;用 U 命令看到指令已被插入

0CDE:0100 B90500 MOV CX,0005H

0CDE:0103 BF5001 MOV DI,0150H

0CDE:0106 B3FF BBB: MOV BL,0FFH

0CDE:0108 8A05 MOV AL,[DI]

0CDE:010A 3C3A CMP AL,3AH

0CDE:010C 7306 JNB DONE

0CDE:010E 2C30 SUB AL,30H

0CDE:0110 7202 JB DONE

0CDE:0112 88C3 MOV BL,AL

0CDE:0114 88D8 DONE:MOV AL,BL

0CDE:0116 88450A MOV [DI+0A],AL

0CDE:0119 47 INC DI

0CDE:011A E2EA LOOP BBB

汇编语言程序的设计试卷与答案

汇编语言程序设计试卷 一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分) 1.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。 ① 无符号十进制数136 ② 带符号十进制数-120 ③ 压缩型BCD码十进制数88 ④ 8位二进制数-8的补码表示 2.指令指针寄存器是()。 ① IP ② SP ③ BP ④ PSW 3.当执行指令ADD AX,BX后,若AX的内容为2BA0H, 设置的奇偶标志位PF=1,下面的叙述正确的是()。 ① 表示结果中含1的个数为偶数 ② 表示结果中含1的个数为奇数 ③ 表示该数为偶数 ④ 表示结果中低八位含1的个数为偶数 4.完成将累加器AL清零,并使进位标志CF清零, 下面错误的指令是()。 ① MOV AL,00H ② AND AL,00H

③ XOR AL,AL ④ SUB AL,AL 5.下列指令执行后总是使CF=0,OF=0的是()。 ① AND ② NEG ③ NOT ④ INC 6.完成同指令XCHG AX,BX相同功能的指令或指令序列是()。 ① MOV AX,BX ② MOV BX,AX ③ PUSH AX POP BX ④ MOV CX,AX MOV AX,BX MOV BX,CX 7.设AH=0,AL=06H,BL=09H,执行指令 ADD AL,BL AAA 之后,其结果应是()。 ① AH=01,AL=05 ② AH=1 AL=15 ③ AH=0 AL=0FH ④ AH=0 AL=05 8.设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为

汇编语言程序设计实验教程

汇编语言程序设计实验教程

目录 第一章上机过程 (4) 1.1编辑源程序 (4) 1.2 汇编源程序 (5) 1.3连接目标程序 (6) 1.4运行程序 (7) 第二章DEBUG命令祥解 (8) 2.1 DEBUG程序使用 (8) 2.2 DEBUG的常用命令 (8) 第三章汇编语言程序设计实验 (13) 3.1实验一顺序与分支程序设计 (13) 3.2 实验二循环与子程序程序设计 (15) 3.3 实验三算术运算与代码转换程序设计 (16) 3.4 实验四字符串的匹配与替换程序设计 (18) 3.5 实验五输入输出程序设计 (19) 第四章部分实验参考答案 (21)

第一章上机过程 1.1编辑源程序 汇编语言源程序:用汇编语句编写的解决应用问题的程序。 汇编程序:将汇编语言源程序翻译成机器语言程序的系统。 汇编:将汇编语言程序翻译成机器语言程序的过程。 在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立ASCII码文本文件的软件即可。 (1)编辑软件 编辑软件:EDIT、QE、WORD、NOTEPAD等。 当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。 (2)汇编程序 有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。 (3)连接程序 用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的目标代码程序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。 (4)辅助工具程序(.EXE) 进行汇编语言程序调试和文件格式转换的程序有: https://www.360docs.net/doc/b63996942.html, 动态调试程序 EXE2BIN.EXE文件格式转换程序

汇编语言程序设计期末考试题

汇编语言程序设计期末考试题 学院(系):学号: 姓名: 计分: 一、项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号 内。每小题1分,共10分) 1.CPU发出的访问存储器的地址是( ) A.物理地址 B.偏移地址C.逻辑地址D.段地址 2.将高级语言的程序翻译成机器码程序的实用程序是( ) A.编译程序 B.汇编程序 C.解释程序 D.目标程序 3.DEC BYTE PTR[BX]指令中的操作数的数据类型是( ) A.字 B.双字C.字节D.四字 4.在下列语句中,BUFFER称为( ) BUFFER DB 01H,0AH A.符号 B.变量 C.助记符D.标号 5.串操作指令中,源串操作数的段地址一定在( )寄存器中。 A. CS B. SS C. DS D. ES 6.使计算机执行某种操作的命令是( ) A.伪指令B.指令 C.标号D.助记符 7.将数据5618H存放在存储单元中的伪指令是( ) A. DATA1 DW 1856H B. DATA1 DB 18H,56H C. DATA1EQU 5618H D. DATA1 DB 18H,00H,56H,00H 8.若AX=3500H,CX=56B8H,当AND AX,CX指令执行后,AX=( ) A.1400H B. 77F8H C. 0000H D. 0FFFFH 9.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍 采用的是( )码。 A. BCD码 B.二进制码 C.ASCII码D.十六进制码 10.用指令的助记符、符号地址、标号和伪指令、宏指令以及规定的格式书写程序的语 言称为( ) A.汇编语言 B.高级语言 C.机器语言 D.低级语言 二、填空题(每空1分,共20分) 1.在8086/8088汇编语言中,有五条串操作指令,其中搜索字符串指令的助记符是______。 2.通常所说的计算机系统包括________和________两大部分。 3.8086/8088存储器分四个段,这四个段的段名所对应的段寄存器分别是________、_____ ___、________、________。 4.现有AX=2000H,BX=1200H, DS=3000H, DI=0002H, (31200H)=50H,(31201H)=02H, (31202H)=40H,请写出下列各条指令独立执行完后有关寄存器及存储单元的内容,并指出标 志位ZF、CF的值。 A.ADDAX,1200H;问AX=________H,ZF=________

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著) 《计算机操作系统原理》 《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。 《数据结构和算法》——这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时) 《软件工程》——这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华) 《Windows 程序设计》——《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本 建议:你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书 关于编程的网站 计算机编程 郭新明-FTP服务器体验式学习课程(张孝祥监制) https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=3997 https://www.360docs.net/doc/b63996942.html,快速开发新闻系统在线播放 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=4708 数字电路基础[宁波电大] https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=774 计算机组成与汇编语言程序设计(赵丽梅)宁波电大 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=1242 操作系统(陈访荣)宁波电大(在线播放) https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=4708 计算机网络(马敏飞)宁波电大 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=1243 https://www.360docs.net/doc/b63996942.html, 2.0快速入门(12)-https://www.360docs.net/doc/b63996942.html, 2.0网站快速导航 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=2501 Internet和Intranet应用(薛昭旺)宁波电大 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=1245 2004年电脑硬件安装调试维修视频教学讲授 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=4825 https://www.360docs.net/doc/b63996942.html, 高级排错技巧 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=768 SQL Server 2000管理专家系列课程 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=4832 开心三人行系列(2):使用Atlas 构建AJAX应用 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=2564 Visual Basic 2005开发技巧系列课程(4): 在Visual Basic 2005中使用.NET Framework 2.0新增功能 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=2526 SQL Server 2005 系列课程-使用ADO https://www.360docs.net/doc/b63996942.html,开发SQL Server 2005 OLAP应用 https://www.360docs.net/doc/b63996942.html,/so/so138.aspx?id=2535

汇编语言程序设计试题A卷

陕西电子信息职业技术学院考试试卷(A) 2011至2012学年度第一学期 期末 班级: 09成教 课程: 汇编语言程序设计 题 号 一 二 三 四 五 合分人 分 数 总 分 (考试时间:120分钟 满分100分) 一、单项选择题(本大题共10小题,每小题2分,共20分) 1. 计算机硬件中最核心的部件是( )。 A. 运算器 B. 主存储器 C. CPU D. 输入 / 输出设备 2. 指令指针寄存器(IP )中存放的内容( )。 A. 指令 B. 指令地址 C. 操作数 D. 操作数地址 3. 寄存器间接寻址方式中,要寻找的操作数位于( )中。 A. 通用寄存器 B. 内存单元 C. 段寄存器 D. 堆栈 4. I/O 端口的编址方式分为统一编址和( )。 A. 独立编址 B. 选择编址 C. 设置编址 D. 控制编址 5. 汇编语言程序中可执行的指令位于( )中。 A. 数据段 B. 堆栈段 C. 代码段 D. 附加数据段 6. 循环结构设计中,要考虑的核心问题是( )。 A. 循环的控制 B. 选择循环结构 C. 设置循环参数初始值 D. 修改循环控制参数 7. 在汇编中用于管理和控制计算机相关功能的指令是( )。 A. 伪指令 B. 机器指令 C. 宏指令 D. 目标指令 班级 姓名 学号 — — — — — — — — — — — — — — — — 密 — — — — — — — — — 封 — — — — — — — — — — 线 — — — — — — — — — — — — — — — —

8. 识别中断源的方法包括查询中断和()共两种类型。 A. 指令中断 B. 故障中断 C. 矢量中断 D. 实时时钟中断 9. CPU与I/O设备之间需要传输的信息通常包括()、状态信息 和控制信息。 A. 编址信息 B. 格式信息 C. 中断信息 D. 数据信息 10. 一般情况下,汇编源程序应由数据段、()和代码段共三个逻 辑段组成。 A. 逻辑段 B. 堆栈段 C. 指令段 D. 类型段 二、名词解释(本大题共5小题,每小题4分,共20分) 11. 微处理器: 12. 寻址方式: 13. 伪指令: 14. 中断源:

汇编语言程序设计教学大纲

《汇编语言程序设计》课程教学大纲 二、课程简介 汇编语言是计算机能够提供给用户使用的最快最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而,对程序的空间和时间要求很高的场合及需要直接控制硬件的应用场合,汇编语言的应用是必不可少三、课程目标 汇编语言课程是计算机专业的一门专业选修课。通过本课程的学习,应使学 生系统地了解计算机组成原理与内部的运行机理,掌握汇编语言程序设计及相关 知识,为学习本专业后继课程和进行与硬件有关的技术工作打下良好基础。通过 上机实验,使学生受到软硬件实验的初步训练,并培养学生分析问题和解决问题 的能力。 四、教学内容及要求 第一章基础知识 1.教学内容 (1) 为什么要用汇编语言编写程序 (2) 进位计数制与不同基数的数之间的转换 (3) 二进制数和十六进制数运算 (4) 计算机中数和字符的表示 (5) 几种基本的逻辑运算 2.基本要求 了解机器指令、代码指令、机器语言、汇编指令、汇编语言、汇编语言源程 序、汇编程序、汇编等概念;掌握进位计数制与不同基数的数之间的转换及

运算;计算机中数和字符的表示;“与”、“或”、“非”、“异或”等几种基本的逻辑运算; 第二章80X86计算机组织 1.教学内容 计算机系统概述、存储器、中央处理机和外部设备。 2.基本要求 理解计算机的硬件和软件系统及其关系。掌握计算机的基本结构及总线;存储器的内容、地址及存储器的分段;中央处理机的组成、80X86系列CPU工作寄存器构成和功能,特别是段寄存器和标志寄存器;外设接口、端口和8086/8088的端口地址范围和访问方法。 第三章80X86的指令系统 1.教学内容(重点内容) IBM PC机的寻址方式、IBM PC机的指令系统。 2.基本要求 熟练掌握IBM PC机寻址方式及物理地址的计算;数据传送、算术、逻辑、串处理、控制转移和处理机控制指令六组中的所有指令的格式、操作、及影响的标志位。了解机器语言的指令组成; 第四章汇编语言程序格式 1.教学内容 汇编程序功能、伪操作、汇编语言程序格式、汇编语言程序的上机过程。 2.基本要求 掌握DEBUG程序和命令及能用DEBUG 程序调试和运行简单小程序;汇编语言上机步骤、汇编程序的功能;数据定义及存储器分配、表达式赋值“EQU”和“=”、段定义、程序开始和结束、对准、基数控制等六类伪操作;汇编语言程序格式中的名字、操作、操作数和注释等项。 第五章循环与分支程序设计 1.教学内容 程序设计的一般步骤和基本结构、循环程序设计和分支程序设计 2.基本要求 掌握汇编语言程序的编制步骤和结构化程序设计的三种基本结构;循环的设计方法和多层循环的设计;分支程序的设计方法,并能编制相应的程序。第六章子程序结构 1.教学内容 子程序的设计方法、嵌套与递归子程序、子程序举例和DOS系统功能调用

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

【汇编语言程序设计】试题及答案合集

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置?1?,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以?先入后出?为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

全国1月高等教育自学考试汇编语言程序设计试题历年试卷

做试题,没答案?上自考365,网校名师为你详细解答! 全国2005年1月高等教育自学考试 汇编语言程序设计试题 课程代码:02321 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填 在题干的括号内。每小题1分,共16分) 1.已知某操作数的物理地址是2117AH,则它的段地址和偏移地址可能是( )。 A.2025∶0F2A B.2108∶00EA C.2000∶017A D.2100∶117A 2.某程序装入内存后,DS=1200H,CS=1400H,则程序中数据段中的数据最多是( )字节。 A.2K B.4K C.8K D.16K 3.以寄存器DI间接寻址的存储器字节单元内容加1的指令是( )。 A.INC [DI] B.INC DI C.INC BYTE PTR[DI] D.ADD [DI],1 4.有语句:COUNT EQU 256,下列四种叙述中,正确的是( )。 A.COUNT是变量 B.COUNT占用一个字节存储单元 C.COUNT是符号常数 D.COUNT占用二个字节存储单元 5.下面指令中,源操作数的寻址方式为立即寻址的是( )。 A.MOV AX,OFFSET A B.MOV AX,A C.MOV AX,A+1 D.MOV AX,A[BX] 6.已知SP=2110H,执行POP AX后,SP寄存器的值是( )。 A.2111H B.2112H C.210FH D.210EH 7.将AX中有符号数除以2的正确指令是( )。 A.SHR AX,1 B.SAR AX,1 C.ROR AX,1 D.RCR AX,1 8.比较BX和SI中的两个存储器地址,若BX≥SI转向HIGH的正确指令是( )。 A.JAE HIGH B.JBE HIGH C.JEG HIGH D.JLE HIGH 9.指令SCASB操作数的段地址一定在( )寄存器中。 A.CS B.DS C.ES D.SS 10.有数据定义语句BUF DW 0ABH,1,10 DUP(3 DUP(1,0),2)汇编后,为变量BUF分配 的存储单元字节数是( )。 A.48H B.90H C.120 D.60 11.下列指令执行后,不改变AL寄存器内容的指令是( )。 1

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

汇编语言程序设计教程(第3版 卜艳萍)参考答案

汇编语言程序设计教程(第3版) 习题参考答案 第1章汇编语言基础知识 思考与练习 1.计算机系统分哪几个层次?简述计算机系统的硬件结构。 1)数字逻辑层 2) 微体系结构层 3) 指令系统层 4) 操作系统层 5) 汇编语言层 6) 高级语言层 7) 应用层 硬件系统是指构成计算机系统的物理实体或物理装置。它由控制器、运算器、存储器、输入设备和输出设备等部件构成。 2.简述用汇编语言进行程序设计的必要性。 1)程序要具有较快的执行时间,或者只能占用较小的存储容量。例如,操作系统的核 心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。 2)程序与计算机硬件密切相关,程序要直接、有效地控制硬件。例如,I/O接口电路 的初始化程序段,外部设备的低层驱动程序等。 3)大型软件需要提高性能、优化处理的部分。例如计算机系统频繁调用的子程序、动 态连接库等。 4)没有合适的高级语言或只能采用汇编语言的时候。例如,开发最新的处理器程序时, 暂时没有支持新指令的编译程序。 5)汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解 密软件、分析和防治计算机病毒等。 3.汉字编码主要分哪几类?每类的功能如何? 汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。 1)为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用 西文标准键盘上的字母数字串表示汉字的编码。目前,汉字输入编码方法主要有三 种:数字编码、拼音编码和字形编码。 2)汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标 码。无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标 识每个汉字。 3)汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息 处理系统内部存储、处理、传输汉字用的编码。 4)字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。4.计算机的字长是怎么定义的,试举例说明。 计算机能同时处理二进制信息的位宽定义为计算机的字长。如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。 5.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值? 用相应进制的数值加上进制标记即可。

汇编语言程序设计试题

汇编语言程序设计试题 一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.设SS=2050H,SP=0140H,则栈顶存贮单元的物理地址是( A ) A.20640H B.2063EH C.2063FH D.21900H 2.使用DOS功能调用时,子程序编号应放在( B ) A.AL B.AH C.AX D.任意指定 3.没有 ..语法错误的输出指令是( B ) P76 A.OUT AX,30H B.OUT DX,AL C.OUT AL,DX D.OUT 30H,AH 4.用MOV指令将十进制数89以非压缩BCD码格式送入AX,可使用的指令是( B ) A.MOV AX,89 B.MOV AX,0809H C.MOV AX,89H D.MOV AX,0809 5.设AX=8765H,DX=4321H,执行CWD指令后,DX中的内容是( B ) P117 A.4321H B.0FFFFH C.8000H D.0001H 6.设CL=05H,要获得CL=0AH,可选用的指令是( A) A.XOR CL,0FH B.NOT CL C.OR CL,0AH D.AND CL,0FH 7.假设执行ADD指令后AL=8CH,再执行DAA指令,AL中的值是( A ) A.92H B.0104H C.74H D.8CH 8.MOV AL,79H ADD AL,B1H 上面指令执行后,设置的标志位CF和ZF的值是( D ) A.CF=0,ZF=1 B.CF=l,ZF=1 C.CF=0,ZF=0 D.CF=1,ZF=0 9.TEST DL,55H P123 JZ NEXT NEXT:…… … 上述程序段,执行JZ指令时能产生转移的情况是( D ) A.DL>55H B.DL<55H C.DL=55H D.DL中第0、2、4、6位均为0 10.假设AL=28H, 执行ROL AL,1 指令之后的情况是( D ) P125 A.AL=14H, CF=1 B.AL=50H, CF=1 C.AL=14H, CF=0 D.AL=50H, CF=0 11. 98的BCD码是(B) A)10011001 B) 10011000 C) 10011010 D) 10001010 12. –0110110 的补码是(A) A) 11001010 B) 11001001 C) 10110110 D) 00110110

第四章MCS-51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)解析

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社) (沈美明,温冬蝉著) 第二章 1.解答:有256个 2.解答:如下图.第一个络子为000B0H字单元,注意,是字单元,第五个格子为000B3H字单元 E5 1E 3C 2A 3.解答: 30022H字节单元内容: ABH 30024H字节单元内容: EFH 30021H字单元内容: AB34H 30022H字单元内容: CDABH 4.解答: 这三个物理地址都是3017AH,说明了不同的段地址和偏移地址对应同一物理地址 5.解答: CS+IP 第一个字的物理地址为: 0AAA40H 6.解答: 条件标志OF,SF,ZF,CF,的值依次为:0,0,0,0 7.下列操作可使用那些寄存器? (1)加法和减法AX,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如AH ,AL等(2)循环计数 CX (3)乘法和除法DX,AX,AH,AL (4)保存段地址CS ,DS,ES,SS (5)表示运算结果为O FLAGS (6)将要执行的指令地址IP (7) 将要从堆栈取出数据的地址BP,SP,SS 8.可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP 9.一一对应; 5--A 4--B 2--C 3--D 12--E 9--F 11--G 10--H 13--I 8--J 7--K 6---L 1--M 15--N 14--O 第三章 1.(1)立即寻址没有 (2)直接寻址7237H (3)使用BX的寄存器寻址没有 (4)使用BX的间接寻址 637DH (5)使用BX的寄存器相对寻址0D5B4H (6)基址变址寻址8E18H (7)相对基址变址004FH 2.根据下列要求,写出相应的汇编指令。 (1)ADD DX,BX (2) ADD AL,[BX][SI] (3) ADD [BX][0B2H], CX (4) MOV AX,2A59H ADD [0524H] ,AX (5) ADD AL ,0B5H

实验一基础汇编语言程序设计

实验一基础汇编语言程序设计 实验目的 1.学习和了解TEC-XP十六位机监控命令的用法; 2.学习和了解TEC-XP十六位机的指令系统; 3.学习简单的TEC-XP十六位机汇编程序设计。 实验内容 1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容; 2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。 3.学习联机使用TEC-XP教学试验系统和仿真终端软件。 实验要求 在使用该教学机之前,应先熟悉教学机的各个组成部分及其使用方法。 实验步骤 1.关闭电源,将大板上的COMl口与PC机的串口相连; 2.接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口为“l”或“2”,其它的设置一般不用改动,直接回车即可; 3.置控制开关为001110(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意。其它实验相同; 4.按一下“RESET”按键,再按一下“START”’按键,主机上显示: 5.用R命令查看寄存器内容或修改寄存器的内容 1.用R命令查看寄存器或修改寄存器内容 1)在命令行提示符状态下输入: R↙;显示寄存器的内容 注:寄存器的内容在运行程序或执行命令后会发生变化。

2)在命令行提示符状态下输入: R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格, 也可有—个或数个空格 主机显示: 寄存器原值:xxxx 在后面输入新的值0036 再用R命令显示寄存器内容,则R0的内容变为0036。 2.用D命令显示存储器内容 在命令行提示符状态下输入: D 2000↙ 会显示从2000H地址开始的连续128个字的内容; 连续使用不带参数的D命令,起始地址会自动加128(即80H)。

相关文档
最新文档