《汇编语言》第三版 王爽 课后检测持续更新

汇编语言 课后检测点

第一章

检测点1.1

  1. 一个CPU的寻址能力为8KB,那么它的地址总线宽度为 13
    解题思路:
      如果地址总线的宽度为N那么寻址能力为2^N B
      1KB = 2^10B
      8KB = 2^13B
  2. 1KB的储存器有 1024 储存单元。储存单元的编号从 01023
    解题思路:
      一个储存单元是8为,即8bit,为1B
      1KB = 2^10B = 1024B 所以有1024个储存单元
  3. 1KB储存器可以储存 2^13 个bit,2^10 个Byte
    解题思路:
      1KB = 2^10B = 1024B,1B = 8bit = 2^3bit
  4. 1GB,1MB, 1KB分别是 230,220,2^10 Byte
    解题思路:
      1Byte = 1B
      1KB = 2^10B
      1MB = 2^20B
      1GB = 2^30B
  5. 8080,8088,80286, 80386 的地址总线分别为 16根,20根, 24根,32根。则它们寻址能力为: 2^6 (KB) 2^0 (MB) 2^4 (MB) 2^2 (GB)
    解题思路:
      对于地址总线来说,N根寻址能力为2^N B
      则16根寻址能力为 2^16B = 2^6KB
  6. 8080,8088,8086, 80286, 80386 的数据总线分别为 8根, 8根, 16根, 16根, 32根。则它们一次可以传输的数据为:1 (B) 1 (B) 2 (B) 2 (B) 4 (B)。
    解题思路:
      数据总线要注意,一根中代表的是一个bit
      N根可以传输的数据就为N/8 B
  7. 从内存从读取1024字节的数据,8086至少要读 512 次,80386至少要读 256 几次
    解题思路:
      根据上题,8086一次可以传2个字节。则1024字节需要传1024/2次
      同理,对于80386来说,1024字节需要传1024/4次
  8. 在寄存器中,数据和程序以二进制形式存放。
    解题思路:
      数据和机器指令都是以01组成的二进制形式

第二章

检测点2.1

  1. 写出每条汇编指令执行后相关寄存器的值
mov ax, 62627  AX = F4A3H
mov ah, 31H    AX = 31A3H
mov al, 23H    AX = 3123H
add ax, ax     AX = 6246H
mov bx, 826CH  BX = 826CH
mov cx, ax     CX = 6246H
mov ax, bx     AX = 826CH
add ax, bx     AX = 04D8H
mov al, bh     AX = 0482H
mov ah, bl     AX = 6C82H
add ah, ah     AX = D882H
add al, 6      AX = D888H
add al, al     AX = D810H
mov ax, cx     AX = 6246H

检测点2.2

  1. 给定段地址为0001H,仅通过变化偏移地址寻址,cpu的寻址范围为00010H 到,1000F
    解题思路:
      段地址偏移16位得 00010H 寻址范围为 00010H + 0000H ~ 00010H + FFFFH
  2. 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻址到此单元。则SA应满足的条件是:最小为 10001H 最大为2000H
    解题思路:
      内存地址是由段地址和偏移地址共同得到的,公式为  SAx16+EA = 20000H   其中EA的取值范围为  0H~FFFFH   将两个极端值带入得到SAx16=20000H 和 SAx16=100001H
    对于EA=0H时可以直接得到SA=2000H 而对于SAx16=100001H 时会发现得不到整数值。所以最小值只可以由SAx16=100010H 得到,则SA=100010H

检测点2.3

  1. 下面三条指令执行后,CPU几次修改IP?都是什么时候,最后IP中的值是多少?
mov ax,bx
sub ax,ax
jmp ax

答案:
  四次修改IP值,分别在每条指令之后,以及执行完最后一句指令之后跳转到0,最终的值为0
解题思路:
  IP在每次执行完指令之后都会自动加上当前指令在内存中的长度。最后一句jmp指令是更改IP的指令,最终IP跳转到0

第三章

检测点3.1

  1. 在Debug中,用“d0:01f”查看内存结果如下。
    0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
    0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
    下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器中的值。
mov ax,1 
mov ds,ax 
mov ax,[0000]  AX = 2662H
mov bx,[0001]  BX = E626H
mov ax,bx      AX = E626H
mov ax,[0000]  AX = 2662H
mov bx,[0002]  BX = D6E6H
add ax,bx      AX = FD48H
add ax,[0004]  Ax = 2C14H
mov ax,0       Ax = 0010H
mov al,[0002]  AX = 00E6H
mov bx,0       BX = 0000H
mov bl,[000C]  BX = 0026H
add al,bl      AX = 000CH
  1. 内存的情况如图3.6所示。
    各寄存器的初始值为:CS=2000H, IP=0, DS=1000H,AX=0,BX=0;
    (1)写出CPU执行的指令序列(用汇编语言写出)。
    (2)写出CPU执行每条指令后,CS,IP和相关寄存器中的数值
    (3)再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?

答案:

指令 CS:IP DS AX BX
mov ax,6622H 2000:3 1000H 6622H 0H
jmp 0ff0:0100 2000:8->0ff0:0100 1000H 6622H 0H
mov ax,2000H 0ff0:0103 1000H 2000H 0H
mov ds:ax 0ff0:0105 2000H 2000H 0H
mov ax:[0008] 0ff0:0108 2000H C389H 0H
mov ax:[0002] 0ff0:010B 2000H EA66 0H

数据和程序在储存方面并无区别。靠代码段寄存器和数据段寄存器来区分哪是数据哪是程序,即,看CPU如何解释。

解题思路:

​ 根据一开始题干所给可知,CS和IP的值可以得出最开始执行的代码段。然后顺序执行。

检测点3.2

补全下面的程序,使其可以将10000H1000FH中的8个字,逆序复制20000H2000FH中。

mov ax,1000H
mov ds,ax
___________
___________
___________
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]

答案:

mov ax,2000H
mov ss,ax
mov sp,0010H

补全下面程序,使其可以将10000H1000FH中的8个字,逆序复制到20000H2000FH中。

mov ax,2000H
mov ds,ax
________
________
________
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]

答案:

mov ax,1000H
mov ss,ax
mov sp,0
posted @ 2021-07-31 09:52  小八同学  阅读(412)  评论(0)    收藏  举报