UMEHOSHI ITA TOP PAGE
アセンブラグローバル変数使う繰り返しの実験ページ(制御ボード「UMEHOSHI ITA」用)
UMEHOSHI ITA基板で使っている制御チップのPIC32MX270F256B(MIPS32対応)用アセンブブラです。(
戻る
)
ローカル変数を使う例は、
こちらのページで実験できます。
(レジスタを使う繰り返しは、
こちらです。
)
#include <xc.h> // mytest.S .set noreorder #アセンブラに命令の順序を自動変更させない。 .section test_main,address(0x80005000),code .ent test_main test_main: ADDIU sp,sp,-24 # 以下で使う24byteまでの退避サイスをスタックに作る。 SW ra,20(sp) # 現在の関数の戻り番地をスタックに退避 SW fp,16(sp) # 呼び出し前の関数のフレームポインタをスタックに退避 MOVE fp,sp # 現在の関数のフレームポインタをこの関数用に更新 lui v0,%hi(count) # int count=0;//グローバル変数内容を0にセット j L2 sw zero,%lo(count)(v0) # int count=0;//グローバル変数内容を0にセット L1: NOP LUI v0,0xa000 # 以下3行で_PTR_HANDLERS[_IDX_API_SEND_STRING]の内容をv0に設定する ORI v0,v0,0x41a4 LW v0,0(v0) LUI v1,%hi(.L_STR_HELLO) # v0の関数の引数を準備 JALR v0 # Raに戻り値を設置してv0の関数を呼び出す。(helloのUSB出力) ADDIU a0,v1,%lo(.L_STR_HELLO) # v0の関数の引数をa0レジスタに設定 NOP lui v0,%hi(count) # 以下5行で、count++;//グローバル変数の後置インクリメント lw v0,%lo(count)(v0) addiu v1,v0,1 # v1=v0+1 lui v0,%hi(count) sw v1,%lo(count)(v0) L2: lui v0,%hi(count) # 下記4行でcount < 3 の判定と継続用分岐 lw v0,%lo(count)(v0) slti v0,v0,3 bnez v0, L1 # 上記が成立であれば、繰り返すためのジャンプ nop MOVE sp,fp # フレームポインタで退避前でspを退避前に戻す。 LW ra,20(sp) # 現在の関数の戻り番地をスタックから復元 LW fp,16(sp) # この関数の呼び出し前のフレームポインタをスタックから復元 JR ra # この関数の呼び出し後に移動(リターンに相当する) ADDIU sp,sp,24 # この関数の呼び出し前のスタックポインタに戻す .end test_main .section L_STR_HELLO,address(0x80005098),code .L_STR_HELLO: .ascii "hello\r\n\x00" .section SEC01,address(0x80008000),code count: .word 0x0000ffff
上記で編集したアセンブリソースを、左のボタンで「アッセンブル」できます。
番地から実行する
UME専用Hexコマンド
を、 最後に追加埋め込みする場合にチェックする==>
上記で生成した
UME専用Hexコマンド
を コピー(
CTRL+A
CTRL+C
)して
UMEHOSHI ITA
へ転送して動かすことができます。
UMEHOSHI ITAへ転送は、次の手法などで可能です。
「Tera Term」のようなターミナルソフトで、上記アッセンブル結果のコピー貼り付けで転送し、実行する。
上記アッセンブル結果をファイル化して、
「umehoshiEdit」開発ツールで開いて転送し、実行する。
(ファイル化する場合のファイル拡張子を
.hex
にすることで、umehoshiEditで開くことができます。)
上記アッセンブル結果をファイル化して、をれを
Pythonなどで作った転送用プログラムで転送し、実行する。