jmp 问题
用 “ jmp s” 或 “ jmp far ptr s” 不就把所有这类的跳转问题都解决了吗?就算是段内短转移和段内近转移也一样可以搞掂,为什么还要搞出 “jmp short s” 和 “jmp near ptr s” 这两个来, “ jmp s” 和 “ jmp far ptr s” 在这类转移中有没有会报错的情况,这两者之间在应用上又有什么区别??我新鸟一个,望高手指点!本帖最后由 jakes 于 2012-1-20 00:24 编辑
jmp short 标号 和jmp near ptr 标号 可以写成jmp 标号
jmp short和jmp near ptr只是在范围上区别,jmp short跳转范围为-128~127(8位),jmp near ptr的范围则是-32769~32767(16位)。
这些jmp指令,只是修改相对于当前IP的转移位移为IP。相当于jmp 寄存器.
jmp far ptr 标号 则是CS也修改,即段间转移。CS为标号所在段的段地址,IP为标号相对于所在段中的偏移。相当于jmp 段地址:偏移地址(debug专用)
jmp还可以使用内存中的内容当作CS,IP值实现跳转(像指针一样,内存单元存放地址)。
jmp word ptr 或 jmp dword ptr
也可以使用SJMP,AJMP或LJMP指令。 :L 位移?可移植性问题? 效率?
没深入学习,解释不清。。。 这些指令的机器码不一样,寻址方式也不一样,比如: jmp far ptr s是把S的段地址和拍内衣地址直接给CS和IP,而jmp near ptr s则表示“向前跳转XX字节或向后跳转XX字节”这样的语义。单单从使用方便的角度看, jmp far ptr s显然几乎是通用的。但但你像教材里一样复制该指令的机器码,粘帖到其它位置的时候,就会有明显不同的含义。 这我也是带着疑惑学的,希望小甲鱼老师出来申张正义,讲讲他们之间的区别,再细致一些,这个问题,可以发到投斥建议处的。 还希望专家来访谈一下,默默等待小甲鱼老师的出现。 这样设计一定有原因,我一直遵循小甲鱼的话:用到了再去学= = 结果一样 但效率不一样 jmp这个章节,尤其是最后个测试,虽然前面2个好写,第3个,他自己都说了感觉不是很好啊,在不出个讲解的话,我实在是只能理解,不能明白原因了,
答案如下,谁给分析分析。书本第184面
3)用Debug查看内存,结果如下:
2000:1000 BE 00 06 00 00 00 ......
则此时,CPU执行指令:
mov ax,2000H
mov es,ax
jmp dword ptr es:
后,(CS)=? , (IP)=?
提示:为了使本机环境中的数据与题目中所给出的数据一致,可以通过编写程序来完成,完整程序如下:
assume cs:code
code segment
start:
mov ax,2000h
mov ds,ax
mov bx,1000h
mov word ptr .0,0BEH
mov word ptr .2,6h
mov word ptr .4,0
;运行完上6句则使2000:1000--2000:1005中的数据依次为:BE,00,06,00,00,00
;以上6句则按题目中的数据进行初始化,以便使运行环境符合题目要求
;mov ax,2000h
mov es,ax
jmp dword ptr es:
code ends
end start
经上机调试得出:CS=0006H,IP=00BEH
IP我自己写的时候测的是00BEH,但是为什么CS是0020H呢。。。求解脱啊,,困扰啊~~:dizzy: 占个座听听大家的
页:
[1]