回复 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 就有点不守规矩了 不知什么原因
梅尚程荀
马谭杨奚