7

我最近一直在重温摩托罗拉 68000 的编程。诚然,当我参加这门课程时,我只是做了必须通过的事情(并且遇到了一个糟糕的教授)……但现在我实际上对这些东西很感兴趣。无论如何,翻阅我的旧教科书James L. Antonakos 的 68000 微处理器,他使用以下代码:

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

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

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

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

END START

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

4

2 回答 2

9

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

(例如 Atari ST 用于TRAP调用操作系统,您通常将所有相关信息都传递到堆栈上。寄存器内容被忽略了。我相信 Mac OS 的“系统”也TRAP以类似的方式使用,而 Amiga 没有根本不使用它。)

于 2010-08-01T17:17:45.287 回答
4

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

于 2012-01-17T16:04:11.327 回答