我最近一直在重新审视摩托罗拉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没有'完全使用它.)