检测点 9.1
本帖最后由 tyyfly 于 2025-4-13 23:25 编辑(1) 程序如下
assume cs:code
data segment
?
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
jmp word ptr
code ends
end start
若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?
A: db 0,0,0 / db 3 dup (0) / dw 2 dup (0) / dd 0
(2)程序如下
assume cs:code
data segment
dd 12345678H
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov , (1)
mov , (2)
jmp dword ptr ds:
code ends
end start
补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。
A: (1) 0000h / word ptr 0 / offset start (2) cs
(3) 用debug查看内存,结果如下:
2000:1000 BE 00 06 00 00 00 ......
则此时,CPU执行指令:mov ax,2000H
mov es,ax
jmp dword ptr es:A: CS=0006h , IP=00BEh
检测点9.1 解答
(1) 答案分析
程序中的 jmp word ptr 需要跳转到第一条指令 mov ax,data。
由于是段内跳转(仅修改IP),数据段需提供目标偏移地址 0。
所有选项均会在内存中生成前两个字节 00 00,满足 IP=0 的条件。
正确答案:
[*]A: db 0,0,0
[*]A: db 3 dup (0)
[*]A: dw 2 dup (0)
[*]A: dd 0
(2) 补全程序
目标是通过 jmp dword ptr 跳转到第一条指令。需将 IP=0 和 CS=当前代码段值 存入数据段:
(1) mov , 0 ; 将IP设为0
(2) mov , cs ; 将CS设为当前代码段值
正确答案:
[*](1) 填 0000h 或 word ptr 0
[*](2) 填 cs
(3) Debug内存解析
内存 2000:1000 处的数据为小端存储:
BE 00 → IP=00BEh
06 00 → CS=0006h
执行 jmp dword ptr es:1000 后:
CS=0006h,IP=00BEh
正确答案:
CS=0006h, IP=00BEh
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 检测点9.1 答案
(1)问题答案
data段需要定义一个值为0的字类型数据。
正确选项:
[*]db 0,0,0(前两个字节为0)
[*]db 3 dup (0)(前两个字节为0)
[*]dw 2 dup (0)(两个0字)
[*]dd 0(低字为0)
关键分析:
jmp word ptr 是段内跳转,只需IP=0(指向第一条指令)。data段需在目标地址处提供两个字节的0。
----------------------
(2)问题答案
补全代码:
mov , 0 ; (1) 存入IP=0000h
mov , cs ; (2) 存入CS的值
jmp dword ptr ds:
关键分析:
jmp dword ptr 是段间跳转,需从内存读取双字(低字IP=0,高字CS=当前代码段)。
----------------------
(3)问题答案
执行结果:
[*]CS=0006h
[*]IP=00BEh
关键分析:
内存 2000:1000 处数据为 BE 00 06 00(小端模式):
IP=00BEh(取自前两个字节),CS=0006h(取自后两个字节)。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]