微笑向暖~ 发表于 2017-11-8 22:56:36

求详细解释,谢谢!!!



求详细解释,谢谢!!!

3-3 发表于 2017-11-9 08:05:05

这是间接转移,要使cs:ip指向第一条指令,就需要将数据段ds中相应的位置进行重新赋值。由于cs:ip 是由低位到高位存储,所以 ds:0中存放ip,ds:2中存放cs,cs是系统中就有的,直接用就可以。这里就需要求偏移量ip,可以使用word ptr 0   或者 offset start。

兰陵月 发表于 2017-11-25 00:58:38

本帖最后由 兰陵月 于 2017-11-25 01:23 编辑

JMP FAR的解释如下(NASM环境):


王爽汇编语言(MASM环境)里有jmp dword ptr的解释,它实际上就是jmp far [内存单元]。如下图:


jmp dword ptr ds:的解释如下:
用ds:指向的那个字作为IP的值,
用ds:指向的那个字作为CS的值,
形成CS:IP,jmp跳转到CS:IP处执行。

根据题目的要求,jmp后,要跳转到CS:IP指向的位置—第一条指令处执行。
而我们可以看到,程序中第一条指令位于标号start处。
也就是说,即将作为IP值的DS:处存放的必须是标号start的地址,
即将作为CS值的DS:处存放的必须是code段的段地址。
这样才能达到题目的要求,jmp执行后,跳转到程序第一条指令。
注:标号中存放的实际上就是标号相对于段起始位置的偏移,它会在编译之后直接变成一个数值。
此处标号start紧邻code段定义之后,它的偏移值起始就是0。也就是说start就等于0。

题目中bx已经赋值为0,因此带空格的两条指令实际上就是:
mov ,____
mov ,______
我们知道,指令中如果没有使用段超越前缀的话,默认的寄存器就是DS。
因此上面两条带空格的指令实际就是:
mov ds:,______
mov ds:,_______

这样题目回答起来就很简单了。
mov , start
mov , CS
也可以是(当然这种回答是很不科学,很不通用的!):
mov , 0
mov , CS

页: [1]
查看完整版本: 求详细解释,谢谢!!!