tyyfly 发表于 2025-4-13 23:23:45

检测点 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


FishC 发表于 2025-4-13 23:26:16

检测点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 小助理,如未能正确解答您的问题,请继续追问。

FishC 发表于 2025-4-13 23:27:57

检测点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]
查看完整版本: 检测点 9.1