我不是一个记笔记的人,从小到大都不是,所以这个强行不算笔记:)
《30天自制操作系统》这本书很有名,无奈一直没有机缘看,现在虽然看了,但是我读书慢(不是读书的速度慢,而是时间慢。因为我书读的杂,可能翻上个一章就撂在那里了,一停就是数年)。
01呢,主要内容就是开机可以显示出一个hello word,这个要比一般语言的复杂点,直接上汇编,ubuntu上的nasm挺好用的:
org 0x7c00
jmp entry
db 0x00
db "helloOSX"
dw 512
db 1
dw 1
db 2
dw 224
dw 2880
db 0xf0
dw 9
dw 18
dw 2
dd 0
dd 2880
db 0,0,0x29
dd 0xffffffff
db "myosudisk "
db "fat12 "
resb 18
entry:
mov ax,0x0
mov ss,ax
mov sp,0x7c00
mov ds,ax
mov es,ax
mov ah,0xe
mov bx,0xf
mov si,msg
typeonechar:
mov al,[si]
add si,1
cmp al,0
je fin
int 0x10
jmp typeonechar
fin:
hlt
jmp fin
msg:
db 0x0a
db "hello crazy"
db 0x0a
db 0x00
times 510-($-$$) db 0x00
db 0x55,0xaa
值得注意的是,一般网上搜到的笔记,在entry这里它们都是直接用db打的机器码,最开头并没有org这句。
因为我没打org这句,所以出来一直是个大S,开始百思不得解。机器码也不懂,我就用网上的变成boot.img后反汇编,结果发现entry是一样的,只不过je,变成了jz。
所以说地址很重要,所以说段寄存器初始化很重要。
ps. qemu真的好用。
网友评论