关于 王爽的汇编语言 试验8看不懂啊

[复制链接]
查看11 | 回复5 | 2011-9-9 10:25:14 | 显示全部楼层 |阅读模式
你应该从指令的含义上来理解。jmp short s1 是短跳转,只包含了相对偏移。根据你的代码,它此处的含义是jmp -xxx ,注意-xxx 表示一个负的偏移。在s处也这样jmp -xxx后,它自然跳到了mov ax,4c00h 处。你之所以不能理解是因为把这个s1和jmp指令硬联系在了一起,我再强调一次短跳转里没有包含s1的绝对地址。如果你用jmp far ptr s1,这样肯定会跳到s1,但这个地址是32位的,ax无法完全容纳,到时也会乱跳。...
回复

使用道具 举报

千问 | 2011-9-9 10:25:14 | 显示全部楼层
1493:0016 EBF0
JMP
0008
对应s0: jmp short s ↓1493:0008 EBF6
JMP
0000
对应 jmp short s1前面的意思是向上跳16个字节后面那句的意思是向上跳10个字节从这个例子里应该要学...
回复

使用道具 举报

千问 | 2011-9-9 10:25:14 | 显示全部楼层
我最近也搞懂这题,我说一下我的见解,首先程序中jmp short 标号的位移量,大家应该都知道怎么计算得了吧,就是标号处的偏移地址减去jmp指令的下一条指令偏移地址,那么这个实验八,楼主也知道了s标号处的两个nop变为了jmp short s1,当程序执行到jmp short s的时候,那么偏移量就为负数,那么就是往上跳,跳到了s标号处,我们知道s标号的两条...
回复

使用道具 举报

千问 | 2011-9-9 10:25:14 | 显示全部楼层
那首先这题 你要是真的把 s 当成 jmp short s1 那就错了
如果是那样的话 ,你就会想当然的跳到s1那
但其实不是的
前边复制的是内存里的内容
也就是说复制的是
jmp short s1 的机器码
假如机器码是这样的:EB -5(十进制负数先理解嘛~) 也就是向上走五个 那么 现在...
回复

使用道具 举报

千问 | 2011-9-9 10:25:14 | 显示全部楼层
那四个最长的语句的作用就是将S2中的jumpshort s1复制到S:的第一个nop那里,当执行完这四个最长的语句后往下执行S0:jumpshort s,此时跳到S:执行刚才复制过来的jumpshort s1,该指令原来的功能是偏移地址往上移,现在也是这个功能,所以就执行了上面反回程序的语句...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行