teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

返答->回答

2018/02/19 08:57

投稿

asm
asm

スコア15149

answer CHANGED
@@ -19,7 +19,7 @@
19
19
  どうしても任意の機械語が必要ならばCをコンパイラに食わせ、手を加える事を考えます。
20
20
 
21
21
  --
22
- ###### **追記**:2018/02/19 08:32への
22
+ ###### **追記**:2018/02/19 08:32への
23
23
  > CPUの構造をレジスタや細かいレベル(演算回路にデータをおくるレジスタなど、文字を表示するためのデータを送るレジスタなど)
24
24
 
25
25
  普通のwindows等が動いてるCPUをx86互換CPUといいます。

2

追記への返答

2018/02/19 08:57

投稿

asm
asm

スコア15149

answer CHANGED
@@ -16,4 +16,30 @@
16
16
 
17
17
  書かないのか?と聞かれると面倒だからやりません。
18
18
  どうしても特殊な命令の利用が必要ならばintrinsicを
19
- どうしても任意の機械語が必要ならばCをコンパイラに食わせ、手を加える事を考えます。
19
+ どうしても任意の機械語が必要ならばCをコンパイラに食わせ、手を加える事を考えます。
20
+
21
+ --
22
+ ###### **追記**:2018/02/19 08:32への返答
23
+ > CPUの構造をレジスタや細かいレベル(演算回路にデータをおくるレジスタなど、文字を表示するためのデータを送るレジスタなど)
24
+
25
+ 普通のwindows等が動いてるCPUをx86互換CPUといいます。
26
+ intelが30年前に発売した「intel 80386」というCPUが語源です。
27
+ 当然今の「Core iシリーズ」と中身はまるで別ものです。
28
+ ですが、16bitモードの機械語には互換性があります。
29
+ また、Core iのうちでもCoffee Lakeとsandy bridgeは違いますし、Core iとPentium4でも結構違いますが
30
+ 機械語はほぼ一緒で、かなり高い互換性があります。
31
+ 更にはAMDが出してる互換CPUなんかも、中身はやっぱり別物です。
32
+
33
+ つまり、CPUやプログラムというのは入力に対する出力さえ規定しておけば中身を必ずとも知る必要はないという事です。
34
+
35
+ ちなみに[intelのマニュアル](https://software.intel.com/en-us/articles/intel-sdm)です。
36
+ 私も全文(4670頁)は読めないので、不明な命令等を検索して使っています。
37
+
38
+ > ファイルを開くアセンブリ言語プログラム
39
+
40
+ int 21hはwikipediaで調べると[MS-DOS API](https://en.wikipedia.org/wiki/MS-DOS_API#DOS_INT_21h_services)へリダイレクトされることから分かる通り**OSのAPI**であり
41
+ win32apiと大きく変わるものじゃないです。
42
+ 当時のcpuの事情から割り込みを使い、レジスタによる受け渡しだっただけです。
43
+ 今では過去のもので、64bit Windowsでは呼び出す事もできません。
44
+
45
+ int 13hというBIOSが提供するAPIもありますが、(端的に言えば)OSによって呼び出しが禁止されます。

1

typo

2018/02/19 08:25

投稿

asm
asm

スコア15149

answer CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  > そしてどちらにしてもなぜアセンブリ言語を使っているのか教えていただけると勉強になります。
12
12
 
13
- 機械語の読み書きが難しいのでアセンブリ言語を用います
13
+ 機械語の読み書きが人間には難しいのでアセンブリ言語を用います
14
14
  コンパイラの出力は(一部例外を除き)機械語です。実行中のコードもまた機械語になります。
15
15
  デバッガを用いてソースのない部分の処理などの機械語を理解したいときにアセンブリ言語を用いています。
16
16