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

时间:2010-07-28 18:55:32

标签: assembly 68000

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

      ORG     $8000
HMSG  DC.B    'Hello!'
      DC.B    0  
      ORG     #8100  
START MOVEA.L #HMSG,A3  
      TRAP    #3  
      TRAP    #9  
      END     START  

这不会在Easy68k中编译,但该书有ASM68K referenced。当我将代码更改为此时,它可以工作。

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

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

END START

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

谢谢!
托马斯

2 个答案:

答案 0 :(得分:8)

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

(例如Atari ST使用TRAP来调用操作系统,你通常会在堆栈上传递所有相关信息。寄存器内容被忽略。我相信Mac OS“System”使用了{{1}以类似的方式,Amiga根本没有使用它。)

答案 1 :(得分:3)

68000提供了16个用户陷阱(软件中断/异常),但未指定它们的作用。这取决于系统BIOS / OS,无论是模拟器还是Amiga,Atari ST等。您可以在本文档底部的Easy68k中找到TRAP 15执行的任务列表http://www.easy68k.com/files/EASy68KQuickRef.pdf