指出 寻址方式,并计算 物理地址(汇编练习题)
一、经典例题
题目:请指出下列指令的 源操作数 的寻址方式,并计算物理地址。
设(DS)=2000H,(ES)=2100H,(SI)=00A0H,(SS)=1500H, (BX)=0100H,
(BP)=0100H,数据变量WAL的偏移地址为0050H。
1.MOV AX,[100H]; 直接寻址 2000H*10H+100H=20100H
2.MOV AX,[BX]; 寄存器间接寻址 2000H*10H+0100H=20100H
3.MOV AX,ES:[BX]; 寄存器间接寻址 ES*10H+BX=2100H*10H+0100H=21100H ;“ES:[BX]”才对
4.MOV AX,[BP]; 寄存器间接寻址 SS*10H+BP=1500H*10H+0100H=15100H ;BP(或者SP),用SS。其他一般选DS。
5.MOV AX,[BX+10H]; 寄存器相对寻址 2000H*10H+0100H+10H=20110H
6.MOV AX,WAL[BX]; 寄存器相对寻址 2000H*16+0100H+0050H=20150H
7.MOV AX,[BX][SI]; 基址加变址寻址 2000H*10H+0100H+00A0H=201A0H
8.MOV AX,WAL[BX][SI]; 基址变址相对寻址 20000H+0100H+0050H+00A0H=201F0H
栈段寄存器(SS, Stack Segment):存放栈段的 段描述符 索引(该段描述符中包含栈段的线性基址)。
数据段寄存器(DS(Data Segment)、ES、FS、GS):存放数据段的段描述符索引(这些描述符中均包含数据段的线性基址)。
其中,DS数据段含有程序使用的大部分数据,ES、FS和GS分别对应IA-32中引入的附加数据段。ES数据段可以为某些串指令存放目的数据。
1.汇编语言 SI DI BX BP SS DS 是什么
SI: 16位寄存器,源变址寄存器
DI: 16为寄存器,目的变址寄存器
BX: 16位寄存器(可分成2个8位寄存器BH,BL),基址寄存器
BP: 16位寄存器,基址指针寄存器
SS : 16位段寄存器,作用是存放当前堆栈段的段地址,一般和SP连用
DS: 16为段寄存器,作用是存放当前数据段的段地址
2.怎样根据这些求物理地址
有个公式: 物理地址 = 基础地址 + 偏移地址 = CS*10H(基础地址)+ IP(偏移地址)
CS: 16位段寄存器,存放当前代码段的段地址
IP: 存放下一条要执行的指令的偏移地址
物理地址=段地址×16+偏移地址,指令中出现BP作地址,则其段地址为SS,否则就为DS。这里的16是十进制的。
Q:地址加法器是工作的?
A:地址加法器可以将输入分为段地址和偏移地址,而输出则是物理地址,
其中 段地址×16 + 偏移地址 = 物理地址。
Q: 段地址为什么要乘 16或10H ?
A:因为寄存器是16位的,乘 16 后相当于左移 4 位,留出来 4 个位置供偏移地址补上。加上后就变成了 20 位,就能放入地址总线中了。
二、练习题
1.现有AX=2000H,BX=1200H,DS=3000H,DI=0002H,(31200H)=50H,(3120H)=02H,(31202H)=40H,请写出下列各条指令独立执行完后有关寄存器及存储单元的内容,并指出标志位ZF、CF的值。
A.ADD AX,1200H ;问AX=____3200____H ZF=_0____。
B.SUB AX,BX ;问AX=__e00_____H ZF=__0___。
C.MOV AX,[BX] ;问AX=____50____H CF=__0___。
SUB:减法
2000H-1200H=0E00H 借一当16,16-2=14 14就是E
进位标志CF(Carry Flag):主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。CY(1) NC(0)
零标志ZF(Zero Flag):如果计算结果的所有位是0,ZF=1,否则,ZF=0。ZR(1) NZ(0)
MOV AX,[BX]; 寄存器间接寻址 AX = DS×10+BX = 3000H*10H+1200H=31200H =50H
2.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,说明下列指令执行后AX寄存器的内容。
(1)MOV AX,1200H
1200H
(2)MOV AX,BX
100H
(3)MOV AX,[1200H]
2AH
(4)MOV AX,[BX]
12H
(5)MOV AX,1100H[BX]
2AH
(6)MOV AX,[BX][SI]
56H
(7)MOV AX,1100H[BX][SI]
B7H
3.若AX=3500H,CX=56B8H,当AND AX,CX
指令执行后,AX=( A )
A. 1400H B. 77F8H C. 0000H D. 0FFFFH
4.设DS=2200H,BX=1000H,SI=0100H,偏移量D=0A2B1H,试计算出下列各种寻址方式下的有效地址,填入括号中
A.使用D的直接寻址( A2B1 )
B.使用BX的寄存器间接寻址( 1000 )
C.使用BX和D的寄存器相对寻址( B2B1 )
D.使用BX、SI和D的相对基址变址寻址( B3B1 )
E .使用BX、SI的基址变址寻址( 1100 )
5.分别指出下列指令中源操作数的寻址方式:
A. MOV SI,100( 立即寻址 )
B. MOV CX,DATA[SI]( 寄存器相对寻址 )
C.MOV [SI],AX( 寄存器寻址 )
D.ADD AX,[BX][DI]( 基址加变址寻址 )
6.设(SS)= 448AH,(SP)= 450H,执行
PUSH AX
PUSHF
后,当前栈顶的物理地址=___ B ___。
A.44CE6H B.44CECH C.44CF4H D.44CF2H
SS×10+SP=448AH×10+ 044CH = 44CECH
分析:
PUSH AX; AX是16位寄存器,2个字节,所以SP-2
PUSHF; 把标志寄存器FLAGS的值入栈,也是2个字节,所以SP-2
SP-4=044CH
物理地址是: 448AH左移四位(乘十)+ 044CH = 44CECH
7.操作数直接存放在指令中,则它的寻址方式是( D )。
(A) 直接寻址 (B) 寄存器寻址 (C) 寄存器间接寻址 (D) 立即寻址
8.MOV AX,ES:COUNT[DI]
源操作数的寻址方式是( C )
A. 基址寻址 B. 立即寻址
C. 变址寻址 D. 基址变址寻址
9.指令MOV BX,MASK[BP]
,若MASK=3500H,SS=1200H,DS=1000H,BP=1000H,那么物理地址为( B )
A. 17500H B. 16500H
C. 14500H D. 13500H
10.已知(DS)=3000H,(SS)=2500H,(BX)=0100H,(BP)=0040H,指令MOV AX,DS:[BP]
源操作数的物理地址是( B )。
A.25040H B. 30040H C.25100H D. 55040H
11.MOV BH,1000[SI]
,该指令中源操作数采用的寻址方式是( C )。
A.立即 B.直接 C.寄存器相对 D.寄存器间接
三、概念题
1.在ARM体系结构中,( A )寄存器作为连接寄存器,当进入子程序时或者处理器响应异常的时候,用来保存PC的返回值;( )寄存器作为处理器的程序计数器指针。
A.R14,R15 B.R13,R15 C.R13,R15 D.R14,R13
2.在下列ARM处理器的各种模式中,只有( B )模式不可以自由地改变处理器的工作模式。
A.系统模式(System) B.用户模式(User)
C.终止模式(Abort) D.中断模式(IRQ)
3.设CS=2500H,DS=2500H,SS=2430H,BP=0200H,SI=0010H,DI=0206H,计算下列x86指令源操作数的物理地址。( D )
MOV AX,[BP+SI+4]
A.25214H B.25514H C.24214H D.24514H
解答:
看见BP 选SS
SS*10+BP + SI + 4 = 24300 + 200 + 10 +4 = 24514
4.用十六进制工具查看IMAGE_ FILE_HEADER结构的情况时,以下字段中( B )代表可执行文件的目标CPU类型。
A.NumberOfSections B.Machine
C.TimeDateStamp D.Characteristics
5.MOV AX,[BX+SI]
的源操作数的物理地址是( A )
A.(DS)*10H+(BX)+(SI) B.(ES)*10H+(BX)+(SI)
C.(SS)*10H+(BX)+(SI) D.(CS)*10H+(BX)+(SI)
四、操作题
1.若(CL)= 4,(AX)=0FF0FH,执行语句“ROR AX,CL
”后 ,(AX)=( FFF0 )H。
ROR循环右移
1.现有AX=1500H,BX=1200H,DS=3000H,DI=0002H,(31200H)=70H,(3120H)=12H,(31202H)=50H,请写出下列各条指令独立执行完后有关寄存器及存储单元的内容,并指出标志位ZF的值。(每空1分,共5分)
ADD AX,2100H
;问AX=( 3600 )H ZF=( 0 )。
SUB AX,BX
;问AX=( 300 )H ZF=( 0 )。
MOV AX,[BX]
;问AX=( 70 )H
一段x86汇编程序如下:( )
PUSH BX;
PUSH AX;
PUSH BX
POP CX;
PUSH BX;
PUSH AX
POP CX
假设AX=1357H,BX=2468H,DS=2000H,SS=4000H则程序执行完后,CX等于多少?( A )
A.1357H B.4468H
C.3357H D.6468H
- 设(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H,执行指令"PUSH AX"后,(SP)= ( 00AE );再执行指令:
PUSH BX
POP AX
后,(SP)= ( 00AE ) ,(AX)= ( 0F79 ),(BX)= ( 0F79 )。
注:这里不用-r输入SS的值,只输入SP、AX、BX的值。
- MOV AX, 0001H
MOV BX, 0002H
PUSH BX
PUSH AX
POP BX ;执行后 BX=( 01 )
POP AX ;执行后 AX=( 02 )
MOV AX,3F5FH ;执行后 AL=( 5F )
AND AL,0FH ;执行后 AL=( 0F )