call 标号以及段的问题
段:2002:0000-2002:FFFF物理地址即20020-3001F这两个地址,物理地址实际就是一前一后,同一个段
2002:FFFF=3001F
2003:FFEE=3001E
假如这里我做个标号 s: 2003:FFEE=3001E
如果我用call s
call s 按小甲鱼说的实现的是段内跳转,这两组数的段地址明显不一样,那到底能不能跳转?如果能跳转就说明是段内跳转,
也就是说是同一个段,如果不能跳转就说明这两组数的确是不同一个段,只是物理地址相邻而己?
是不是这样理解?
这个问题纠结了好长时间了~~求大虾指点~~
0:10 表示物理地址 10
01:0 表示物理地址 10
我看你对段地址有误解,物理地址一前一后不一定就在同一个段中,要看你的程序的实际情况来定。如果CALL指令后第一个字节的地址到标号S处的地址的位移大于32767个字节或小于负的32768个字节那就不能跳转了,这时可以采用段间转移了。说明白一点,如果CALL指令的下个字节地址到标号S处3001E地址的位移为32767个字节,那么第3001F单元就不能用段内转移了。 段地址并不是表示一个段,2002:FFFF=3001F=3001:F, 物理地址3001F的段地址是可以用多种表示方法的,它的段地址的取值范围可以是最小为2002到最大为3001中的任何一个数来表示:lol:
页:
[1]