能力值:
( LV13,RANK:410 )
2 楼
因为near jmp后面只有1byte的操作数
能力值:
( LV2,RANK:10 )
3 楼
你到底懂不懂啊,真好笑,最基本的问题你都搞错了!!
能力值:
( LV12,RANK:210 )
4 楼
最初由 wangdongqq 发布 看代码: ------------------- code segment assume cs:code start: ........ 不知所云
什么是近跳转, 什么是短跳转? 有什么区别
麻烦lz多看书
能力值:
( LV2,RANK:10 )
5 楼
我倒,段内直接短转移和段内直接近转移都不知道吗??
1.段内直接短转移
格式 JMP SHORT OPR
2.段内直接近转移
格式 JMP NEAR PTR OPR
懂了吗???我都觉的我很菜了,没想到有人比我还菜!!
能力值:
( LV2,RANK:10 )
6 楼
没人理我????
能力值:
( LV13,RANK:410 )
7 楼
确实说错了,是short jmp只有1byte的操作数。near是2byte.昨天头晕搞错了。表示歉意.
能力值:
( LV2,RANK:10 )
8 楼
怎么解释我的发现呢??
能力值:
( LV2,RANK:10 )
9 楼
code segment
assume cs:code
start:
x1: mov ax,01h
org 40000
jmp near ptr x1
code ends
end start
jmp short 的操作数为1Byte,最大范围为-128-127。jmp near ptr的 操作数为2Byte,因为段的大小为64k(偏移为0000-FFFF),当作无符号时,2Byte可以表示,所以不会出错,可以看成偏移地址。在汇编时,机器码中的操作数为地址差(jmp下一条指令的地址-标号地址),(IP)=(IP)+地址差,其实就是(IP)=(IP-标号+IP)。
不知道LZ明白码??
能力值:
( LV2,RANK:10 )
10 楼
按照我说的那种情况(IP)=(IP)+地址差,IP已经溢出了,为什么近转移不报错,能正常执行,而短转移却报错
能力值:
( LV2,RANK:10 )
11 楼
IP 如果溢出,就对65536取模。段转移报错,是因为地址差超出了表示范围(SHORT后的操作数类型为1Byte),lz 看看下面的程序:
code SEGMENT
ASSUME CS:code
start:
x1: MOV AX,01h
ORG 127
JMP SHORT x1
code ENDS
END start
把 127 改成126 或着把SHORT改成NEAR PTR时时 。。。 段内转移,根据地址差的大小来区分,如果程序员能肯定地址差不超出一个字节的范围,可以加上SHORT,否则加上near ptr,溢出就取65536的模。其实,在段内,不需要区分这些,只要是在一个段内,就用jmp 标号就对。段间用jmp far
ptr 标号。
不知道LZ明白了码????
能力值:
( LV2,RANK:10 )
12 楼
那是不是这样的:短转移的这个地址差实际上也是用2字节计算的??一旦溢出得的结果是4位16进制数xxxxH,由于溢出前两位数不为0因此没法用1字节表示就报错了??