(1)若要使程序中的jmp指令执行后,CS:IP指向程序中的第一条指令,在data段中应该定义哪些数据?
assume cs:code
data segment
?
data ends
code segment
start:
mov ax, data
mov ds, ax
mov bx, 0
jmp word ptr [bx+1]
code ends
end start
解答:本题中,执行jmp word ptr [b+1]指令后,会将data段[bx+1]中的数据赋值给IP,题目要求指向程序中的第一条指令,因此IP需等于0,所以只需data[1]中的数据为0即可。
答案:db 8 dup(0) (这里定义八个字节的0)
(2)补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。
assume cs:code
data segment
dd 12345678H
data ends
code segment
start:
mov ax, data
mov ds, ax
mov bx, 0
mov [bx], __
mov [bx+2], __
jmp dword ptr ds:[0]
code ends
end start
解答:思路与上一题相同,执行完jmp指令后,跳到第一条指令(将IP置为0),jmp dword ptr ds:[0]指令执行完,会从ds:[0]开始,取出两个字的数据,把前面两个字节的数据赋值给IP,后面两个字节的数据赋值给CS,所以要将data[0]存放0,data[2]存放cs。
答案:bx cs
(3)用Debug查看内存,结果如下:
2000:1000 BE 00 06 00 00 00 ……
此时CPU执行指令
mov ax, 2000H
mov es, ax
jmp dword ptr es:[1000H]
后,(CS) = ? (IP) = ?
因 jmp dword ptr es:[1000H] 的功能是将从es:10000H开始的两个字(四个字节),前面的两个字节赋值给IP,后面两个赋值给CS。
则该程序执行后CS= 0060,IP=00BE