您的位置:首页 > 其它

(2011.11.06)汇编语言第02章习题(寻址方式与汇编语言程序的组织)

2011-11-06 10:21 351 查看
汇编语言第02章习题(寻址方式与汇编语言程序的组织)

2.2 有两个16位的字1EE5H 和 2A3CH 存储在IBM PC 的000B0H 和000B03H 的内存单元中,请以图表的形式说明内存中的存储情况

解:(遵照高高低低的原则)

内存地址 内容

000B4H 2AH

000B3H 3CH

000B2H

000B1H 1EH

000B0H E5H



2.3 如下图, 展示的是IBM PC的内存信息, 请说明30022H 字节单元和30024H字节单元的内容,和30021H 字单元和30022H 字单元的内容。

存储器 内容

30020H 12H

30021H 34H

30022H ABH

30023H CDH

30024H EFH

解:(遵照高高低低的原则)

字节:

30022H字节单元的内容=0ABH

30024H字节单元的内容=0EFH

字:

30021H单元的内容=0AB34H

30022H单元的内容=0 CDABH



2.4 3017:000A的段地址的物理地址和偏移量是什么?

3015:002A和3010:007A的段地址和偏移是什么?

解:(物理地址及偏移地址的计算方法)

物理地址1:PA= 3017 × 10H + 000AH = 3017AH

物理地址2: PA= 3015 × 10H + 002AH = 3017AH

物理地址3: PA= 3010 × 10H + 007AH = 3017AH



2.5 运行程序之前, (CS)=0A7F0H,(IP)=2B40H, 程序的第一个字的物理地址是什么?

解:(程序每次执行指令的地址的是CS:IP)

PA=(CS)×10H+(IP)= 0A7F00H + 2B40H = 0AAA40H



2.6 在内存中,每一段都顶多有10000H字节。下面是用DEBUG的命令“r”来在终端上展示寄存器的内容。请以图表的形式显示内存是如何划分成段的,还有OF,SF,ZF,CF的值。

终端显示的内容:

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

DS=10E4 ES=10F4 SS=21F0 CS=31FF IP=0100 NV UP DI PL NZ NA PO NC

解:此时 OF,SF, ZF, CF 都为0。

(几乎是每10000H就划分一个段)

10E40-10F40-数据段

10F40-20F40-附加段

21F00-31F00-堆栈段

31FF00-41FF0-代码段



2.8 哪类型的寄存器可以用来显示内存地址

解:CS, DS, ES, SS, EAX, EBX, ECX, EDX, EBP, EIP, ESP, EDI, IP, SP, BP, BX, DI, SI



2.9 CPU--分析,控制和运行指令的组件, 包含 算术逻辑单元和一组寄存器。

内存――内存存储过程,数据等等, PC中,有RAM 和ROM

Stack――存储空间,以后进先出的方式工作。

IP――存储下一条要运行的指令

SP――存储当前栈顶地址的寄存器

状态标志位――变址位记录指令运行的结果, 包含6 个位, OF,SF,ZF, AF,PF,CF。

控制标志位――控制指令的标志, PC中有三个位, 是DF,IF,TF.

段寄存器――寄存器存储每一个逻辑段起始地址, PC中有4种,分别是CS,DS,SS 和ES。

物理地址――显示存储空间中每一个字节的唯一的地址。

汇编语言――用指令的助记符,符号地址,标号等符号书写程序的语言。

机器语言――能被计算机直接识别的语言。

汇编程序――把汇编语言程序翻译成机器语言程序的系统程序。

连接程序――把若干个模块连接起来成为可执行文件的系统程序。

指令――告诉CPU要执行的操作(一般还要指出操作数的地址),在程序运行是执行。

伪指令――由汇编程序在汇编过程中执行的指令。



5. 假定DS = 5788H, 偏移地址94H, 字节的PA(物理地址) 是( ). B

a.57974H b.57914H c. 5883H d. 58ECH



6.在段中寻址的时候,在8086CPU的寄存器中,哪些寄存器可以提供偏移地址( ) B

A. AX, BX, CX, DX || B. BX, BP, SI, DI || C. SP, IP, BP, DX || D. CS, DS, ES, SS



2-1下面的MOV指令完成什么操作?

(a)MOV AX,BX; (c)MOV BL,CH;

解:(mov指令的考察)

( a) 把BX的内容移动到AX中 (c) 把CH的内容移动到BL中



2-2 列出寄存器寻址使用的8位寄存器

解:(寄存器位数的考察)

AH、AL、BH、BL、CH、CL、DH和DL



2-3 列出寄存器寻址使用的16位寄存器

解:(寄存器位数的考察)

AX、BX、CX、DX、SI、DI、SP、BP和段寄存器。



2-6 指令MOV BL,CX 错在哪里?

解:BL和CX的位数不一致。



2-7 指令MOV DS,SS 错在哪里?

解:两个寄存器之间是不能直接传送数据的。



2-13 指令 MOV [BX],[DL] 错在哪里

解:目标操作数寻址方式错误。



2-17给定DS=1200H,BX=0100H和SI=0250H。假定按实模式操作,确定下面每条指令寻址的地址:

解:

(a) MOV [100H],DL; 12100H

(c) MOV DL,[BX+100H]; 12200H



2-18 给定DS=1100H,BX=0200H,LIST=0250和SI=0500H。假定按实模式操作,确定下面每条指令寻址的地址:

解:(b) MOV CL,LIST[BX+SI]; 11950H



2-19 给定DS=1300H,SS=1400H,BP=1500H和SI=0100H。假定按实模式操作,确定下面每条指令寻址的地址:

解:(b) MOV AL,[BP+SI+200H]; 14800H



2-20 哪些基址寄存器可以寻址堆栈段的数据?

解:SS, SP



3.1 给出(BX)=637DH,(SI)=2A9BH,偏移量D=7237H,尝试指出下列每一种寻址模式的有效地址。

(1) 立即寻址;

(2) 直接寻址

(3) 用BX的寄存器寻址;

(4) 用BX的寄存器间接寻址;

(5) 用BX的寄存器相对寻址;

(6) 基址变址寻址

(7) 相对基址变址寻址

解:

(1) 无

(2) EA=7237H

(3) 无

(4) EA=637DH

(5) EA=D+[BX]=7237H+637DH=0D5B4H

(6) EA=[BX]+[SI]=637DH+2A9BH=8E18H

(7) EA=D+[BX]+[SI]=7237H+637DH+2A9BH=1004FH



3.2 根据下列要求, 写出相关的汇编语言指令。

(1) 把BX 的内容和DX 的内容相加,结果放入DX 中。

(2) 把AL的内容加上内存地址的内容,并把结果放到AL中。内存地址由BX和SI进行基址变址寻址所得。

(3)把CX的内容加上内存地址的一个字,并把结果放到内存地址中。内存地址由BX和偏移量0B2H进行寄存器相对寻址所得。

(4) 把内存地址的内容与数2A59H相加,并把结果放入内存地址。内存地址由偏移量0524H进行直接寻址所得。

(5) 把数值0B5H 与AL 寄存器的内容相加, 结果放入AL寄存器。

解(ADD指令的使用)

(1) ADD DX, BX

(2) ADD AL, BX[SI]

(3) ADD WORD PTR 0B2H [BX], CX

(4) ADD WORD PTR [0524H], 2A59H

(5 )ADD AL, 0B5H



3.3 写出指令,把首址是BLOCK的字数组中的第六个字移入DX寄存器。使用如下的寻址方式。

(1) 寄存器间接寻址

(2) 寄存器相对寻址

(3) 基址变址寻址

解:

(1) LEA BX, BLOCK+10

MOV DX, WORD PTR [BX]

(2) LEA SI, BLOCK

MOV DX, WORD PTR 0AH[SI]

(3) LEA BX, BLOCK

MOV SI, 0AH

MOV DX, WORD PTR [BX][SI]



3.4给出(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H, (20101)=34H, (20102)=56H, (20103)=78H, (21200)=2AH,(21201)=4CH,(21202)=B7H, (21203)=65H,

尝试解释:执行指令后,AX寄存器的内容。

(1) MOV AX, 1200H

(3) MOV AX, [1200H]

(5) MOV AX, 1100[BX]

(7) MOV AX, 1100[BX][SI]

解:

(1) (AX)=1200H

(3) (AX)=4C2AH

(5) (AX)=4C2AH

(7) (AX)=65B7H



3.4 给出(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H, (20101)=34H, (20102)=56H, (20103)=78H, (21200)=2AH,(21201)=4CH,(21202)=B7H, (21203)=65H,

尝试解释:执行指令后,AX寄存器的内容。

(1) MOV AX, 1200H

(3) MOV AX, [1200H]

(5) MOV AX, 1100[BX]

(7) MOV AX, 1100[BX][SI]

解:

(1) (AX)=1200H

(3) (AX)=4C2AH

(5) (AX)=4C2AH

(7) (AX)=65B7H



3.8 给出(DS)=2000H,(ES)=2100H,(SS)=00A0H,(BX)=0100H,(BP)=0010H,数据段中VAL 的偏移地址是0050H,指出源操作数段的寻址方式和物理地址。

(2) MOV AX, BX

(4) MOV AX, VAL

(6) MOV AX, ES:[BX]

(8) MOV AX, [SI]

(10)MOV AX, VAL[BX]

(12)MOV AX, VAL[BX][SI]

解:

(2) 寄存器寻址

(4) 直接寻址,物理地址=20050H

(6) 寄存器间接寻址,物理地址=21100H

(8) 寄存器间接寻址,物理地址=200A0H

(10) 寄存器相对寻址,物理地址=20150H

(12) 相对基址变址寻址,物理地址=201F0H



1. 当执行POP [BX] 和寻找目标操作数时,段地址跟偏移地址是在( )中。 B

a. 无段地址也无偏移地址

b. DS 和BX中

c. ES 和 BX中

d. SS 和 SP中



2.下列指令中, 哪个是错的?

a. MOV SS:[BX+DI],1000H

b. MOV DX, 1000H

c. MOV WORD PTR [BX],1000H

d. MOV DS, 2000H

解:D错误: 立即数不能直接到段寄存器



1. 指出下列的错误:

1) MOV AH, BX

2) MOV [BX], [SI]

3) MOV AX,[SI] [DI]

4) MOV MYDAT [BX][SI], ES:AX

5) MOV BYTE PTR[BX], 1000

6) MOV BX, OFFSET MYDAT[SI]

7) MOV CS, AX



答:

1. 指出下列的错误:

1) MOV AH, BX ; 操作数大小不同

2) MOV [BX], [SI] ; 出错:不能内存与内存之间直接传输数据

3) MOV AX,[SI] [DI] ; 出错: [SI][DI]不能作为基址相对寻址的组合

4) MOV MYDAT [BX][SI], ES:AX ; 出错:不能内存与内存之间直接传输数据

5) MOV BYTE PTR[BX], 1000 ; 操作数大小不同

6) MOV BX, OFFSET MYDAT[SI] ; offset指令是获取标号处的地址,这里应删除[SI]

7) MOV CS, AX ; 出错: CS 段寄存器不能作为第一操作数



2. 给出DS = 6400h, BX = 0743h, SS=6500H, BP = CA40h, SI = 2100h 和 DI = 04A4h, 而且BETA是一个偏移量为0202h的数据项 (名称/变量), 对于下列每一条指令指出其寻址方式且计算出源操作数和目标操作数的20-位的物理地址:

• (i) MOV AL, [BP][SI] ; 基址变址寻址 72B40H

• (ii) MOV [BX + DI + 4], AX ; 相对基址变址寻址 64BEBH

• (iii) MOV BETA, BL ; 直接寻址 64202H

• (iv) MOV AH, [BP][DI + BETA] ; 相对基址变址变址 710E6

• (v) LODSB ; 寄存器寻址 66100H
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: