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

来源:互联网 发布:safari 调试工具 网络 编辑:程序博客网 时间:2024/06/06 05:15
  

汇编语言第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

 

原创粉丝点击