简单的引导扇区编码:用0填充512字节
simple boot sector coding: Filling the 512 Byte with 0
我使用 Bochs 模拟器 运行 一个引导扇区,它在 NASM 中编码如下:
org 07c00h ;told the compiler to load the code to 0x7c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ;call the string process
jmp $ ;infinite loop
DispStr:
mov ax, BootMessage
mov bp, ax ;ES:BP = string address
mov cx, 16 ;CX = length of the string
mov ax, 01301h ;AH = 13, AL = 01H
mov bx, 000ch ;(BH = 0)
mov dl, 0
int 10h ;10h interrupt
ret
BootMessage: db "Hello, OS world!" ;message printed
times 510-($-$$) db 0 ;fill the left of the 510 byte with 0
dw 0xaa55
如果times 510-($-$$) db 0
如果被禁止,有没有其他方法可以用0填充510字节区域的左边?
我试过循环命令,但无法正常工作。
另一种方法是使用预处理器循环 (%rep
):
%rep 510-($-$$)
db 0
%endrep
如果您的助教仍然不满意,我会留给您去挖掘 NASM 手册以寻找实现相同目标的其他可能方法。
我使用 Bochs 模拟器 运行 一个引导扇区,它在 NASM 中编码如下:
org 07c00h ;told the compiler to load the code to 0x7c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ;call the string process
jmp $ ;infinite loop
DispStr:
mov ax, BootMessage
mov bp, ax ;ES:BP = string address
mov cx, 16 ;CX = length of the string
mov ax, 01301h ;AH = 13, AL = 01H
mov bx, 000ch ;(BH = 0)
mov dl, 0
int 10h ;10h interrupt
ret
BootMessage: db "Hello, OS world!" ;message printed
times 510-($-$$) db 0 ;fill the left of the 510 byte with 0
dw 0xaa55
如果times 510-($-$$) db 0
如果被禁止,有没有其他方法可以用0填充510字节区域的左边?
我试过循环命令,但无法正常工作。
另一种方法是使用预处理器循环 (%rep
):
%rep 510-($-$$)
db 0
%endrep
如果您的助教仍然不满意,我会留给您去挖掘 NASM 手册以寻找实现相同目标的其他可能方法。