高等学校计算机专业教材
80x86 汇编语言程序设计习题参考答案
第 1 章
1.1 汇编的主要功能:对汇编语言源文件进行语法检查;若没有语法
错误,则将符号指令翻译为机器代码,生成目标文件。
连接的主要功能:实现一个或多个目标文件及库文件的连接;完成浮
动地址的重定位;若无连接错误,则生成一个可执行文件。
1.2 (1)2EH (2)0D2H (3)0FFH (4)80H (5)7FH (6)0FEH
1.3 (1)7FH (2)0FF80H (3)0FFFFH (4)0FFD2H (5)8000H (6)
0FFH
1.4 无符号数范围:0 ~ 2N -1; 带符号数范围:-2N-1 ~ 2N-1 -1。
1.5 (1)压缩 BCD 码:58H;非压缩 BCD 码:x5x8H。
(2)压缩 BCD 码:1624H;非压缩 BCD 码:x1x6x2x4H。
1.6 (1)字符'1'的 ASCII 码;十进制数 31 的压缩 BCD 码;十进制
数 1 的非压缩 BCD 码;十进制数 49 的十六进制表示。
(2)十进制数-1 的 8 位二进制补码表示;带符号数 255 的 16 位二
进制补码表示;无符号数 255 的 8 位二进制形式。
(3)十进制数?/FONT>1 的 16 位二进制补码表示;带符号数 65535
的 32 位二进制补码表示;无符号数 65535 的 16 位二进制形式。
1.7 (1)作为无符号数为 159,等值的 16 位和 32 位形式均为 9FH;
作 为 带 符 号 数 为 -97 , 等 值 的 16 位 和 32 位 形 式 分 别 为 0FF9FH 与
0FFFFFF9FH。
(2)作为无符号数和带符号数均为 104,等值的 16 位和 32 位形式
均为 68H。
(3)作为无符号数为 192,等值的 16 位和 32 位形式均为 0C0H;作
为带符号数为-64,等值的 16 位和 32 位形式分别为 0FFC0H 与 0FFFFFFC0H。
1.8 (1)AND 0FH。 (2)OR 30H。
(3)右移 4 位可得高位的值;将原值 AND 0FH 可得低位的值。
(4)XOR 00101010B。
(5)AND 8000H,若结果为 0,则是正数,否则为负数。
第 2 章
2.1 系统总线是 CPU 与内存和 I/O 子系统之间进行数据交换的通道,
包括数据总线、地址总线和控制总线,分别负责在 CPU 与内存和 I/O 子系
统之间传送数据、地址和控制信息。其中,数据总线决定了 CPU 每次存取
数据的最大位数;地址总线决定了系统的最大可寻址空间;控制总线用来
控制 CPU 与内存和 I/O 设备之间的数据传送方式。
2.2
8 位通用寄存器 8 个:AH、AL、BH、BL、CH、CL、DH、DL。16
位通用寄存器 8 个:AX、BX、CX、DX、SI、DI、BP、SP。
32 位通用寄存器 8 个:EAX、EBX、ECX、EDX、ESI、EDI、
EBP、ESP。
段寄存器 6 个:CS、DS、SS、ES、FS、GS。
2.3 IP 包含要执行的下一条指令的偏移地址;SP 包含堆栈段栈顶的
偏移地址;段寄存器用来存放 16 位段地址。通常,CS 存放当前代码段的
段地址,SS 存放当前堆栈段的段地址,DS、ES、FS 和 GS 用来存放数据段
的段地址。
2.4 因为段内偏移地址是 16 位,故每个段最大只能 216B,即 64KB。
2.5 物理地址 = 段地址 × 16 + 偏移地址。给定逻辑地址,可得到
惟一的物理地址;每个物理地址可由不同的逻辑地址描述。例如,逻辑地
址 0200:1200H 对应惟一的物理地址 03200H,但该物理地址又可由逻辑地
址 0320:0000H、0210:1100H 和 0000:3200H 等来描述。
2.6 实模式的主要特点如下:
(1)与 8086 兼容,只有低 20 条地址线有效,只能寻址第 1 个 1MB
的内存空间;
(2)采用内存分段方式,程序所使用的逻辑地址为 16 位段地址:16
位偏移地址,每段小于等于 64KB。20 位物理地址由段地址左移 4 位加偏移
地址得到;
(3)CPU 总是从地址 CS:IP 处取指令,EIP 的高 16 位为 0;
(4)SS:SP 表示堆栈段的栈顶地址,ESP 的高 16 位为 0;
(5)对于 32 位 80x86 CPU,程序可以使用 32 位寄存器和 32 位操作
数,但采用 32 位寄存器表示偏移地址时,只使用低 16 位,高 16 位为 0。
2.7 首字单元地址:23A10H;末字单元地址:23A1EH。
2.8 这些数在内存的存放情况如下:
…
0
3
47H
2BH
2AH
0
1
…
10006H
10005H
10004H
10003H
10002H
10001H
10000H
2.9 (1)CF = 1 OF = 0 SF = 0 ZF = 1 (2)CF = 0 OF = 1 SF =
1 ZF = 0
= 1 ZF = 0
(3)CF = 1 OF = 1 SF = 0 ZF = 1 (4)CF = 0 OF = 0 SF
2.10 (1)CF = 0 OF = 0 SF = 0 ZF = 0 (2)CF = 0 OF = 1 SF =
0 ZF = 0
SF = 1 ZF = 0
(3)CF = 1 OF = 0 SF = 1 ZF = 0 (4)CF = 1 OF = 1
第 3 章
3.1 (1)SS (2)CS (3)DS (4)FS (5)SS (6)DS (7)DS (8)
ES
3.2 (1)正
确
不匹配
(2)类型
(3)两个操作数不能同时是内存操作数 (4)没有
[esp][eax*3]这种操作数形式
(5)正
确
能作为目的操作数
(7)类型不确
定
数形式
(6)CS 不
(8)没有[sp]这种操作
(9)条件转移指令的操作数只能是标号 (10)正确
(11)不能将立即数送段寄存器
(12)没
有 bx+2 这种操作数形式
3.3 (1)27feh (2)2a00h (3)2802h (4)2801h
(5)27feh(段内调用)或 27fch(段间调用)
(6)2802h(段内返回)或 2804h(段间返回) (7)27fch (8)
2804h
3.4
3.5
DEC 指令不影响 CF,SUB 指令影响 CF。
不能。转移类指令(如 JMP、Jcc、LOOP、CALL、RET 等)的
执行会改变 IP 的值。
3.6
无符号数比较:
(1)ZF = 1 (2)ZF = 0 (3)CF = 1 (4)CF = 1 或 ZF = 1
(5)CF = 0 且 ZF = 0
(6)CF = 0
带符号数比较:
(1)ZF = 1 (2)ZF = 0 (3)SF <> OF (4)SF <> OF 或 ZF = 1
(5)SF = OF 且 ZF = 0 (6)SF= OF
3.7
CALL 指令执行的操作:
(1)返回地址进栈。
段间调用:CS 与 IP(下一条指令的地址)依次进栈。
段内调用:IP(下一条指令的 16 位偏移地址)进栈。
(2)转移到过程的第一条指令去执行。
段间调用:根据操作数,将 32 位分段地址送 CS:IP。
段内调用:根据操作数,将 16 位偏移地址送 IP。
RET 指令执行的操作:将返回地址出栈,从而实现转移到返回地址处。
段间返回:出栈一个双字到 CS:IP。
段内返回:出栈一个字到 IP。
3.8
AX 的值将是返回地址的 16 位偏移地址。
3.9 (1)除数为 0。 (2)除数太小,被除数太大,导致商溢出。
3.10 (1)cbw (2)cwd (3)cdq (4)bt ax, 0
3.11 (1) mov ah, 0
add ax, bx
(2) cbw
add ax, bx
(3) movsx eax, al
add eax, ebx
3.12 将 DX:AX 中的双字数右移 4 位。
3.13 指令 AL CF OF SF ZF
xor
mov
al, al
0
0
0
0
1
al, 255
0ffh
0
0
0
1
al
al
0
0ffh
0
al, 1
0feh
1
al, 10
0feh
al, 7fh
7fh
0
0
0
0
0
1
0
0
0
1
1
0
1
1
0
0
0
0
al, 1
0feh
0
1
1
0
inc
not
shl
cmp
sub
shl
3.14
(1)
jcxz
done
next:
mov
bl, [si]
mov
inc
inc
es:[di], bl
si
di
loop
next
done:
(2)
jcxz
done
next:
mov
es:[di], eax
sub
loop
di, 4
next
done:
(3)
jcxz
done
next:
mov
ax, [si]
cmp
ax, es:[di]
pushf
add
add
popf
loope
si, 2
di, 2
next
done:
3.15 将 AX 与 DX 中的 4 位十进制数对应的压缩 BCD 码相加,结果
存入 AX。
3.16
例如,若 AX = 1234H,DX = 5678H,则结果 AX = 6912H。
(1) mov
bl, al
and
mov
shr
bl, 0fh
bh, al
bh, 4
(2) shl
ax, 1
rcl
rcl
bx, 1
cx, 1
(3) cmp
al, 10
jge
cmp
jle
clc
jmp
setcf
al, -10
setcf
exit
setcf: stc
exit: