Math Coldfire/m68k跳转编码问题

Math Coldfire/m68k跳转编码问题,math,assembly,68000,coldfire,Math,Assembly,68000,Coldfire,因此,我正在使用coldfire(mcf5225x系列),在跳转编码方面遇到了一些问题,在本例中,跳转编码的二进制表示形式与68k相同 asmtest.o: file format elf32-m68k Disassembly of section .text: 00000000 <_start>: 0: 0682 0000 0040 addil #64,%d2 6: d481 addl %d1,%d2 8: 4efa

因此,我正在使用coldfire(mcf5225x系列),在跳转编码方面遇到了一些问题,在本例中,跳转编码的二进制表示形式与68k相同

asmtest.o:     file format elf32-m68k

Disassembly of section .text:

00000000 <_start>:
   0:   0682 0000 0040  addil #64,%d2
   6:   d481            addl %d1,%d2
   8:   4efa 0008       jmp %pc@(12 <exit>)
   c:   0682 ffff ffff  addil #-1,%d2

00000012 <exit>:
  12:   d081            addl %d1,%d0
asmtest.o:文件格式elf32-m68k
第节的分解。正文:
00000000 :
0:0682 0000 0040 addil#64%d2
6:d481添加%d1,%d2
8:4efa 0008 jmp%pc@(12)
c:0682 ffff ffff addil#-1,%d2
00000012 :
12:d081添加%d1,%d0

如您所见,jmp指令的模式和寄存器为111010,表示与PC的16位字扩展偏移量。16位扩展是与当前地址8hex的8hex偏移量。结果应该是12分,但我的数学说我得了10分。这里的问题是什么,为什么看起来生成了错误的跳转地址?这导致我正在设计的处理器模型出现一些问题。任何帮助都将不胜感激

偏移量是在JMP指令之后添加到PC值的,所以在我看来它是正确的。但它将是一条4字节的指令。。。这意味着它应该增加4,然后加上偏移量,这仍然给出了错误的值14而不是12。哦,是的,我明白了,那看起来确实是错误的。第2.2.8节真正奇怪的是代码没有使用BRA.b代替JMP d16(PC),也没有使用SUBQ.l#1,d2代替ADDI.l#-1,d2。优化器关闭了吗?