# 第 2 章：寄存器

## 检测点 2.1

**（1）写出每条汇编指令执行后相关寄存器中的值。**

| 指令                | 寄存器值（十六进制形式）  |
| ----------------- | ------------- |
| mov ax, **62627** | AX = **FA43** |
| mov ah, 31H       | AX = **3143** |
| mov al, 23H       | AX = **3123** |
| add ax, ax        | AX = **6246** |
| mov bx, 826CH     | BX = **826C** |
| mov cx, ax        | CX = **6246** |
| mov ax, bx        | AX = **826C** |
| add ax, bx        | AX = **04D8** |
| mov al, bh        | AX = **0482** |
| mov ah, bl        | AX = **6C82** |
| add ah, ah        | AX = **D882** |
| add al, 6         | AX = **D888** |
| add al, al        | AX = **D810** |
| mov ax, cx        | AX = **6246** |

{% hint style="info" %}
注意：第一行左侧指令的数字非 H 结尾，应视为十进制数，运算时需要转换为十六进制。
{% endhint %}

**（2）只能使用目前学过的汇编指令，最多使用 4 条指令，编程计算 2 的 4 次方。**

```
mov ax, 2
add ax, ax
add ax, ax
add ax, ax
```

## 检测点 2.2

**（1）给定段地址为 0001H，仅通过变化偏移地址寻址，CPU 的寻址范围为\_\_\_\_到\_\_\_\_。**

答案：**00010h；1000Fh**

**（2）有一数据存放在内存 20000H 单元中，现给定段地址为 SA，若想用偏移地址寻到此单元。则 SA 应满足的条件是：最小为\_\_\_\_，最大为\_\_\_\_。（提示，反过来思考一下，当段地址给定为多少，CPU 无论怎么变化偏移地址都无法寻到 20000H 单元？）**

答案：（20000 - 0FFFF）/16 = 10001/16 = **1001h**；20000/16 = **2000h**

## 检测点 2.3

**下面的 3 条指令执行后， CPU 几次修改 IP ? 都是在什么时候？最后 IP 中的值是多少？**

```
mov ax, bx
sub ax, ax
jmp ax
```

答案：**4 次。**（1）第一行；（2）第二行；（3）第三行读完指令 IP 自动增加；（4）第四行执行完指令跳转到 ax；

## 实验一

* 这可能是最详细的 Windows Debug 详解 了\_咸鱼的笔记-CSDN博客&#x20;
  * <https://blog.csdn.net/Apheal/article/details/80617302>
