注意:本文經過原作者授權轉譯,轉載請標明出處
近來沉迷學習,網上翻到大佬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
第柒部分 - 條件指令及其他 (建設中...)
這一章會介紹一些特殊情況下生效的指令還有一些亂七八糟的指令