「機械語」の版間の差分

削除された内容 追加された内容
編集の要約なし
6 行
注釈: 以下の内容はFedora 31に基づく。
 
<syntaxhighlight lang="asm" inline>push %rbp</syntaxhighlight>は{{code|55}}<ref name="hex">16進数。オクテットごとに半角に区切られている場合は、出現した順序をそのまま適用する。</ref>である。50番を基準にする50?60番台のオペコードはpushが使用している領域である<ref name="ia32b">[https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2B_i.pdf IA-32インテル®Rアーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル』『中巻B:命令セット・リファレンスN-Z』</ref>。
 
<syntaxhighlight lang="asm" inline>call</syntaxhighlight>は{{code|e8}}<ref name="hex" />である<ref name="ia32a">[https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2A_i.pdf 『IA-32インテル®Rアーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル』 『中巻A:命令セット・リファレンスA-M』]</ref>。
 
{{code|e8}}の直後に{{code|cw}}と呼ばれる2バイトの命令が続くため、インテル公式マニュアル<ref name="ia32a">[https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2A_i.pdf 『IA-32インテルRアーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル』 『中巻A:命令セット・リファレンスA-M』]</ref>では{{code|e8 cw}}と書かれる。
 
<syntaxhighlight lang="asm" inline>movq %rsp, %rbp</syntaxhighlight>は{{code|48 89 E5}}<ref name="hex" />である。{{code|movq}}は32ビット同士のデータを転送する際に使用される<ref name="ia32a" />。ここで、{{code|push}}、{{code|call}}、{{code|movq}}はアセンブラである。
147 行
<pre>
C:\Users\ユーザー名\nnnn>test.o
Hello World!aaaa��aaaa??@
</pre>
のように、文字化けがあるが、いちおう Hello Worldが表示できる。
186 行
 
Linux(fedora31で確認ずみ)の場合でのコード例を示す
<sourcesyntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h>
215 行
return 0;
}
</syntaxhighlight>
</source>
 
たとえば、入力された文字に「sssss」と入れたとしよう。
249 行
 
;コード例
<sourcesyntaxhighlight lang=c>
#include <stdio.h>
 
266 行
return 0;
}
</syntaxhighlight>
</source>
:(※ Windows7上でのgcc(MIn-GW)で動作確認.)
 
284 行
 
:コード例
<sourcesyntaxhighlight lang=c>
#include <stdio.h>
 
301 行
return 0;
}
</syntaxhighlight>
</source>
 
;実験結果
326 行
 
;コード例
<sourcesyntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h> // atoi
372 行
return 0;
}
</syntaxhighlight>
</source>
:(※ Windows7上でのgcc(MIn-GW)で動作確認.)
 
403 行
 
;コード例
<sourcesyntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h> // atoi
471 行
return 0;
}
</syntaxhighlight>
</source>
 
 
478 行
 
;EOFを用いたコード例
<sourcesyntaxhighlight lang=c>
#include <stdio.h>
#include <stdlib.h> // atoi
546 行
return 0;
}
</syntaxhighlight>
</source>
 
実行結果は前述とほぼ同じなので、省略します。
552 行
上記コードの場合、EOFは <code>if (saigoKensa == EOF)</code> のように、if文の中で使われています。
 
== 脚注 ==
<references/>
{{stub}}