| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2323 人关注过本帖
标题:jmp near ptr s
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 18楼 heliang6291
你这个说法可能也不对
我去做了个实验
一般来讲 jmp short s 的ip 修改范围是 -128~127
那么这个程序
程序代码:
;#Mode=DOS
;MASMPlus 单文件代码模板 - 纯 DOS 程序
;--------------------------------------------------------------------
;单个文件需要指定编译模式,否则默认是EXE方式,在系统设置中可以设置默认是DOS还是Windows.
;编译模式自带了DOS/COM/CON/EXE/DLL/LIB这几种,如果有必要,可以更改ide.ini添加新的编译模式
;当然,更好的是创建为一个工程.更方便及易于管理,使用方法:按Ctrl多选->创建工程.必须有多个文件

assume cs:code
code segment
start:  jmp short s
        db 128 dup (0)
        s : mov ax, 0ffffh
        mov        ax, 4c00h
        int        21h
code ends
end start
是跳不过去的 因为128大于127
编译器提示 :error A2075: jump destination too far : by 1 byte(s)
而jmp near ptr s的ip修改范围是(书上说)-32768~32767
但是
程序代码:
;#Mode=DOS
;MASMPlus 单文件代码模板 - 纯 DOS 程序
;--------------------------------------------------------------------
;单个文件需要指定编译模式,否则默认是EXE方式,在系统设置中可以设置默认是DOS还是Windows.
;编译模式自带了DOS/COM/CON/EXE/DLL/LIB这几种,如果有必要,可以更改ide.ini添加新的编译模式
;当然,更好的是创建为一个工程.更方便及易于管理,使用方法:按Ctrl多选->创建工程.必须有多个文件

assume cs:code
code segment
start:  jmp near ptr s
        db 65525 dup (0)
        s : mov ax, 0ffffh
        mov        ax, 4c00h
        int        21h
code ends
end start
是能通过编译的 如果把65525加一后即65526那么编译通不过
提示:error A2103: segment exceeds 64K limit : code
可见和nop没多大关系啊 貌似short很老实的遵循规则 而near ptr 就有点不守规矩了 不知什么原因

梅尚程荀
马谭杨奚







                                                       
2012-09-03 14:10
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
貌似db ??? dup (0)里究竟放多少个字节和一个段(segment)的长度上限有关系

梅尚程荀
马谭杨奚







                                                       
2012-09-03 14:13
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 22楼 有容就大
这些限制是 dos 这个系统的限制,还是 x86 架构的限制?
2012-09-03 16:26
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 23楼 pangding
是在MASMPlus里编译的 ;#Mode=DOS模式

梅尚程荀
马谭杨奚







                                                       
2012-09-03 16:59
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用pangding在2012-9-3 16:26:12的发言:

这些限制是 dos 这个系统的限制,还是 x86 架构的限制?

段的大小有上限 是架构的限制罢
2012-09-03 17:49
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用zklhp在2012-9-3 17:49:12的发言:


段的大小有上限 是架构的限制罢

我刚查 x86 的手册,段描述符里描述段长度的 limit 字段有 20位,所以段长度的上限至少应该有 1M。
如果开了分页,粒度位 G 置 1,则段的长度是页的整数倍,段长度的上限就会变成 4K * 1M = 4G。
2012-09-03 21:23
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 26楼 pangding
可能程序是局限在16位下的吧

梅尚程荀
马谭杨奚







                                                       
2012-09-03 21:56
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
收藏
得分:0 
回复 18楼 heliang6291
dup定义的不在code段里?

[ 本帖最后由 admin_xyz 于 2012-9-3 22:14 编辑 ]

总有人比你努力,可怕的是比你牛的人比你还努力。
2012-09-03 22:11
快速回复:jmp near ptr s
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.106074 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved