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

回答編集履歴

2

ちょい修正

2018/03/09 04:13

投稿

asm
asm

スコア15149

answer CHANGED
@@ -25,16 +25,18 @@
25
25
 
26
26
  puts("M0")からポインタを受け取ったOSは頭から1byteずつ取り出して
27
27
  内部にあるフォントデータ(原始的にはビットマップの配列)
28
- font[4D] = Mと書いてある画像
28
+ font[0x4D] = Mと書いてある画像
29
- font[30] = 0と書いてある画像
29
+ font[0x30] = 0と書いてある画像
30
30
  を取り出し合成した後にビデオデバイスに渡して画面に表示させます。
31
31
 
32
+ ちなみに数値を渡すってこんな感じでしょうか?
33
+
32
34
  ```c
33
35
  #include <stdio.h>
34
36
  int main(void)
35
37
  {
36
38
  int32_t m0 = 0x0000304D;
37
- puts(&m0);
39
+ puts(&m0); // => M0
38
40
  return EXIT_SUCCESS;
39
41
  }
40
42
  ```

1

段々、誤解が分かってきた

2018/03/09 04:13

投稿

asm
asm

スコア15149

answer CHANGED
@@ -5,4 +5,36 @@
5
5
 
6
6
 
7
7
  OSはメモリ上にCPUを使って送られてきた文字列のポインタを元に絵を書いて
8
- 出来上がった絵をGPUに渡しているのです。
8
+ 出来上がった絵をGPUに渡しているのです。
9
+
10
+ ---
11
+
12
+ 段々、あなたの抱いている誤解が理解できてきました。
13
+
14
+ まずCPUの世界に文字列なんてものはありません。
15
+ CPUができるのは数値計算をして結果をどこか外部に伝えるだけです。
16
+ (そして外部に伝えるのはOSの仕事になりユーザーがどうこうできるものではないので割愛)
17
+
18
+ #### puts("M0"); を考えます。
19
+
20
+ M = 0x4D
21
+ 0 = 0x30
22
+ 文字列終端 = 0x00
23
+ と事前に決めておきます。
24
+ "M0"は4D 30 00 という3byteへのポインタになります。
25
+
26
+ puts("M0")からポインタを受け取ったOSは頭から1byteずつ取り出して
27
+ 内部にあるフォントデータ(原始的にはビットマップの配列)
28
+ font[4D] = Mと書いてある画像
29
+ font[30] = 0と書いてある画像
30
+ を取り出し合成した後にビデオデバイスに渡して画面に表示させます。
31
+
32
+ ```c
33
+ #include <stdio.h>
34
+ int main(void)
35
+ {
36
+ int32_t m0 = 0x0000304D;
37
+ puts(&m0);
38
+ return EXIT_SUCCESS;
39
+ }
40
+ ```