【OS】01&02 – Hello,DTOD!

【OS】01 :进阶操作系统

【OS】02 – Hello,DTOD!

boot.asm

org 0x7c00     ;指明入口

start:         ;标签代表下面第一条指令的地址
    mov ax, cs ;获取当前代码执行的段地址。
    mov ss, ax ;设置堆栈段地址与当前代码段地址相同。
    mov ds, ax ;设置数据段地址与当前代码段地址相同,从而能够访问数据。
    mov es, ax ;设置附加段地址与当前代码段地址相同,用于特定的数据访问。

    mov si, msg;把msg代表的地址放到si寄存器中

print:
    mov al, [si] ;取地址中的数据,[]类似于C语言中的*,此时al所保存的是si所指向的第一个字节的数据
    add si, 1    ;si所保存的地址值+1
    cmp al, 0x00 ;判断al是否到达了末尾
    je last      ;如果cmp al, 0x00的两个结果相等,这里就跳转last标签处
    mov ah, 0x0e ;是为了设置中断调用的功能号,这里0x0e代表的是在文本模式下输出字符的功能
    mov bx, 0x0f ;用于设置某些操作的参数或状态
    int 0x10     ;触发中断,结果是在屏幕上打印一个字符
    jmp print    ;类似于C中while循环

last:
    hlt        ;跳转到这里 数据打印结束了,让cpu停止
    jmp last   ;无条件跳转(死循环)

msg:  ;定义输出数据
    db 0x0a, 0x0a             ; db => define byte, db的定义了两个数据,0a换行符
    db "Hello, DTOS!"     
    db 0x0a, 0x0a
    times 510-($-$$) db 0x00  ;不满512字节,补0 $:这里这一行的地址; $$:代表这一段汇编的起始地址;   db 0x00判断是否到达数据的末尾
    db 0x55, 0xaa             ;主引导区MBR,最后占用两个字节,所以上一句用510来减

file

项目代码已经同步: https://gitee.com/awmking/magic_os

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇