【发布时间】:2013-04-13 22:53:15
【问题描述】:
我目前正在从头开始构建一个简单的操作系统,因此我正在测试一些引导扇区代码并使用 Qemu 对其进行模拟。
我的引导扇区代码应该在操作系统启动时打印“A”。
这是第一个版本的引导扇区代码(没有使用函数调用)
[org 0x7c00]
mov al,'A'
mov ah,0x0e ; int 10/ ah = 0eh -> scrolling teletype BIOS routine
int 0x10
jmp $
times 510 -( $ - $$ ) db 0
dw 0xaa55
在执行 nasm 生成的二进制文件后:
qemu-system-i386 test.bin
结果是正确的,字符'A'出现在它应该出现的地方
但是,在尝试使用打印存储在 al 中的字符的函数后,屏幕上什么也没有打印
这里是第二版的test.asm文件(包括这次的函数调用)
[org 0x7c00]
mov al,'A'
call my_print_function
jmp $
times 510 -( $ - $$ ) db 0
dw 0xaa55
my_print_function:
pusha ; push all registers
; same code as the first version to print a character stored in al
mov ah,0x0e
int 0x10
popa ; pop all registers
ret
那么为什么它不能正常工作呢?
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
你把你的函数放在你的程序结束之后! (BIOS 将加载的 512 字节)。将它移到
times行之前...
标签: function assembly x86 nasm bios