1
,第
42
页,检测点
4.2
,第
1
题。本程序有误,正确的内容是:
(由网易邮箱读者
'
小小鸟
'
、
读者
'
闪耀
'
、
'
流星梦
'
和
'
二玉
'
发现)
mov ax,0xb800
mov ds,ax
mov byte [0x00],'a'
mov byte [0x02],'s'
mov byte [0x04],'m'
jmp $
times 510-($-$$) db 0
db 0x55,0xaa
2
,第
52
页,第
24
行,正确的内容是:
(由
读者
'
闪耀
'
发现)
mov ax,[0x02] ;
按字操作
3
,第
53
页,第
4
行,正确的内容是:
(由
读者
'tome'
发现)
mov [0x02],bl
4
,第
65
、
80
、
94
、
129
、
138
页中,需要更正和明确
loop
指令、短转移指令
jmp short
、相
对近转移指令
jmp near
和相对近调用指令
call near
的操作数计算方法和执行过程。
(由网
易邮箱读者
'
小小鸟
'
、
读者
'
艾小羊
'
提出)
首先,
这些指令的操作数都是相对于目标位置处的偏移量。
但需要指出的是,
偏移量
的计算方法取决于实际的编译器,书中所说的
“
用目标位置处的汇编地址减去当前指令的汇
编地址,再减去当前指令的长度
”
,不应算错。
其次,处理器的执行过程严格地说,是非
IA-32
架构的组成部分。因此,除了结果是
确定的,
各步骤的先后次序取决于处理器的设计。
历史上,
指令的执行过程有不同的解释和
说法。但本书对这些指令执行过程的解释比较模糊和武断。为严谨起见,再统一描述如下:
在以上指令的编译阶段,
编译器用目标位置处的汇编地址减去当前指令的下一条指令
的汇编地址,结果做为操作数;处理器在执行一条指令时,指令指针寄存器
IP
会自动指向
下一条指令。因此,当以上指令执行时,
IP
的内容就是下一条指令的偏移地址。处理器用
IP
的内容加上指令的操作数(如果是
call near
指令,还要压入
IP
的内容)
,并用该值取代
IP
中的原有内容。
5
,第
79
页,检测点
6.1
。正确的内容是:
(由
读者
'
闪耀
'
发现)
选择填空:
MOVSB
指令每次传送一个(
)
,
MOVSW
指令每次
……
6
,第
86
页,第
26
行:
(由
读者
'
闪耀
'
发现)