2006/12/15

Final Project

【Computer Organization and Assembly Languages】的 final project 如果依循去年慣例,主題應該是自由選擇。目前一個可能的選項就是設計一個功能擴充的 TOY assembly language,然後寫一個 assembler 出來。當然,功能上必須有 nontrivial 的擴充,否則 classical TOY assembler 只花了 cyy 八個小時的時間,如果沒什麼長進,不但犯了軟體工程的大忌 "reinvent the wheel",整個 project 也沒什麼趣味。因為新的 assembly 功能上有擴充,因此應該也會有 optimization 的空間。也考慮過寫個 compiler 比較 nontrivial,不過這樣好像就偏離主題太遠了 XD。如果真的做這個的話,因為是 team project,所以不能叫做 JK-extended TOY assembly 了 XD。那…TOY86 怎樣?XD

如果最後決定 final project 不做這個,只是變成我自己一個人寫而已 XD。TOY86 這名字聽起來很不錯,"JK-extended TOY assembly" 長到爆炸,應該是捨棄掉了 XD。我想,再加個 memory operand 的功能吧(顯然是寫河內塔時,覺得把記憶體內容推入 stack 需要下兩行指令很煩的緣故 XD)。例如:

push [RB + 2]
  lda RF, 2
  add RF, RB, RF
  ldi RF, RF
  sti RF, RE
  lda RF, 1
  sub RE, RE, RF

add RA, [RB - 3], R2
  lda RF, 3
  sub RF, RB, RF
  ldi RF, RF
  add RA, RF, R2
  lda RF, 1
然後 PROC 再來個 cdecl 和 fastcall 兩種 calling convention,前者就如 JK-extended 所述,後者則用 register 傳遞引數 ─ 反正 TOY 的 register 夠多。x86 上面的東西只要適合都可以搬過來 XD。至於 optimization(esp. code size minimization)怎麼做要再推敲一番。

--
反正應該都是抄 x86 的,x 代換成 TOY 很合理 XD。

Labels: ,