指令和机器码'并非'总是一对一的关系,机器码限制了长度,但指令不容易看出来.
比如jmp xxxx, xxxx是一个地址,程式师写的时候不必知道xxxx和跳跃起点的距离,
但编译器必须知道,到底编译成短跳SHORT,或正常跳NEAR,甚至远程跳FAR,
短跳跃编译为 EB ??(机器码总长度2字节,??是距离) ,
正常跳跃编译为E9 ?? ??(机器码总长度3字节,?? ??是距离),
回到楼主的问题,短跳跃的EB ??中,??若为正(0-7FH,0-127)则向后跳(IP加),
??若为负(80H-0FFH,-1~ -128)则向前跳(IP减),
有??这个 0-FFH 单字节的限制,短跳(JMP SHORT)的有效范围就是-128 ~ 127
比如jmp xxxx, xxxx是一个地址,程式师写的时候不必知道xxxx和跳跃起点的距离,
但编译器必须知道,到底编译成短跳SHORT,或正常跳NEAR,甚至远程跳FAR,
短跳跃编译为 EB ??(机器码总长度2字节,??是距离) ,
正常跳跃编译为E9 ?? ??(机器码总长度3字节,?? ??是距离),
回到楼主的问题,短跳跃的EB ??中,??若为正(0-7FH,0-127)则向后跳(IP加),
??若为负(80H-0FFH,-1~ -128)则向前跳(IP减),
有??这个 0-FFH 单字节的限制,短跳(JMP SHORT)的有效范围就是-128 ~ 127