王爽汇编语言检测点 9.1

(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

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值