Assembly 程序集x86:仅处理一个ASM文件

Assembly 程序集x86:仅处理一个ASM文件,assembly,x86,Assembly,X86,如何在一个.ASM文件中创建所有操作系统?我检查了MikeOS,它可以处理多个文件(如string.asm,screen.asm等)。启动签名后如何工作和编写代码?在MikeOS中,我知道它将kernel.asm文件加载到内存中。为什么会载入内存?为什么它不能在一个文件中工作 示例代码: bits 16 org 7c00h mov si, bootmsg call ps call hidecursor jmp $ bs: pusha mov al, 8 ;BACKSPAC

如何在一个
.ASM
文件中创建所有操作系统?我检查了MikeOS,它可以处理多个文件(如
string.asm
screen.asm
等)。启动签名后如何工作和编写代码?在MikeOS中,我知道它将
kernel.asm
文件加载到内存中。为什么会载入内存?为什么它不能在一个文件中工作

示例代码:

bits 16

org 7c00h

mov si, bootmsg
call ps
call hidecursor

jmp $

bs:
    pusha
    mov al, 8 ;BACKSPACE
    mov ah, 0eh
    int 10h
    mov al, 32 ;SPACE
    mov ah, 0eh
    int 10h
    mov al, 8 ;BACKSPACE
    mov ah, 0eh
    int 10h
    popa
    ret

nl:
    pusha
    mov al, 13
    mov ah, 0eh
    int 10h
    mov al, 10
    mov ah, 0eh
    int 10h
    popa
    ret

ps:
    pusha
    .test:
    lodsb
    cmp al, 0h
    je .eof
    mov ah, 0eh
    int 10h
    jmp .test
    .eof:
    popa
    ret

hidecursor:
    pusha
    mov ah, 1
    mov cx, 2607h
    int 10h
    popa
    ret


showcursor:
    pusha
    mov ah, 1
    mov cx, 0607h
    int 10h
    popa
    ret

bootmsg db 'Hi', 0

times 510 - ($ - $$) db 0
dw 0xaa55

它也在一个文件中工作。它的可读性和可维护性。你用什么语言编程了吗?您需要加载东西,因为BIOS只加载前512个字节。不过,您仍然可以将所有内容都放在一个源文件中,这是不推荐的。如何创建第二个扇区并继续编码?是的,您可以继续。您仍然需要在运行时自己加载它。我创建了
shutdown
标签,并尝试
jmp shutdown
。我不知道它是否跳转,但它没有执行命令(它没有关闭)。此答案中的代码提供了一个基本引导加载程序,它从磁盘上引导加载程序之后的扇区开始加载第二个阶段,并在BIOS加载的第一个512字节后立即将其读入内存:。这个答案还生成了一个1.44 MiB磁盘映像,可以作为软盘在模拟器上使用,也可以作为软盘在使用软盘驱动器仿真引导的USB驱动器上使用。