読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

機械語で語らう

C言語の會話でprintf("おはやう");みたいにするのは本質的にはC言語で會話してゐるとは言へないと云ふ話がありましたので、ここは大人しく機械語で會話出來るやうになるべく、機械語で最も話されてゐる言語、x86語の文法を御浚ひしておきませう。
まづ基本的に

單數 複數
一人稱 ax eax
二人稱 bx ebx
三人稱 cx ecx

と云ふのがあるので覺えておくと良いでせう。
簡單な例文を作つてみませう。「私は書く。」を作るとします。
「私は」は、「66 50」となります。基本的に主語にしたいものをpushする形になります。これは「push ax」です。
次に動詞の「書く」ですが、これは「書く」に對應する數動詞「4」をeaxにmovした後、割込詞「int」「80」を續けます。詰り「mov eax, 4; int」、即ち「89 04 25 04 00 00 00 80」となります。これを合せると

私は書く。

66 50 89 04 25 04 00 00 00 80

と書けることになります。
續いて否定です。「私は書かない。」を作るとします。
否定は動詞の前に「not esp」を足します。詰り先ほどの「50」の後に「f7 d4」を付加へます。

私は書かない。

66 50 f7 d4 89 04 25 04 00 00 00 80

また、短縮形として「push ax; not esp」の代はりに「not ax」を使ふことで、「私はしない」と表現する事が出來ます。

66 f7 d0 89 04 25 04 00 00 00 80

數動詞ではない、動詞を使ふ場合は主語の後に動詞を直接續けます。動詞には例へば「C3」と云ふ「歸る」と云ふ動詞があります。

私は歸る。

66 50 C3

となります。また、「80」には「割り込む」と云ふ動詞としての意味もあるので

私は割り込む。

66 50 80

となります。紛らはしいので注意して下さい。
續いてもう少し複雜な文を書いてみませう。「私は貴方を待つ」です。
「待つ」の數動詞は「72」ですので「私は待つ」は「66 50 89 04 25 72 00 00 00 80」になるのは此處迄の流れからすぐに分ります。となると殘は「貴方を」の部分ですが、これは動詞、割込詞の後で目的語をpushします。詰り「push bx」「66 53」を最後に付けます。

私は貴方を待つ。

66 50 89 04 25 72 00 00 00 80 66 53

です。
今度は「私は貴方に送る」を書いてみませう。
「送る」の數動詞は「bb」です。「貴方に」の部分は、動詞、割込詞の後に間接目的語をpopします。と云ふ訣で最後に「pop bx」「66 5d」を付けます。直接目的語がある場合は、間接目的語の後に直接目的語をpushすればokです。

私は貴方に送る。

66 50 89 04 25 bb 00 00 00 80 66 5d

になります。
應用として、命令文を最後に擧げて今囘は〆たいと思ひます。取り上げるのは「割り込むな!」です。
まづ、「not bx」を最初に書く事で、「貴方はするな」と云ふ命令になります。で、この後に割り込むと云ふ動詞「80」を續ければ「割り込むな!」の完成です。
と云ふ訣で、ラーメン屋で割り込まれた時は

66 f7 d3 80

と聲高に叫びませう。