現代の量子力学

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

2日目 アセンブラ学習とMakefile入門

1. テキストエディタ
TeraPad、というものがオススメされている。まあ、Emacs を使う。

2. 開発再開
新しく出てきたアセンブリ言語の関数
ORG:実行時にPCのメモリのどこに読み込まれることになるかを教えるための命令。
JMP:goto文と一緒。
MOV:MOV AX, 0 でAXに0を代入せよという命令。AX=0

・いろんなレジスタ
16ビットレジスタ
AX, CX, DX, BX, SP, BP, SI, DI

MOV AL, [SI] ?メモリはで囲もう。
MOV命令では、転送先転送元にメモリを指定することができる。その時にはを使う。
MOV BYTE [678], 123 で、メモリの678番地に123を(8ビットの値として)格納するという命令になる。
BYTE [] のようにビット数を指定してあげないとダメだけど、MOV命令ではビット数が同じもの同士でしか代入できないので省略して良い。

ADD:足し算命令。ADD SI,1 でSI += 1
CMP:比較命令。if文。
JE:条件ジャンプ命令。比較命令の後において、その結果に応じてジャンプ命令を出す。
CMP AL, 0
JE fin で、if(AL == 0) { goto fin; }

BIOSとINT命令
BIOS(Basic Inout Output System)。PCでよく使うプログラムをメーカーはじめからROMに書き込んでおいてくれたもの。
INT命令は、BIOS関数を呼び出すための命令。INT 0x10 でBIOSの16番目の命令を呼び出す。

ORG 0x7c00
はじめにメモリを指定するが、使っていい場所が決まっている。BIOSやらなんやらがデフォルトで置かれているので、決められた場所でプログラムを動かすようにする。昔の偉い人が0x7c00を指定するようにしたので、0x7c00。

3. ブートセクタを作るように整理
512バイトのブートセクタのみ作って、ディスクイメージは他に任せる。
Mtoolsを入れた

ipl.nashoge.img を作って起動するときの流れ。

% nasm ipl.nas -o ipl.bin
% mformat -f 1440 -C -B ipl.bin -i hoge.img ::
% cp haribote.img ../../z_tools/qemu/fdimage0.bin
% make -r -C ../../z_tools/qemu

f:id:bbplus:20200806232735p:plain