为了更好理解CMD,通过MAP文件,发现PAGE0里面的PROG1只有0x213个字节,而在5402的程序空间从0x0080到0x3fff是DARAM(MP/MC=0,OVLY=1),在只有我把PAGE0里面的PROG1改成如下:(0x3fff - 0x213 + 1 = 0x3ded)
PROG1: org = 0x3ded len = 0x1200
生成的MAP
这样写没问题,但结合你的实际是又问题的. 既然DARAM 的空间是从0x80 ~ 0x3fff, 那
PROG1: org = 0x3ded len = 0x1200的范围已经超出0x3fff的边界了. 工具应该不会发现这种错误, 基本原则是CMD里的地址空间应该是和你系统实际的物理空间一致的. 这样当有超出边界, 工具会报告错误.
至于那个超出0x4000还能运行,这个有可能是确实有实际的0x4000地址空间存在,或者程序的错误不是很严重,从而程序好像还能正常运行. main.obj好像才占两个WORD, 是不是啥也没做?
|