对实验八(8)的理解
对于实验8,小甲鱼说,让系统玩一下。我想说的是,我被这个实验玩了,五节课实验八的程序如上左
在debug 中反汇编如上图右
在行10-13行的意思是把标号s2所在行的指令复制到标号s所在行处
程序从start 处开始执行
当执行到s0处时跳转到标号s处执行指令 jmp ahort s1
此时应注意这条指令的位移量 不是 18h - 9h
而是
8位位移量= 18h - 22h = f6h(-10的补码)
jmp short s1 相当于jmp cs:
cs= a4a4
ip =f6 +0a
所以程序开始执行指令 mov ax,4c00h int 21h 程序正常结束。
新人一定要注意 计算位移量时标号的位置,标号的地址是复制前的而不是复制后的。
我也是刚学这个,也算个新人,呵。个人见解,不对的话请高手指出。。。谢谢。也给后来人一个引导。。。。少浪费时间想这些东西。我做这题浪费了不少时间 。。。。不想后来人和我一样。。。。。。
共同 建设我们的鱼c 论坛。。沙发自己坐:D 本帖最后由 kane080824 于 2011-11-9 16:14 编辑
其实对于段内转移来说,偏移的距离在复制指令前后并没有变化,变化的是,偏移的起始点位置变了,比如实验八中,前后的偏移距离都是f6,这个是没有变化的,变化的是偏移的起始点发生了改变,一个是在S2处开始偏移f6,一个是在S处开始偏移f6而已,不用去管偏移量是多少,要注意复制后的偏移是在新位置上开始的,而不要简单看标号,标号只有在没有发生复制时有效 这应该是总结吧{:7_148:} 让新手自己尝试吧,知道错了才长记性。 总结的好 标号在编译后是不存在的 只有偏移量 我也是新人,我知道只要多想,多动手,还有小甲鱼老师的解说,很快就能理解的{:5_109:} 虽然知道怎么回事 看到LS的各种说法,更加深理解了! 如果 知道 小甲鱼的下一个视频对这个实验有讲解。打死我也不会发这个帖子。悲剧吖,。。。。。:L 我也被这个程序玩儿了。。。 0a是怎么算出来的啊?想不懂
页:
[1]