[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 零 - 序
注意:本文经过原作者授权转译,转载请标明出处
近来沉迷学习,网上翻到大佬Markey Jester 的关于 摩托罗拉68K (Motorola 68000,以下皆简称m68k) 这个cpu 的汇编教程,心血来潮边译边学,附带些个人笔记(以 斜体 标识)
正如我们熟知的Intel 8086 一样,m68k 也是一款经典cpu,大量用于街机游戏如Capcom 的街头霸王系列,Igs 的三国战纪系列等等
原作者说明本教程并不完整,但足够作为学习m68k 的一个非常好的开始,翻译完整后我会视情况有可能的情况下做一些补充章节 (当然也可能会鸽hhhhhh
原定于把系列发于简书 (地址),不过简书的markdown 功能不全,而且SEO 很糟糕,现在从简书搬运过来,简书那边就暂不更新了
原文地址:http://mrjester.hapisan.com/04_MC68/
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
大家好,我是马基杰斯特,这些年来我都在编写m68k 汇编程序,并且做了一些《刺猬索尼克》(Sonic the Hedge) 系列的 ROM 修改 (即hack),也做了一些自己的游戏原型,如今我正在从头开始做一款运行在世嘉Mega Drive 上的完整的游戏
一开始的时候我在学习m68k 汇编语言的时候也不顺利,并发现很多的教程都没什么帮助。事实上,它们中很少有适合初学者的,并且都说的很模糊。其中只有一篇我觉得确实把我引向了正确的方向,就是SonicRetro 成员redhotsonic 的那篇指南,尽管他的文章里的某些地方有些缺陷让它看起来没那么实用
所以我尝试通过这篇完全照顾到初学者的m68k 教程来帮助大家绕过网上的那些含糊其辞的 "指南"。如果你有任何问题,建议或是意见,请联系我:markeyjest@gmail.com *
*注意:我已经收到很多封谈到模拟器
BSVC
的邮件并且大部分问题都与正确的使用指令有关,可惜我恐怕并不熟悉BSVC
或是EASy68k
,并且这些问题都跟特殊的硬件相关而与 m68k 本身并没有多大关系。所以在这种情况下我并不能帮到你们什么,如果遇到类似问题的话建议先去翻翻相关硬件或是模拟器附带的说明手册
祝 好运!
目录
第零部分 - 序
第壹部分 - 基础介绍
m68k 汇编的一些基础
第贰部分 - 基本指令
一些简单易用的基本指令
第叁部分 - 位 指令
这一部分介绍一些关于位运算的指令
第肆部分 - 正负 指令
这部分的指令与正负值相关,还有一些其他类似的指令
- 有效位
- 有符号 和 无符号
- NEG 指令
- EXT 指令
- 移位
- LSL, LSR, ASL 和 ASR 指令
- ROL 和 ROR 指令
- MULU 和 MULS 指令
- DIVU 和 DIVS 指令
- 家庭作业答案 - 4
第伍部分 - 程序流程控制
在这一章,我们会了解一些能够让 m68k 跳转到程序的不同位置的指令
- PC (Program Counter) 程序计数器
- JMP (跳转) 指令
- BRA (分支) 指令
- SP (Stack Pointer) 栈指针寄存器
- JSR & RTS (子过程调用/返回) 指令
- BSR (分支到子过程) 指令
第陆部分 - 条件分支
这些指令也会修改PC
达到程序跳转或分支的目的,不过这次会根据一些情况来选择是否跳转/分支
- CCR (状态字寄存器)
- CMP, TST & BTST (测试) 指令
- BEQ & BNE (相等条件分支) 指令
- BPL & BMI (正负条件分支) 指令
- BVC & BVS (溢出条件分支) 指令
- 有符号比较分支 (BGE, BGT, BLE, BLT)
- 无符号比较分支 (BCC, BHI, BLS, BCS)
- 家庭作业答案 - 5
第柒部分 - 条件指令及其他 (建设中...)
这一章会介绍一些特殊情况下生效的指令还有一些乱七八糟的指令