回答編集履歴

2

ちょい修正

2018/03/09 04:13

投稿

asm
asm

スコア15147

test CHANGED
@@ -52,11 +52,15 @@
52
52
 
53
53
  内部にあるフォントデータ(原始的にはビットマップの配列)
54
54
 
55
- font[4D] = Mと書いてある画像
55
+ font[0x4D] = Mと書いてある画像
56
56
 
57
- font[30] = 0と書いてある画像
57
+ font[0x30] = 0と書いてある画像
58
58
 
59
59
  を取り出し合成した後にビデオデバイスに渡して画面に表示させます。
60
+
61
+
62
+
63
+ ちなみに数値を渡すってこんな感じでしょうか?
60
64
 
61
65
 
62
66
 
@@ -70,7 +74,7 @@
70
74
 
71
75
  int32_t m0 = 0x0000304D;
72
76
 
73
- puts(&m0);
77
+ puts(&m0); // => M0
74
78
 
75
79
  return EXIT_SUCCESS;
76
80
 

1

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

2018/03/09 04:13

投稿

asm
asm

スコア15147

test CHANGED
@@ -13,3 +13,67 @@
13
13
  OSはメモリ上にCPUを使って送られてきた文字列のポインタを元に絵を書いて
14
14
 
15
15
  出来上がった絵をGPUに渡しているのです。
16
+
17
+
18
+
19
+ ---
20
+
21
+
22
+
23
+ 段々、あなたの抱いている誤解が理解できてきました。
24
+
25
+
26
+
27
+ まずCPUの世界に文字列なんてものはありません。
28
+
29
+ CPUができるのは数値計算をして結果をどこか外部に伝えるだけです。
30
+
31
+ (そして外部に伝えるのはOSの仕事になりユーザーがどうこうできるものではないので割愛)
32
+
33
+
34
+
35
+ #### puts("M0"); を考えます。
36
+
37
+
38
+
39
+ M = 0x4D
40
+
41
+ 0 = 0x30
42
+
43
+ 文字列終端 = 0x00
44
+
45
+ と事前に決めておきます。
46
+
47
+ "M0"は4D 30 00 という3byteへのポインタになります。
48
+
49
+
50
+
51
+ puts("M0")からポインタを受け取ったOSは頭から1byteずつ取り出して
52
+
53
+ 内部にあるフォントデータ(原始的にはビットマップの配列)
54
+
55
+ font[4D] = Mと書いてある画像
56
+
57
+ font[30] = 0と書いてある画像
58
+
59
+ を取り出し合成した後にビデオデバイスに渡して画面に表示させます。
60
+
61
+
62
+
63
+ ```c
64
+
65
+ #include <stdio.h>
66
+
67
+ int main(void)
68
+
69
+ {
70
+
71
+ int32_t m0 = 0x0000304D;
72
+
73
+ puts(&m0);
74
+
75
+ return EXIT_SUCCESS;
76
+
77
+ }
78
+
79
+ ```