■
とりあえずHelloです!こんにちわ!
--- Q. ジョニーはプログラマです --- ●に入ることばを答えなさい ボブ「こんにちは、ジョニー」 ジョニー「こんにちは、●●」 ボブ「いや、世界て。」
さくさくいくですよ。
with Ada.Text_IO; procedure Hello is begin Ada.Text_Io.Put_Line("hello world"); end Hello;
~/test/ada$ gnatmake hello ~/test/ada$ ./hello hello world
gnatmakeは便利すぎだと思います!
さて、このプログラムはどんなアセンブリに変換されるでしょうか!新しい言語を学ぶときに必要なのは、まず、アセンブリを出力することです!!私もm68k言語はそうやって勉強したともいえるし、そうでないともいえる。
(そもそもm68k知らない。)
~/test/ada$ gcc -S hello.adb ~/test/ada$ cat hello.s .section __TEXT,__text,regular,pure_instructions .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 .data .const .align 2 LC0: .ascii "hello world" .align 2 LC1: .long 1 .long 11 .data .align 3 LC2: .long LC0 .long LC1 .section __TEXT,__text,regular,pure_instructions .align 2 .align 2 .globl __ada_hello .section __TEXT,__text,regular,pure_instructions .align 2 __ada_hello: mflr r0 stmw r30,-8(r1) stw r0,8(r1) stwu r1,-80(r1) mr r30,r1 bcl 20,31,"L00000000001$pb" "L00000000001$pb": mflr r31 addis r2,r31,ha16(LC2-"L00000000001$pb") la r2,lo16(LC2-"L00000000001$pb")(r2) lwz r3,0(r2) lwz r4,4(r2) bl L_ada__text_io__put_line$2$stub lwz r1,0(r1) lwz r0,8(r1) mtlr r0 lmw r30,-8(r1) blr .data .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 .align 2 L_ada__text_io__put_line$2$stub: .indirect_symbol _ada__text_io__put_line$2 mflr r0 bcl 20,31,L0$_ada__text_io__put_line$2 L0$_ada__text_io__put_line$2: mflr r11 addis r11,r11,ha16(L_ada__text_io__put_line$2$lazy_ptr-L0$_ada__text_io__put_line$2) mtlr r0 lwzu r12,lo16(L_ada__text_io__put_line$2$lazy_ptr-L0$_ada__text_io__put_line$2)(r11) mtctr r12 bctr .data .lazy_symbol_pointer L_ada__text_io__put_line$2$lazy_ptr: .indirect_symbol _ada__text_io__put_line$2 .long dyld_stub_binding_helper ~/test/ada$
アセンブリがppcなのは、アレです、もうエロゲはやらないとか、そういったような誓いの意味がこもってるとかそういうの。
さてもんだいですどぎゅーんx86命令は他のCPUには無い大きな特徴を持っていますそれを答えなさい。答え:エロゲが実行できまする
チューリング完全とかあんまり関係無いですーー。
int main() { return 0xff; }
これは、
.section __TEXT,__text,regular,pure_instructions .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 .section __TEXT,__text,regular,pure_instructions .align 2 .align 2 .globl _main .section __TEXT,__text,regular,pure_instructions .align 2 _main: li r3,255 blr .subsections_via_symbols
こんな感じになった。ふーんみゅ
- li は即値ロード。確か、r0と定数を加算するのがliだったようなうろおぼえですよ
- 戻り値はr3に入れる
ぐらいわかりました。
.section __TEXT,__text,regular,pure_instructions .align 2 _main: li r3,255 addi r3,0,255 blr .subsections_via_symbols
これが、
~/test/gcc$ gcc -c -O2 main.s ~/test/gcc$ otool -t -v main.o main.o: (__TEXT,__text) section _main: 00000000 li r3,0xff 00000004 li r3,0xff 00000008 blr
こんな感じっす。liはadd r0だっていううろおぼえはあってたもよぅ。
まだまだ問題です
- .section __TEXT,__text,regular,pure_instructionsて?
なんだか、深みへ行けそうです。どなたかMach-Oバイナリについて教えてくれりょんぬ。
なんだか、ピュアって純真そうな感じですね。
私、ピュアな恋を探してます。ピュアっていうのは具体的にいうと、副作用が無い?みたいな感じで。 全ての副作用は「副作用を起こす」というアクションの合成でできてます!! 甘い濃いより副作用を起こすアクションの合成からできた濃い!!
濃いのに透明です。
さて問題です。お金集めに情熱を注いでいる人はピュアだと言えるでしょうかーー哲学的ですね。
今日のまとめ:
「問題です」っていっぱい言った。