2016年08月

Asembler for IchigoJam

SRC

BIN

     start address

略号の書式について

  • ※Rd = Rd (ビット演算子) Rm の書式は Rd (ビット演算子) = Rm になります。
    (例:Rd = Rd & Rm → Rd &= Rm)

IchigoJam マシン語解説ページ

更新

  • 2017/12/10 goto文の飛び先修正
    BX 命令修正
    BAL 命令削除
    ハイレジスタ(R8-R15)関連コマンドの修正
  • 2017/05/24 文法エラー行の表示を修正
  • 2017/04/26 IchigoLatte用アセンブラ追加
  • 2017/02/23 文法エラー行の表示と、行末にコメントを記述できるようにした
    行末のコメントは、1つ以上のタブまたはスペースの後に「'」に続けて書く
    (例: MOV R0,R1 '代入)
  • 2016/09/01 (by toshi)
    ラベルの飛び先修正
    アセンブラニモニック追加
    分岐条件追加
  • 2016/05/13
    R0=[R1+R2] W
    [R0+R1]=R2 W
    で16bit読み書き
  • 2016/04/03
    PUSH POP GOSUB GOTO Rn などの命令
    サンプルコード表示、先頭アドレス指定
    16進表記
  • 2016/03/29
    出力欄上のプルダウンでbinaryを選ぶと、16bitづつ 2進数表記で出力。

    Rn = [ @label ] でPC相対ロード(32bit) @label番地の内容をレジスタへ。
    アドレスが4の倍数(下一桁が0 4 8 C )になるようにdataなどで調整してください

    Rn = PC+@label @labelの実アドレスをRnへ。
    (省略形 Rn = @label)

    [R0+0]=R1 L など ロードセーブ系の末尾にLを付けると32bit転送
    Wで16bit  Bまたは何も付けないと8bit転送

    data 0,1,2,3,... で8bitデータ埋め込み
    data L 0,1,2,3,... で32bit
    data W 0,1,2,3,... で16bit
  • 2016/03/20 goto系でラベルを使えるように

License

このファイルはCC0 パブリックドメインとします
ニーモニック、マシンコードなどは、元々の作者のかたに帰属しますので各ライセンスにしたがって使用してください。

オリジナルは、以下のページになります。
Asembler for IchigoJam

表の右側が隠れてしまう場合は、以下のページを御利用ください。
http://tagiyasoft.blog.jp/armasm.htm

代入1514131211109876543210cyclesflag
Rd = u800100Rdu81
Rd = Rm0100011000RmRd1
Rd = Rm01000110Rd3RmRd2-01 or 3
※Rd3とRd2-0の4bitでRdを指定する、Rd=PCの時3cycles
演算1514131211109876543210cycles
Rd = Rd + u800110Rdu81
Rd = Rd - u800111Rdu81
Rd = Rm << u500000u5RmRd1
Rd = Rm >> u500001u5RmRd1
Rd = Rn + Rm0001100RmRnRd1
Rd = Rd + Rm01000100Rd3RmRd2-01 or 3
Rd = Rn - Rm0001101RmRnRd1
Rd = Rn + u30001110u3RnRd1
Rd = Rn - u30001111u3RnRd1
Rd = Rd & Rm0100000000RmRd1
Rd = Rd ^ Rm0100000001RmRd1
Rd = Rd << Rm0100000010RmRd1
Rd = Rd >> Rm0100000011RmRd1
Rd = -Rm0100001001RmRd1
Rd = Rd | Rm0100001100RmRd1
Rd = Rd * Rm0100001101RmRd1
Rd = ~Rm0100001111RmRd1
※Rd3とRd2-0の4bitでRdを指定する、Rd=PCの時3cycles
メモリアクセス1514131211109876543210cycles
Rd = [Rn + u5]01111u5RnRd2
Rd = [Rn + u5]210001u5/2RnRd2
Rd = [Rn + u5]401101u5/4RnRd2
[Rn + u5] = Rd01110u5RnRd2
[Rn + u5]2 = Rd10000u5/2RnRd2
[Rn + u5]4 = Rd01100u5/4RnRd2
Rd = [Rn + Rm]0101110RmRnRd2
Rd = [Rn + Rm]20101101RmRnRd2
Rd = [Rn + Rm]40101100RmRnRd2
[Rn + Rm] = Rd0101010RmRnRd2
[Rn + Rm]2 = Rd0101001RmRnRd2
[Rn + Rm]4 = Rd0101000RmRnRd2

条件判断1514131211109876543210cycles
Rn - u800101Rnu81
Rn - Rm0100001010RmRn1
Rn - Rm01000101Rn3RmRn2-01
Rn + Rm0100001011RmRn1
Rn & Rm0100001000RmRn1
※CMPHは、RdがR8-R15の場合に使用(正規のニモニックではありません)
分岐1514131211109876543210cycles
IF 0 GOTO n8 << 111010000n81 or 3
IF !0 GOTO n8 << 111010001n81 or 3
GOTO n11 << 111100n113
GOTO Rm010001110Rm0003
RET (=#4770)01000111011100003
CALL Rm010001111Rm0003
※条件コードのうち、GE,LT,GT,LEは符号付き
※GOTOに指定する値(n8/n11)は飛び先との命令数差分から-2した数を指定、分岐するとき3cycles
スタック1514131211109876543210cycles
PUSH regs1011010LRR7R6R5R4R3R2R1R01+N
POP regs1011110PCR7R6R5R4R3R2R1R01+N
※N:指定したレジスタの数、例)PUSH {R5,R4,R3}
特殊演算1514131211109876543210cycles
Rd = bic(Rd, Rm)0100001110RmRd1
Rd = asr(Rm, u5)00010u5RmRd1
Rd = asr(Rd, Rm)0100000100RmRd1
Rd = ror(Rd, Rm)0100000111RmRd1
Rd = rev(Rm)1011101000RmRd1
Rd = rev16(Rm)1011101001RmRd1
Rd = revSH(Rm)1011101011RmRd1
Rd = adc(Rd, Rm)0100000101RmRd1
Rd = sbc(Rd, Rm)0100000110RmRd1
※bic:ビットクリア、asr:符号付き右シフト、ror:右ローテート
※rev:byteオーダー反転、rev16:byteオーダー反転(2byteずつ)、revSH:符号付き16bitを反転32bit化
※abc:キャリー付き足し算、sbc:キャリー付き引き算
その他1514131211109876543210cycles
CPSID (=#B672)10110110011100101
CPSIE (=#B662)10110110011000101
WFI (=#BF30)10111111001100002
NOP (=0)00000000000000001
※CPSID:割込禁止、CPSIE:割込許可、WIF:割込待ち、NOP:なにもしない(no operation) R0=R0<<0 ※flag列は、命令の実行結果に基づいて条件コードフラグの更新の有無を表します。

- 連載、IchigoJamではじめる、ARMマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語

DATA: Cortex-M0プロセッサ - ARM
Text: CC BY ichigojam.net

オリジナルは、以下のページになります。
Cortex-M0 ARMマシン語表(抜粋)

↑このページのトップヘ