shapa にはいくつか便利な特徴が付いています
以下に記載したモノ以外の細かい機能に関して全部書くのメンドイので,詳しくは
% shapa --help
とかで見て下さい
1番使う機能です
% shapa sample.prg
↑コレでバイナリに変換された結果が,"prg.bin" というファイルに書かれます
"prg.bin" が嫌いな人は,"-o" オプションで出力ファイル名を指定する事も可能です
% shapa -o hoge.bin sample.prg
あんま使わないカモ知れません
アセンブリ言語→バイナリ変換してものを,アセンブリ言語に戻す機能です
「アレ?思うようにプログラムが走らないぞ!?」と思ったら使ってみて下さい
デバッグ目的に作ったモノです
% shapa -m prg.bin -o prg.asm
"-m" オプションで逆変換指定 ("m" は mnemonic の "m" です)
入力ファイルは "prg.bin" ですが,デフォルトの出力ファイル名は "prg.bin" なので,上書きしてしまいます
なので "-o" オプションで出力ファイル名を変えて,上書きを回避して下さい.
授業では,時々しか使わないカモ?でも pico 実験の時は便利なハズです
% shapa -n 12 -34 0xAB 012 0b1010
[16bit]
-------------------------------------------
num bin oct dec hex
-------------------------------------------
12 0000000000001100 000014 12 000C
-34 1111111111011110 177736 -34 FFDE
0xAB 0000000010101011 000253 171 00AB
012 0000000000001010 000012 10 000A
0b1010 0000000000001010 000012 10 000A
-------------------------------------------
↑ブラウザ上ではカナリ形が崩れてると思いますが,コンソール上ではキレイに表示されます
1番左の "num" がコマンドライン上に入力した数値,
"bin","oct","dec","hex" はそれぞれ 2,8,10,16進数に変換した結果です
表の1番上に"[16bit]"と書かれているのは,全て 16bit で変換されている事を示します
これを変えるには,"-b" オプションを使います
% shapa -b 4 -n 12 -34 0xAB 012 0b1010
[4bit]
-------------------------------
num bin oct dec hex
-------------------------------
12 1100 14 -4 C
-34 1011110 136 -34 5E Overflowed!!
0xAB 10101011 253 -85 AB Overflowed!!
012 1010 12 -6 A
0b1010 1010 12 -6 A
-------------------------------
変換時にビット数が4を超えた値には,右側に "Overflowed!!" が出力されます
また signed/unsigned を指定したい場合は,"-s signed" もしくは "-s unsigned" オプションを使います
授業では,あんま使わないカモ.でも pico 実験の時は便利なハズです
% shapa -a hello world
[hello]
---------------------------------------------------
radix ascii code
---------------------------------------------------
bin 01101000 01100101 01101100 01101100 01101111
oct 150 145 154 154 157
dec 104 101 108 108 111
hex 68 65 6c 6c 6f
---------------------------------------------------
[world]
---------------------------------------------------
radix ascii code
---------------------------------------------------
bin 01110111 01101111 01110010 01101100 01100100
oct 167 157 162 154 144
dec 119 111 114 108 100
hex 77 6f 72 6c 64
---------------------------------------------------
"hello" と "world" を変換した結果がそれぞれ出力されます
表の左側の "bin","oct","dec","hex" は…もう分かるよね?
因みに "hello world!!" を変換しようとすると
"!" がシェル上で前のコマンドとかに変換されるので,色々オカシナ事が起きます
"!" だけじゃなくて "&","*","?" 等も要注意です
特殊記号を変換する場合は,バックスラッシュ付けるなり,シングルクォートで囲うとか工夫して下さい