···························································· 
第3 章 chapter3 
寻址方式
计算机是通过执行指令序列来解决问题的,而指令序列由多条指令构成。汇编语言
指令由指令助记符和操作数构成,指令助记符说明指令的功能;操作数由各种不同寻址
方式提供。汇编语言指令格式为: 
指令助记符[操作数1], [操作数2], [操作数3] [;注释] 
执行指令过程中,操作数是指令主要处理对象。如何表示操作数或操作数所在位置
是一个关键。指令中的操作数可以直接给出,也可以存放到寄存器或存储器中。寻找操
作数或操作数位置的方法称为寻址方式。寻址方式可分为三大类,分别为立即寻址方
式、寄存器寻址方式和存储器寻址方式。
学习目标: 
. 了解寻址方式的概念。
. 掌握立即寻址方式的用法。
. 掌握寄存器寻址方式的用法。
. 掌握存储器寻址方式的用法。
3.1 立即寻址方式
操作数直接包含在指令中,紧跟操作码之后,作为指令的一部分存放在代码段中,称
为立即寻址方式。取出指令同时将操作数取出,这样的操作数称为立即数。立即数类似
于C语言中的常数,可以是8位或16位。如果为16位立即数,按小端方式(高高低低) 
规则进行存储。
源操作数为立即寻址方式的示例如下。 
-A 
073F:0100 MOV AL,78H ;立即数78H 传送至AL 
073F:0102 MOV BX,1234H ;立即数1234H 传送至BX 
通过反汇编命令U,可以查看以上两条指令的机器语言,如图3.1所示。
通过图3.1中显示的信息可知每条机器指令的功能。根据存放机器指令内存单元首
E1(寻址方
式引言) 
E2(立即寻址)

第◆3 章 寻址方式4 9 
图3.1 机器语言反汇编成汇编语言
偏移地址,画出机器指令内存示意图,如图3.2所示。
图3.2 机器指令内存示意图
注意: 
目的操作数不能为立即寻址,源操作数可为立即寻址。如下指令不合法: 
如果是字符常数,需加上单引号或双引号。例如: 
MOV AL,'A' 
MOV CX,'AB' 
或 
MOV CX,"AB"

5 0 ◆汇编语言案例教程(微课版) 
3.2 寄存器寻址方式
指令中所需操作数存放在CPU 内部寄存器中,称为寄存器寻址方式。CPU 内部可
用的寄存器有8位寄存器和16位寄存器。
8位寄存器有:AL、AH、BL、BH、CL、CH、DL和DH。
16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP、ES、SS、CS和DS。
寄存器寻址方式可用于目的操作数,也可用于源操作数。
1.目的操作数为寄存器寻址方式,源操作数为立即寻址方式 
MOV AX,1278H ;将立即数1278H 传送至AX 
MOV CL,56H ;将立即数56H 传送至CL 
2.目的操作数为存储器寻址方式,源操作数为寄存器寻址方式 
MOV VAL,AL ;将AL 传送至符号地址VAL 指向的字节单元
MOV BUF,CX ;将CX 传送至符号地址BUF 指向的字单元
其中,VAL为字节类型变量,BUF为字类型变量。
3.目的操作数和源操作数均为寄存器寻址方式 
MOV AL,CH ;将CH 传送至AL 
MOV BX,DX ;将DX 传送至BX 
指令中操作数存放在寄存器中,执行指令过程会减少访问内存单元次数,采用寄存
器寻址方式能提高指令执行速度。通常情况下,指令中操作数采用寄存器寻址方式,但
是寄存器毕竟有限,寄存器寻址方式应根据实际问题来确定。
注意: 
两个操作数均为寄存器寻址方式,寄存器必须位数相同。如下指令不合法: 
3.3 存储器寻址方式
指令中所需操作数存放在存储器的存储单元中,称为存储器寻址方式。每一个存储
单元由唯一的一个物理地址标识,物理地址通过逻辑地址可求得。
编写指令时,指令中操作数所在存储单元的地址用偏移地址表示,CPU 访问存储单
元需通过物理地址来访问。根据存储单元偏移地址不同的提供方法,可将存储器寻址方
E3(寄存器
寻址) 
E4(存储器
寻址引言)

第◆3 章 寻址方式5 1 
式分为5种,分别为直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加
变址寻址方式和相对基址变址寻址方式。
3.3.1 直接寻址方式
指令中直接给出所需操作数偏移地址,该寻址方式称为直接寻址方式。偏移地址需
用“[]”括起来,紧跟操作码之后,作为指令的一部分存放在代码段中。取指令时,将偏移
地址一起取出,通过偏移地址和段基址计算出物理地址。CPU 根据物理地址指向的存储
单元取出所需操作数。
一般情况下,直接寻址方式默认数据段DS;如果使用其他段中的数据,则必须使用
段超越前缀进行说明。
1.源操作数为直接寻址方式
1)字操作
【例3.1】 设(21000H)=56H,(21001H)=89H,(21002H)=36H,(21003H)= 
66H,DS=2000H,执行MOVCX,[1001H]后,CX中数据为什么? 
分析:MOVCX,[1001H]指令两个操作数寻址方式及功能分析如下。
源操作数:[1001H]为直接寻址方式,默认数据段DS,EA=1001H,PA=DS×10H+ 
EA=2000H×10H+1001H=21001H。
目的操作数:CX为寄存器寻址方式。
功能:该指令将21001H 指向的字单元中数据传送至CX。直接寻址方式的寻址规
则分为三步,如图3.3所示。
图3.3 字操作、源操作数为直接寻址方式
E5(直接寻址)

5
2 
◆

汇编语言案例教程(微课版)

2)字节操作
【例3.设DS=2000H,(22000H)=90H,(22001H)=29H,(22002H)=16H,

2】执

行MOVBL,[2002H]后,BL 中数据为什么? 
分析:MOVBL,[2002H]指令两个操作数寻址方式及功能分析如下。
源操作数:[2002H]为直接寻址方式,默认数据段DS,偏移地址EA=2002H,物理

地址PA=DS×10H+EA=2000H×10H+2002H=22002H 。
目的操作数:BL 为寄存器寻址方式。
功能:该指令将22002H 指向的字节单元中数据取出传送至BL 。直接寻址方式的

寻址规则分为三步,如图3.

4所示。


图3.字节操作、源操作数为直接寻址方式

4 

【例3.22000H)=90H,(22001H)=29H,
(
3】设DS=2000H,ES=3000H,(
32002H)=06H,执行MOV 

22002H)=16H,(32000H)=19H,(32001H)=32H,(

DH,ES:[2002H]后,DH 中数据为什么? 
分析:MOVDH,ES:[2002H]指令两个操作数寻址方式及功能分析如下。
源操作数:[2002H]为直接寻址方式,默认数据段DS 。因为采用段超越,所以使用

附加段ES 。偏移地址EA=2002H,物理地址PA=ES×10H+EA=3000H×10H+ 

2002H=32002H 。
目的操作数:DH 为寄存器寻址方式。
功能:该指令将附加段32002H 指向的字节单元中数据取出传送至DH 。直接寻址

方式过程如图3.

5所示。

2. 
目的操作数为直接寻址方式
1)字操作
【例3.设DS=3000H,(32000H)=90H,(32001H)=29H,(32002H)=16H,

4】

(32003H)=86H,AX=1030H,执行MOV[2002H],AX 后,目的操作数中数据为什么? 
分析:MOV[2002H],AX 指令两个操作数寻址方式及功能分析如下。
源操作数:AX 为寄存器寻址方式。


◆

第
3 
章 寻址方式53 


图3.字节操作、源操作数采用段超越的直接寻址方式

5 

目的操作数:[2002H]为直接寻址方式,默认数据段DS,偏移地址EA=2002H,物
理地址PA=DS×10H+EA=3000H×10H+2002H=32002H 。

功能:该指令将AX 中数据传送至32002H 指向的字单元中。直接寻址方式过程如
图3.

6所示。


图3.字操作、目的操作数为直接寻址方式

6 

2)字节操作
【例3.设DS=3000H,(32000H)=90H,(32001H)=29H,(32002H)=16H,

5】

(32003H)=86H,CH=10H,执行MOV[2002H],CH 后,目的操作数中数据为什么? 
分析:MOV[2002H],CH 指令两个操作数寻址方式及功能分析如下。
源操作数:CH 为寄存器寻址方式。
目的操作数:[2002H]为直接寻址方式,默认数据段DS,偏移地址EA=2002H,物

理地址PA=DS×10H+EA=3000H×10H+2002H=32002H 。
功能:该指令将CH 中数据传送至32002H 指向的字节单元中。直接寻址方式过程
如图3.

7所示。


5 4 ◆汇编语言案例教程(微课版) 
图3.7 字节操作、目的操作数为直接寻址方式 
注意: 
直接寻址方式用于处理存储单元中的数据,其操作数是存储变量中的数据,该
寻址方式可在64KB段内进行寻址。 
立即寻址方式与直接寻址方式的区别如下。 
MOV AX,2002H ;将立即数2002H 传送至AX 
MOV AX,[2002H] ;将DS 段2002H 指向的字单元中数据传送至AX 
3.3.2 寄存器间接寻址方式
指令中的操作数存放在存储单元中,存储单元偏移地址存放在寄存器中,该寻址方
式称为寄存器间接寻址。存放存储单元偏移地址的寄存器有4个,分别为BX、BP、SI和
DI。每个寄存器使用时必须用“[]”括起来。寄存器间接寻址方式若不使用段超越前缀, 
则规定如下。 
偏移地址由BX、SI或DI寄存器指定,默认数据段DS。物理地址计算方法: 
PA=DS×10H+BX/SI/DI 
偏移地址由BP寄存器指定,默认堆栈段SS。物理地址计算方法: 
PA=SS×10H+BP 
1.源操作数为寄存器间接寻址方式
字操作。
【例3.6】 设DS=2000H,(22000H)=90H,(22001H)=29H,(22002H)=16H, 
BX=2001H,执行MOVAX,[BX]后,AX中数据为什么? 
分析:MOVAX,[BX]指令两个操作数寻址方式及功能分析如下。
源操作数:[BX]为寄存器间接寻址方式,默认数据段DS,EA=2001H,PA=DS× 
10H+EA=2000H×10H+2001H=22001H。
目的操作数:AX为寄存器寻址方式。
功能:该指令将22001H 指向的字单元中数据传送至AX。寄存器间接寻址方式的
E6(寄存器
间接寻址)

◆ 

第
3 
章 寻址方式55 

寻址规则分为三步,如图3.

8所示。


图3.字操作、源操作数用BX 
作寄存器间接寻址方式

8 

7】

【例3.设DS=2000H,SS=3000H,BP=0001H,(22000H)=90H,(22001H)= 

29H,(22002H)=16H,(30000H)=69H,(30001H)=09H,(30002H)=03H,执行
MOVDX,[BP]后,DX 中数据为什么? 

分析:MOVDX,[BP]指令两个操作数寻址方式及功能分析如下。

源操作数:[BP]为寄存器间接寻址方式,默认堆栈段SS,EA=0001H,PA=SS× 
10H+0001H=3000H×10H+0001H=30001H 。

目的操作数:DX 为寄存器寻址方式。

功能:该指令将30001H 指向的字单元中数据传送至DX 。寄存器间接寻址方式的

寻址规则分为三步,如图3.

9所示。

图3.9字操作、源操作数用BP作寄存器间接寻址方式
1. 设DS=2000H,(22000H)=90H,(22001H)=29H,(22002H)=16H,SI= 
2002H,执行MOVCH,[SI]后,CH 内容是什么? 

5 6 ◆汇编语言案例教程(微课版) 
2.设DS=3000H,SS=2000H,DI=0001H,(22000H)=90H,(20001H)=29H, 
(30001H)=09H,(30002H)=03H,执行MOVDL,[DI]后,DL内容是什么? 
2.目的操作数为寄存器间接寻址方式
【例3.8】 设ES=2000H,(23101H)=02H,(23102H)=82H,(23103H)=10H,SI 
=3103H,DL=05H,执行MOVES:[SI],DL后,目的操作数中数据为什么? 
分析:MOVES:[SI],DL指令两个操作数寻址方式及功能分析如下。
源操作数:DL为寄存器寻址方式。
目的操作数:[SI]为寄存器间接寻址方式,EA=3103H,默认数据段DS,因为采用
段超越,所以使用附加段,PA=ES×10H+EA=2000H×10H+3103H=23103H。
功能:该指令将DL中数据传送至23103H 指向的字节单元中。寄存器间接寻址方
式的寻址规则分为三步,如图3.10所示。
图3.10 字节操作、目的操作数采用段超越用SI寄存器间接寻址方式 
设ES=3000H,(23101H)=02H,(23102H)=82H,(23103H)=10H,BX= 
3101H,AX=0502H,DS=2000H,执行MOV [BX],AX 后,目的操作数数据为
什么? 
3.3.3 寄存器相对寻址方式
指令中操作数存放存储单元,存储单元偏移地址由寄存器(SI、DI、BX、BP)和一个8 
位或16位相对位移量之和决定,该寻址方式称为寄存器相对寻址方式。寄存器相对寻
址方式,若不采用段超越,则规定如下。 
使用BX、SI或DI寄存器,默认数据段DS。物理地址计算方法如下。
PA=DS×10H+BX/SI/DI+8位相对位移量/16位相对位移量
E7(寄存器
相对寻址)

第◆3 章 寻址方式5 7 
使用BP寄存器,则默认堆栈段SS。物理地址计算方法如下。
PA=SS×10H+BP+8位相对位移量/16位相对位移量 
寄存器相对寻址书写方式有以下两种。 
MOV AL,[BX]10H 或MOV AL,[BX+10H] 
MOV BX,01H[SI] 或MOV BX,[01H+SI] 
MOV [DI+123H],CH 或MOV [DI]123H,CH 
MOV [BP+03H],DX 或MOV [BP]03H,DX 
1.源操作数为寄存器相对寻址方式
【例3.9】 设DS=5000H,(52000H)=90H,(52001H)=78H,(52002H)=56H, 
BX=2000H,执行MOVDX,[BX]01H 后,DX中数据为什么? 
分析:MOVDX,[BX]01H 指令两个操作数寻址方式及功能分析如下。
源操作数:[BX]01H 为寄存器相对寻址方式,默认数据段DS,EA=BX+01H= 
2000H+01H=2001H,PA=DS×10H+EA=50000H+2001H=52001H。
目的操作数:DX为寄存器寻址方式。
功能:该指令将52001H 指向的字单元中数据传送至DX。寄存器相对寻址方式的
寻址规则分为三步,如图3.11所示。
图3.11 字操作、源操作数为寄存器相对寻址方式 
设DS=5000H,(52000H)=90H,(52001H)=78H,(52002H)=56H,BX= 
2000H,执行MOVCL,[BX]02H 后,CL的内容是什么?

5 8 ◆汇编语言案例教程(微课版) 
2.目的操作数为寄存器相对寻址方式
1)字操作
【例3.10】 设DS=3000H,(31008H)=90H,(31009H)=78H,(3100AH)=56H, 
DI=1000H,BX=9163H,执行MOV [DI+09H],BX后,目的操作数中数据为什么? 
分析:MOV [DI+09H],BX指令两个操作数寻址方式及功能分析如下。
源操作数:BX为寄存器寻址方式。
目的操作数:[DI+09H]为寄存器相对寻址方式,默认数据段DS,EA=DI+09H= 
1000H+09H=1009H,PA=DS×10H+EA=30000H+1009H=31009H。
功能:该指令将BX中数据传送至31009H 指向的字单元中。寄存器相对寻址方式
的寻址规则分为三步,如图3.12所示。
图3.12 字操作、目的操作数为寄存器相对寻址方式
2)字节操作
【例3.11】 设ES=2000H,(23010H)=02H,(23011H)=82H,(23012H)=10H, 
BP=3000H,DL=05H,执行MOVES:[11H+BP],DL后,目的操作数中数据为什么? 
分析:MOVES:[11H+BP],DL指令两个操作数寻址方式及功能分析如下。
源操作数:DL为寄存器寻址方式。
目的操作数:[11H+BP]为寄存器相对寻址方式,默认堆栈段SS,因为采用段超越, 
所以使用附加段ES,EA=11H+BP=10H+3000H=3011H,则PA=ES×10H+EA= 
2000H×10H+3011H=23011H。
功能:该指令将DL中数据传送至23011H 指向的字节单元中。寄存器相对寻址方
式的寻址规则分为三步,如图3.13所示。
3.3.4 基址变址寻址方式
指令中操作数存放在存储单元,存储单元偏移地址由基址寄存器(BX或BP)和变址
E8(基址变
址寻址)

第◆3 章 寻址方式5 9 
图3.13 字节操作、目的操作数段超越采用寄存器相对寻址方式
寄存器(SI或DI)之和决定,这种寻址方式称为基址变址寻址方式。基址变址寻址方式, 
若不采用段超越,则规定如下。 
使用BX和SI或DI寄存器,默认数据段DS。物理地址计算方法如下。
PA=DS×10H+BX+SI/DI 
使用BP和SI或DI寄存器,默认堆栈段SS。物理地址计算方法如下。
PA=SS×10H+BP+SI/DI 
注意: 
基址变址寻址方式必须有一个基址寄存器和一个变址寄存器,不能同时为基址
寄存器或变址寄存器。例如,以下指令不合法。 
MOV AL,[BX+BP] 
MOV [SI+DI],CX 
基址变址寻址方式,如果不采用段超越,默认段以基址寄存器(BX、BP)为准。
例如:MOVAL,[BP+SI],BP默认SS段,SI默认DS段,以基址寄存器BP为准,该指
令源操作数PA=SS×10H+BP+SI。 
基址变址寻址书写方式有以下两种。 
MOV BX,[SI+BP] 或MOV BX,[SI][BP] 
MOV [DI+BX],CH 或MOV [DI][BX],CH 
1.源操作数为基址变址寻址方式
【例3.12】 设DS=5000H,(52000H)=90H,(52001H)=78H,(52002H)=56H, 
BX=2000H,SI=0001H,执行MOVDX,[BX][SI]后,DX中数据为什么? 
分析:MOVDX,[BX][SI]指令两个操作数寻址方式及功能分析如下。

◆ 

60 
汇编语言案例教程(微课版)

源操作数:[BX][SI]为基址变址寻址方式,默认数据段DS,EA=BX+SI=2000H 

+0001H=2001H,PA=DS×10H+EA=50000H+2001H=52001H 。
目的操作数:DX为寄存器寻址方式。
功能:该指令将52001H指向的字单元中数据传送至DX 。基址变址寻址方式的寻

址规则分为三步,如图3.

14所示。


图3.字操作、源操作数为基址加变址寻址方式

14 


设DS=5000H,(52000H)=90H,(52001H)=78H,(52002H)=56H,BX= 
2000H,DI=0001H,执行MOVCL,[BX][DI]后,CL中内容为什么? 

2.目的操作数为基址变址寻址方式
13】31008H)90H,(=3100AH)56H,= 

1000H,BP=0009H,BX=9086H,执行MOV[DI+BP],BX后,目的操作数中数据为什么? 
分析:MOV[DI+BP],BX指令中两个操作数寻址方式及功能分析如下。
源操作数:BX为寄存器寻址方式。
目的操作数:[DI+BP]为基址变址寻址方式,默认堆栈段SS,EA=DI+BP= 

1000H+09H=1009H,PA=SS×10H+EA=30000H+1009H=31009H 。
功能:该指令将BX中数据传送至31009H指向的字单元中。基址变址寻址方式的
寻址规则分为三步,如图3.

【例3.设SS=3000H,(=31009H)78H,(=DI

15所示。

设SS=3000H,(31008H)=90H,(31009H)=78H,(3100AH)=56H,SI=1000H, 
BP=0009H,BL=90H,执行MOV[SI+BP],BL后,目的操作数中数据为什么? 

第◆3 章 寻址方式6 1 
图3.15 字操作、目的操作数为基址加变址寻址方式
3.3.5 相对基址变址寻址方式
指令中操作数存放在存储单元,存储单元偏移地址由基址寄存器(BX 或BP)、变址
寄存器(SI或DI)和一个8位或16位相对位移量之和决定,这种寻址方式称为相对基址
变址寻址方式。相对基址变址寻址方式,若不采用段超越,则规定如下。 
使用BX和SI或DI寄存器,默认数据段DS。物理地址计算方法如下。
PA=DS×10H+BX+SI/DI+8位相对位移量/16位相对位移量 
使用BP和SI或DI寄存器,默认堆栈段SS。物理地址计算方法如下。
PA=SS×10H+BP+SI/DI+8位相对位移量/16位相对位移量 
相对基址加变址寻址书写方式有以下两种。 
MOV BX,[SI+BP+01H] 或MOV BX,[SI][BP]01H 
MOV 10H[DI][BX],CH 或MOV [DI+BX+10H],CH 
1.源操作数为相对基址变址寻址方式
【例3.14】 设DS=7000H,(72000H)=90H,(72001H)=26H,(72002H)=77H, 
BX=1000H,SI=0001H,执行MOVAX,[BX][SI]1000H 后,AX中数据为什么? 
分析:MOVAX,[BX][SI]1000H 指令中两个操作数寻址方式及功能分析如下。
源操作数:[BX][SI]1000H 为相对基址变址寻址方式,默认数据段DS,EA=BX+ 
SI+1000H=1000H+0001H+1000H=2001H,PA=DS×10H+EA=70000H+2001H 
=72001H。
目的操作数:AX为寄存器寻址方式。
功能:该指令将72001H 指向的字单元中数据传送至AX。相对基址变址寻址方式
的寻址规则分为三步,如图3.16所示。
E9(相对基
址变址寻址)

◆ 

62 
汇编语言案例教程(微课版)


图3.字操作、源操作数为相对基址变址寻址方式

16 

设DS=7000H,(72000H)=90H,(72001H)=26H,(72002H)=77H,BX= 
1000H,DI=0001H,执行MOVAH,[BX][DI]1000H 后,AH 的内容是什么? 
2. 
目的操作数为相对基址变址寻址方式
15 
】

【例3.设SS=2000H,(21008H)=90H,(21009H)=78H,(2100AH)=56H, 

DI=1000H,BP=0006H,BX=1209H,执行MOV[0003H+DI+BP],BX 后,目的操作

数中数据为什么? 
分析:MOV[0003H+DI+BP],BX 指令中两个操作数寻址方式及功能分析如下。
源操作数:BX 为寄存器寻址方式。
目的操作数:[0003H+DI+BP]为相对基址变址寻址方式,默认堆栈段SS,EA=DI 

+BP+0003H=1000H+0006H+0003H=1009H,PA=SS×10H+EA=20000H+ 
1009H=21009H 。
功能:该指令将BX 中数据传送至21009H 指向的字单元中。相对基址变址寻址方
式的寻址规则分为三步,如图3.

17 所示。


设SS=2000H,(21008H)=90H,(21009H)=78H,DI=1000H,BP= 
0006H,BL=12H,执行MOV[0003H+DI+BP],BL 后,目的操作数内容是
什么? 


第◆3 章 寻址方式6 3 
图3.17 字操作、目的操作数为相对基址加变址寻址方式
3.4 常用DEBUG 命令
大部分汇编语言源程序在调试阶段需用到调试程序进行调试。DEBUG 是专门为分
析和调试汇编语言程序而设计的一种调试工具,它具有汇编、反汇编、显示和修改寄存器
或内存等功能。通过单步执行、设置断点等方式为汇编语言程序设计者提供了非常有效
的调试手段。
3.4.1 DEBUG 程序的启动
在Windows7(64位)操作系统中使用DEBUG.EXE(32位)可执行程序,先安装
DOSBox应用程序,再运行DEBUG.EXE程序。DOSBox应用程序是一个DOS模拟
程序,采用SDL(SimpleDirectMediaLayer)库设计,SDL是一套开放源代码跨平台
多媒体开发库,使用C语言实现。所以DOSBox应用程序可以很方便地移植到其他
平台。
下载DOSBox应用程序后,放到指定目录下。例如,本书中将下载的DOSBox存放
到E:\DOXBox文件夹,如图3.18所示。双击DOSBox.EXE程序,单击Next按钮,最后
单击Install按钮。安装好后,在桌面上会呈现如图3.19所示图标。双击该图标,启动
DOSBox程序,出现两个界面,任意一个界面都不能关闭,如图3.20所示。
DEBUG.EXE文件存放在E:\MASM 文件夹,如图3.21所示。DOSBox启动后,首
先使用MOUNT挂载命令,将E:\MASM 文件夹挂载到DOSBox虚拟盘符;挂载好后, 
需切换到DOSBox 虚拟盘符,直接启动DEBUG.EXE 文件,出现“_”提示符,说明
DEBUG启动成功,如图3.22所示。
F1 (debug 
命令启动)

◆ 

64 
汇编语言案例教程(微课版)


图3.18 
DOSBox安装程序目录图3.x图标

19 
DOSBo


图3.启动DOSBx界面

20 
o


图3.EXE 
文件目录

21 
DEBUG.


第◆3 章 寻址方式6 5 
图3.22 DEBUG 程序启动方法
3.4.2 常用DEBUG 调试命令及功能
常用DEBUG命令有R、D、E、A、T、G、U 和Q,均为一个字母,字母后可以跟一个或
多个参数;字母和参数之间可用空格分隔,也可不用空格分隔;参数和参数之间必须用分
隔符进行分隔,分隔符可以为空格、Tab或逗号。
DEBUG环境下注意: 
所有数据都默认为十六进制数,而且不用字母“H”结尾。 
不区分大小写。 
如果使用地址时,格式为: 
段寄存器名:偏移地址
段基址:偏移地址
偏移地址 
如果有语法错误,显示错误行,并提示错误所在位置,如例3.16所示。
【例3.16】 
-UQ 1200;错误行
^ERROR 
分析:反汇编命令为U,所以该行有错误,“^”对应错误位置为Q。
【例3.17】 
-U 198W ^ERROR 
反汇编命令U,后面加十六进制16位偏移地址,198W 中W 是错误的数码,所以该
行有错误,“^”对应错误位置为W。

6 6 ◆汇编语言案例教程(微课版) 
1.R 命令———显示/修改寄存器内容
1)格式1: 
R
功能:显示CPU 中所有寄存器。
【例3.18】 显示所有寄存器。 
-R 
AX=1234 BX=0000 CX=0000 DX=0000 SP=00FD BP=0000 SI=0000 DI=000 
DS=073F ES=073F SS=073F CS=073F IP=0100 NV UP EI PL NZ NA PO NC 
073F:0100 0000 ADD [BX+SI],AL DS:0000=CD 
说明: 
AX、BX、CX和DX可以当作16位寄存器使用,也可以当作8位寄存器使用,以
图3.23 AX寄存器
AX寄存器为例说明: 
AX当作16位寄存器使用,AX中数据为1234。
AX当作8位寄存器使用,分为高8位AH=12和低8位AL=34, 
如图3.23所示。 
NV UPEIPLNZNAPONC为标志状态信息。 
073F:0100 0000 ADD [BX+SI],AL 表示下一条要执行指令为ADD,目的
操作数为[BX+SI],偏移地址BX+SI=0000,源操作数为AL。DS:0000=CD,表示数
据段偏移地址为0000存储单元中存放的数据为CD。
2)格式2: 
R 16 位寄存器名/段寄存器名
功能:显示或修改CPU 中指定寄存器。
【例3.19】 显示指定寄存器。 
-R AX 
1234 
:
说明: 
冒号后可有两种操作: 
若不修改AX寄存器中数据,则直接按Enter键。
若修改AX寄存器中数据,冒号后输入1~4位十六进制数,再按Enter键,AX中数
据被修改,再次通过R命令查询被修改的数据。例如: 
-R AX 
1234 
:9876 
-R AX ;查看AX 修改后的数据
F2(R命令)

第◆3 章 寻址方式6 7 
9876 
: 
图3.24 显示8位寄存
器错误信息 
不能出现高8位寄存器名(AH、BH、CH 和DH)或低8 
位寄存器名(AL、BL、CL和DL),如图3.24所示。
2.RF命令———显示/修改标志寄存器内容
8086CPU 标志寄存器有9个标志位,跟踪标志位TF不能
通过指令修改,所以DEBUG环境中可显示和修改8个标志位。
8个标志位顺序为OF(溢出标志位)、DF(方向标志位)、IF(中断
允许标志位)、SF(符号标志位)、ZF(零标志位)、AF(辅助进位标
志位)、PF(奇偶标志位)、CF(进位标志位)。各个标志位含义如
表3.1所示。
表3.1 标志位含义
标 志 位置 位复 位
OF(溢出标志位) OF=1 OF=0 
OV NV 
DF(方向标志位) DF=1 DF=0 
DN UP 
IF(中断允许标志位) IF=1 IF=0 
EI DI 
SF(符号标志位) SF=1 SF=0 
NG PL 
ZF(零标志位) ZF=1 ZF=0 
ZR NZ 
AF(辅助进位标志位) AF=1 AF=0 
AC NA 
PF(奇偶标志位) PF=1 PF=0 
PE PO 
CF(进位标志位) CF=1 CF=0 
CY NC 
格式: 
RF 
功能:显示或修改标志寄存器。