メモ:「30日でできる!OS自作入門 」2日目
第2章 プログラム本体のアセンブリ
- レジスタの説明も命令の説明も雰囲気で理解した
entry:
MOV AX, 0
MOV SS, AX
MOV SP, 0x7c00
MOV DS, AX
MOV ES, AX
putloop:
MOV AL, [SI]
ADD SI, 1
CMP AL, 1
JE fin
MOV AH, 0x0e
MOV BX, 15
INT 0x10
JMP putloop
fin:
HLT
JMP fin
msg:
DB 0x0a, 0x0a
DB "hello, world"
DB 0x0a
DB 0
AX - Accumulator
CX - Counter
DX - Data
BX - Base
SP - Stack Pointer
BP - Base ...
SI - Source Index
DI - Dest Index
AL, AH, EAX の違いはなんとなく分かっていた。
ES - Extra Segment
CS - Code Segment
SS - Stack Segment
DS - Data Segment
FS - Extra2
GS - Extra3
BX, BP, SI, DI は Indexとして使える。なるほど
CMP, JE, INT は雰囲気で理解した
- community.osdev.info が動いていないことが今分かった(たまたま?)
0x7c00 を決めたのは IBM のおじさんw
lst ファイルは disassembly したものと似たようなもの
付いている Makefile は Windows 用なので、.exe を消したりして動くようにした。
edimg とかは挙動あまり分かっていない。(img 作ってくれるぐらい)
helloos3, helloos4, helloos5 問題なく動いた。
helloos5 の JMP entry を JMP msg にしても qemu 上は何も表示されなかった。
さて明日は 第3章の C のコンパイルできるかなぁ。。gcc / clang あたりでやりたいですが、この調子だと動かなさそう。。
Author And Source
この問題について(メモ:「30日でできる!OS自作入門 」2日目), 我々は、より多くの情報をここで見つけました https://qiita.com/S-YOU/items/e3ea8ca79660f3de7021著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .