···························································· 第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 功能:显示或修改标志寄存器。