mack1983 发表于 2013-12-19 05:43:47

call 标号以及段的问题

段:2002:0000-2002:FFFF物理地址即20020-3001F
这两个地址,物理地址实际就是一前一后,同一个段
2002:FFFF=3001F
2003:FFEE=3001E

假如这里我做个标号 s: 2003:FFEE=3001E
如果我用call s
call s 按小甲鱼说的实现的是段内跳转,这两组数的段地址明显不一样,那到底能不能跳转?如果能跳转就说明是段内跳转,
也就是说是同一个段,如果不能跳转就说明这两组数的确是不同一个段,只是物理地址相邻而己?


是不是这样理解?
这个问题纠结了好长时间了~~求大虾指点~~

霸气外露 发表于 2013-12-19 20:17:03

0:10 表示物理地址 10
01:0 表示物理地址 10

小燕双飞GO 发表于 2013-12-28 17:43:59

我看你对段地址有误解,物理地址一前一后不一定就在同一个段中,要看你的程序的实际情况来定。如果CALL指令后第一个字节的地址到标号S处的地址的位移大于32767个字节或小于负的32768个字节那就不能跳转了,这时可以采用段间转移了。说明白一点,如果CALL指令的下个字节地址到标号S处3001E地址的位移为32767个字节,那么第3001F单元就不能用段内转移了。

小燕双飞GO 发表于 2013-12-28 17:58:46

段地址并不是表示一个段,2002:FFFF=3001F=3001:F,      物理地址3001F的段地址是可以用多种表示方法的,它的段地址的取值范围可以是最小为2002到最大为3001中的任何一个数来表示:lol:
页: [1]
查看完整版本: call 标号以及段的问题