不同的68k模拟器有不同的TRAP任务吗?

Tho*_*mas 5 assembly 68000

我最近一直在重新审视摩托罗拉68000编程.不可否认,当我参加课程时,我只是做了必要的事情(并且有一位可怕的教授)......但是现在我真的对这些东西很感兴趣.无论如何,通过James L.Antonakos的旧教科书The 68000 Microprocessor,他使用以下代码:

      ORG     $8000
HMSG  DC.B    'Hello!'
      DC.B    0  
      ORG     #8100  
START MOVEA.L #HMSG,A3  
      TRAP    #3  
      TRAP    #9  
      END     START  
Run Code Online (Sandbox Code Playgroud)

这不会在Easy68k中编译,但本书引用了ASM68K.当我将代码更改为此时,它可以工作.

      ORG   $1000
HSMG  DC.B  'Hello!',0

START LEA   HSMG,A1
      MOVE  #14,D0  
      TRAP  #15

END START
Run Code Online (Sandbox Code Playgroud)

这只是因为编译器之间的差异?或者我错过了更大的东西?我知道在模拟器中TRAP #15执行当时寄存器D0中的任何任务,但每个模拟器是否有不同的陷阱任务,或者是所有68000处理器的标准?

谢谢!
托马斯

小智 8

TRAP指令只调用内存中某个长字所指向的例程.这部分行为对所有68000 CPU都是通用的.这个长字指向的地方,以及它指向的例程(以及因此如何传递它所需的数据等等)取决于特定的系统.

(例如Atari ST用于TRAP调用操作系统,你通常会在堆栈上传递所有相关信息.寄存器内容被忽略.我相信Mac OS"系统"也TRAP以类似的方式使用,而Amiga没有'完全使用它.)