china_ymex 发表于 2011-11-9 12:49:48

对实验八(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 程序正常结束。

新人一定要注意 计算位移量时标号的位置,标号的地址是复制前的而不是复制后的。
我也是刚学这个,也算个新人,呵。个人见解,不对的话请高手指出。。。谢谢。也给后来人一个引导。。。。少浪费时间想这些东西。我做这题浪费了不少时间 。。。。不想后来人和我一样。。。。。。

china_ymex 发表于 2011-11-9 12:53:58

共同 建设我们的鱼c 论坛。。沙发自己坐:D

kane080824 发表于 2011-11-9 16:12:35

本帖最后由 kane080824 于 2011-11-9 16:14 编辑

其实对于段内转移来说,偏移的距离在复制指令前后并没有变化,变化的是,偏移的起始点位置变了,比如实验八中,前后的偏移距离都是f6,这个是没有变化的,变化的是偏移的起始点发生了改变,一个是在S2处开始偏移f6,一个是在S处开始偏移f6而已,不用去管偏移量是多少,要注意复制后的偏移是在新位置上开始的,而不要简单看标号,标号只有在没有发生复制时有效

china_ymex 发表于 2011-11-9 19:46:40

这应该是总结吧{:7_148:}

18555587 发表于 2011-11-10 06:41:40

让新手自己尝试吧,知道错了才长记性。

learn4c 发表于 2011-11-10 11:12:46

总结的好 标号在编译后是不存在的 只有偏移量

100531319 发表于 2011-11-10 11:16:32

我也是新人,我知道只要多想,多动手,还有小甲鱼老师的解说,很快就能理解的{:5_109:}

ever.g 发表于 2011-11-10 13:40:37

虽然知道怎么回事 看到LS的各种说法,更加深理解了!

china_ymex 发表于 2011-11-10 17:45:39

如果 知道 小甲鱼的下一个视频对这个实验有讲解。打死我也不会发这个帖子。悲剧吖,。。。。。:L

阿飞-祁磊 发表于 2012-12-22 21:53:18

我也被这个程序玩儿了。。。

yoyodj 发表于 2017-1-6 18:24:46

0a是怎么算出来的啊?想不懂
页: [1]
查看完整版本: 对实验八(8)的理解