我最近一直在重新审视摩托罗拉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处理器的标准?
谢谢!
托马斯
答案 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。