現代の量子力学

主に精進の様子を記録する日記帳です

1日目 PCの仕組みからアセンブラ入門

1日目です。メモ書き程度のものです。

1. とりあえずやってみる
バイナリエディタというものがあるらしい。
Emacs でもバイナリの編集ができる。https://ayatakesi.github.io/emacs/24.5/Editing-Binary-Files.html

2. 結局何したの?
PCの中心はCPUで、CPUは電気信号を他の回路とやり取りするだけのもの。電気信号は0か1。
バイナリエディタは2進数編集機で、これがあれば全てのファイルが書ける!(紙と鉛筆があれば、全ての文章や絵が書ける!と同じ)

3. アセンブラ初体験
アセンブリ言語とは?

アセンブリ言語アセンブリげんご、英: assembly language)とは、コンピュータなどのプログラミング言語の1種で、原則として機械語の命令命令に1対1で対応した、人間に理解しやすい文字列や記号で記述される。いわゆる高水準言語に対して低水準言語と分類される[1]。

アセンブリ言語機械語だった。勘違いしてた。
アセンブリ言語機械語に翻訳(アセンブル)するものがアセンブラ。代表的なものにNASM(なすむ)
本書では筆者の作ったNASKというアセンブラを使用。(手元の環境では、使えないんですけど…)

・NASKが使えない
https://qiita.com/noanoa07/items/8828c37c2e286522c7ee
NASMを使います。

アセンブリ言語の命令がいくつか登場
DB:data byte の略。ファイルの内容を1 バイトだけ書く命令。
RESB:reverse byte の略。RESB 10 で10 バイト分0x00 で埋めるという命令。
NASMでは、RESB 10 → TIMES 10 DB 0
RESB 0x7dfe-$→TIMES 0x1fe-($-$$) DB 0

4. もうちょっと書き直してみる
DW:data word の略。2バイト書く。
DD:data double-word の略。4バイト書く。

用語
ブートセクタ
フロッピーディスクの最初のセクタのこと。1セクタは512バイト。フロッピーディスクは1セクタずつしか読み書きできない。
フロッピーディスクの容量は1440 KBで2880 セクタ。
PCは最初のセクタを読み、その最後の2 バイトを読む。そこが"55 AA"であればブート開始する。
 IPL
Initial Program Loaderの略。ブートセクタをIPLと呼ぶことがある。というのも、ブートセクタにはOS本体を読み込むためのプログラムが書かれているため。

f:id:bbplus:20200806233201p:plain

hello, work!!!!!!!

(2020 8/8 追記)Virtual Boxで起動
https://qiita.com/pollenjp/items/a13cd764cc739a0ca9dfを参考にした。
USBでブートもやりたい。そのうち