以下给出helloos.asm的例子
org 0x7c00 ; MBR 的加载地址
section .text
; 设置段寄存器
xor ax, ax ; 将 ax 寄存器清零
mov ds, ax ; 将 ds 寄存器设置为 0,这里 0 表示段基址为 0
; 设置视频模式和光标位置
mov ah, 0x00 ; 设置视频模式的功能号为 0,用于设置显示模式
mov al, 0x03 ; 设置显示模式为 80x25 的文本模式,每个字符占据 2 个字节
int 0x10 ; 调用 BIOS 中断 0x10,设置显示模式
; 设置光标位置
mov ah, 0x02 ; 设置光标位置的功能号为 2,用于设置光标位置
mov bh, 0x00 ; 页号为 0
mov dh, 0x0c ; 行号为 12
mov dl, 0x05 ; 列号为 5
int 0x10 ; 调用 BIOS 中断 0x10,设置光标位置
; 打印消息
mov si, msg ; 将消息的地址存入 si 寄存器
call print_string ; 调用打印字符串的函数
; 无限循环
cli ; 关中断
endloop:
hlt ; 暂停 CPU 执行,直到有中断发生
jmp endloop ; 无限循环
print_string:
; 打印字符串函数
mov ah, 0x0e ; 功能号为 0x0e 表示在 tty 上打印字符
.loop:
lodsb ; 从 si 指向的地址读取一个字节到 al 寄存器,并将 si 加 1
cmp al, 0 ; 检查是否到字符串结尾
je .done ; 如果到了字符串结尾则结束
int 0x10 ; 调用 BIOS 中断 0x10,在 tty 上打印字符
jmp .loop ; 继续打印下一个字符
.done:
ret ; 返回调用处
section .data
msg db 'Hello, World!', 0 ; 要打印的字符串,以 0 结尾
使用nasm编译(nasm -f bin -o helloos.img helloos.asm)
将img文件通过软盘挂载到虚拟机上。
可以运行