关于跳转指令的问题,很急!!非常急!!近日结贴
我的代码段比较长,用到一些跳转指令时会出现如下错误:
error A2053: Jump out of range by 73 byte(s)
error A2053: Jump out of range by 68 byte(s)
error A2053: Jump out of range by 66 byte(s)
error A2053: Jump out of range by 61 byte(s)
error A2053: Jump out of range by 59 byte(s)
是不是说溢出了,请问该如何解决?多谢
[解决办法]
是呀,我用的也是MASM,错误代码A2053不是LZ所说的.
Jump out of range by 59 byte(s)
我想应该是转移指令对IP的修改超过了范围.
在8086CPU中:
短转移IP的修改范围为-128~127
近转移IP的修改范围为-32768~32767
初学不对之处请原谅!!!!
[解决办法]
MASM都有几个版本啊,经典的MASM6.14版本就是16位的,也就是使用AX,BX,CX,DX等16位的寄存器.在此条件下的跳转是
很严格的,有长跳,短跳,具体怎么跳我也一时说不清,因为我也很久没在16位下跳了
在MASM32,也就是MASM8版本里,代码最开始有一段:
.model flat,stdcall
flat告诉编译器在整个内存段都可以"跳",想怎么跳怎么跳,因为是32位的平坦地带~相对于16位就是那个著名的"分段寻址":
cs:ip,错位相加,加出来竟然只有16位.这就是它的著名初.当初的程序员非常聪明,至今我还在感叹~~
[解决办法]
可能是楼主的ja, je之类的条件跳转出了-128~+127的范围了,仔细检查一下,找到出错的代码。如果必须跳得很远的话,安插几条jmp搞空中接力,可以跳出30000多米远。