第 1 章 基础知识 
 
检测点 1.1 
(1)1 个 CPU 的寻址能力为 8KB,那么它的地址总线的宽度为 13。 
(2)1KB 的存储器有 1024 个存储单元。存储单元的编号从 0 到 1023。 
(3)1KB 的存储器可以存储 1024*8 个 bit,1024 个 Byte。 
(4)1GB、1MB、1KB 分别是 2^30、2^20、2^10 Byte。(n^m 的意思是 n 的 m 次幂) 
(5)8080、8088、80286、80386 的地址总线宽度分别是 16 根、20 根、24 根、32
根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。 
(6)8080、8088、8086、80286、80386 的数据总线宽度分别为 8 根、8 根、16 根、
16 根、32 根。则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。 
(7)从内存中读取 1024 字节的数据,8086 至少要读 512 次、80386 至少要读 256
次。 
(8)在存储器中,数据和程序以二进制形式存放。 
 
第 2 章 寄存器 答案 
 
检测点 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) 只能使用目前学过的汇编指令,最多使用 4 条指令,编程计算 2 的 4 次方。 
解: 
mov ax,2 
add ax,ax 
add ax,ax 
add ax,ax 
 
1 
检测点 2.2 
(1) 给定段地址为 0001H,仅通过变化偏移地址寻址,CPU 的寻址范围为 00010H
到 1000FH。 
(2) 有一数据存放在内存 20000H 单元中,先给定段地址为 SA,若想用偏移地
址寻到此单元。则 SA 应满足的条件是:最小为 1001H,最大为 2000H。 
 
检测点 2.3 
下面的 3 条指令执行后,CPU 几次修改 IP?都是在什么时候?最后 IP 中的值是
多少? 
mov ax,bx 
sub ax,ax 
jmp ax 
解: 
修改 4 次;第一次在 CPU 读取“mov ax,bx”后,第二次在 CPU 读取“sub ax,ax”
后,第三次在 CPU 读取“jmp ax”后,第四次在 CPU 执行完“mov ax,bx”后;
最后 IP 中的值为 0。 
 
实验 1 查看 CPU 和内存,用机器指令和汇编指令编程 
1.略 
2. 
(1)略 
(2)略 
(3)查看内存中的内容。 
PC 机主板上的 ROM 中写有一个生产日期,在内存 FFF00H~FFFFFH 的某几个单元
中,请找出这个生产日期并试图改变它。 
解:内存 FFF00H~FFFFFH 为 ROM 区,内容可读但不可写。 
(4)向内存从 B8100H 开始的单元中填写数据,如: 
-e B810:0000 01 01 02 02 03 03 04 04 
请读者先填写不同的数据,观察产生的现象;在改变填写的地址,观察产生的现
象。 
解:8086 的显存地址空间是 A0000H~BFFFFH,其中 B8000H~BFFFFH 为 80*25
彩色字符模式显示缓冲区,当向这个地址空间写入数据时,这些数据会立即出现
在显示器上。 
 
 
 
第 3 章 寄存器(内存访问) 
2 
检测点 3.1 
(1) 在 Debug 中,用“d 0:0 1f”查看内存,结果如下。 
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=0000H 
mov al,[0002] AX=00E6H 
mov bx,0 BX=0000H 
mov bl,[000C] BX=0026H 
add al,bl AX=000CH 
 
(2)内存中的情况如图 3.6 所示 
各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0; 
① 写出 CPU 执行的指令序列(用汇编指令写出)。 
② 写出 CPU 执行每条指令后,CS、IP 和相关寄存器中的数值。 
③ 再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些
是程序? 
 
解: 初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0 
① ② 
mov ax,6622H AX=6622H 其他寄存器保持不变,以下同理 
jmp 0ff0:0100 CS=0ff0H,IP=0100H 
mov ax,2000H AX=2000H 
mov ds,ax DS=20000H 
mov ax,[0008] AX=C389H 
mov ax,[0002] AX=EA66H 
 
③ 没有区别,被 CS:IP 指向的信息是程序;被传送、运算等指令操作的是数据。 
检测点 3.2 
 
3 
(1) 补全下面的程序,使其可以将 10000H~1000FH 中的 8 个字,逆序复制到
200000H~2000FH 中。逆序复制的含义如图 3.17 所示(图中内存里的数据均为假
设)。 
mov ax,1000H 
mov ds,ax 
mov ax,2000H 
mov ss,ax 
mov sp,10H 
push [0] 
push [2] 
push [4] 
push [6] 
push [8] 
push [A] 
push [C] 
push [E] 
(2) 补全下面的程序,使其可以将 100000H~1000FH 中的 8 个字,逆序复制到
200000H~2000FH 中。 
mov ax,2000H 
mov ds,ax 
mov ax,1000H 
mov ss,ax 
mov sp,0 
pop [E] 
pop [C] 
pop [A] 
pop [8] 
pop [6] 
pop [4] 
pop [2] 
pop [0] 
 
实验 2 用机器指令和汇编指令编程 
1.预备知识:Debug 的使用 
略 
 
2.实验任务 
(1) 使用 Debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际
运行情况填空。 
 
4 
mov ax,ffff 
mov ds,ax 
mov ax,2200 
mov ss,ax 
mov sp,0100 
mov ax,[0] ;ax=58EA 
add ax,[2] ;ax=5CCA 
mov bx,[4] ;bx=30F0 
add bx,[6] ;bx=6021 
push ax ;sp=00FE;修改的内存单元的地址是 220FE,内容为 5CCA 
push bx ;sp=00FC;修改的内存单元的地址是 220FC,内容为 6021 
pop ax ;sp=00FE;ax=6021 
pop bx ;sp=0100;bx=5CCA 
push [4] ;sp=00FE;修改的内存单元的地址是 220FE,内容为 30F0 
push [6] ;sp=00FC;修改的内存单元的地址是 220FC,内容为 2F31 
注:内存中的数据会因机器、环境而异 
(2) 仔细观察图 3.19 中的实验过程,然后分析:为什么 2000:0~2000:f 中的内
容会发生改变? 
解:t 命令为单步中断,CPU 会保护现场,即顺序把标志寄存器、CS、IP 入栈,
此题是关于后面章节的中断问题。 
 
第 4 章 第一个程序 
 
实验 3 编程、编译、连接、跟踪 
(1) 将下面的程序保存为 t1.asm,将其生成可执行文件 ti.exe。 
assume cs:codesg 
codesg segment 
mov ax,2000h 
mov ss,ax 
mov sp,0 
add sp,10 
pop ax 
pop bx 
 
5 
push ax 
push bx 
pop ax 
pop bx 
mov ax,4c00h 
int 21h 
codesg ends 
end 
 
解:略 
 
(2) 用 Debug 跟踪 t1.exe 的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内
容。 
解:
 
6 
 
(3)PSP 的头两个字节是 CD20,用 Debug 加载 ti.exe,查看 PSP 的内容。 
解:
 
 
7 
 
第 5 章 [BX]和 loop 指令 
 
实验 4 [bx]和 loop 的使用 
(1)编程,向内存 0:200~0:23F 依次传送数据 0~63(3FH)。 
 
解: 
assume cs:codesg 
codesg segment 
mov ax,0 
mov ds,ax 
mov bx,200H 
mov al,0 
mov cx,64 
s:mov [bx],al 
inc bx 
inc al 
loop s 
mov ax,4c00h 
int 21h 
codesg ends 
end 
(2)编程,向内存 0:200~0:23F 依次传送数据 0~63(3FH),程序中只能使用 9
条指令,9 条指令中包括“mov ax,4c00h”和“int 21h”。 
 
8