|
发表于 2014-4-2 14:27:01
|
显示全部楼层
本来不想回答的。。不过你居然是40岁的大叔了。。。这必须回答啊。。。给你点32个赞
问题1:s2:jmp short s1 EBF6 跳转到s1 F6(-10)
s1:mov ax,0 B80000
int 21h CD21
mov ax,0 B80000
我数来数去都只有8个字节,这跳10个字节不对啊。
回答: 我们执行了jmp short s1之后才会跑到s1, 对吧? 此时ip指向的是jmp short s1下一句指令。。所以长度就是你输出来的8字节加上jmp short s1的2字节
问题2:jmp short s ;此时向前跳转到s处执行。这个跳转也是依据位移跳转的,跳转的距是:s2-s1。???不明白,求解
回答: 不是s1 - s1 而是 s1 - s
问题3:当指令执行到s0:jmp short s时,该指令得到执行,编译器算出的ip位移量为8-18h=-16(补码F0),(ip)=(ip)+位移量=18h+(-16)=8,cs:8指向s;
当指令执行到s标段jmp命令时,第1个字节中的机器码为EBF6,给出的ip位移量为-10(补码F6),(ip)=(ip)+位移量=ah+(-10)=0,cs:0指向第一条指令。
ip位移量为8-18h=-16),(ip)=(ip)+位移量=18h+(-16)=8
ip位移量为-10(补码F6),(ip)=(ip)+位移量=ah+(-10)=0 不明白这都是怎么计算的。
回答: 管它怎么算的。。。根据地址和指令长度算的。。。这个下载调试器中才能得到答案。。也就是得知道指令长度。。。反正不管这个。。这种补码神马的都他妈蛋疼。。。
|
|