|
发表于 2017-11-25 00:58:38
|
显示全部楼层
本帖最后由 兰陵月 于 2017-11-25 01:23 编辑
JMP FAR的解释如下(NASM环境):
王爽汇编语言(MASM环境)里有jmp dword ptr的解释,它实际上就是jmp far [内存单元]。如下图:
jmp dword ptr ds:[0]的解释如下:
用ds:[0]指向的那个字作为IP的值,
用ds:[0+2]指向的那个字作为CS的值,
形成CS:IP,jmp跳转到CS:IP处执行。
根据题目的要求,jmp后,要跳转到CS:IP指向的位置—第一条指令处执行。
而我们可以看到,程序中第一条指令位于标号start处。
也就是说,即将作为IP值的DS:[0]处存放的必须是标号start的地址,
即将作为CS值的DS:[0+2]处存放的必须是code段的段地址。
这样才能达到题目的要求,jmp执行后,跳转到程序第一条指令。
注:标号中存放的实际上就是标号相对于段起始位置的偏移,它会在编译之后直接变成一个数值。
此处标号start紧邻code段定义之后,它的偏移值起始就是0。也就是说start就等于0。
题目中bx已经赋值为0,因此带空格的两条指令实际上就是:
mov [0],____
mov [0+2],______
我们知道,指令中如果没有使用段超越前缀的话,默认的寄存器就是DS。
因此上面两条带空格的指令实际就是:
mov ds:[0],______
mov ds:[0+2],_______
这样题目回答起来就很简单了。
mov [bx], start
mov [bx+2], CS
也可以是(当然这种回答是很不科学,很不通用的!):
mov [bx], 0
mov [bx+2], CS
|
|