Загрузочный сектор на MASM

Рейтинг: 0Ответов: 0Опубликовано: 11.06.2023
ORIGIN      EQU 7C00H       ; Origin of bootstrap LOADER
SECTOR_SIZE EQU 512     ; Sector size in bytes

CODE    SEGMENT
    ASSUME CS:CODE,DS:NOTHING,ES:NOTHING,SS:NOTHING
    ORG ORIGIN
    
    jmp MAIN
MAIN:

    cli             ;Stop interrupts till stack ok
    xor AX,AX
    mov SS,AX           ;Work in stack just below this routine

    ASSUME  SS:CODE
    mov SP,ORIGIN
    push    SS
    pop ES

    ASSUME  ES:CODE

    mov si, offset msg
    call print_string

    jmp $

; =========================================================================
; DATA SECTION

    msg db "Hello, world! I can boot!", 13, 10, 0

; =========================================================================
; SUBROUTINES SECTION

print_string:               ; Output string in SI to screen
    ;pusha

    mov ah, 0Eh         ; int 10h teletype function

label1:
    lodsb               ; Get char from string
    cmp al, 0
    je done         ; If char is zero, end of string
    int 10h             ; Otherwise, print it
    jmp short label1

done:
    ;popa
    ret
; =========================================================================

Free    EQU (SECTOR_SIZE - 4) - ($-MAIN)

if Free LT 0
    %out FATAL PROBLEM:boot sector is too large
    ;.ERR
endif

    org origin + (SECTOR_SIZE - 2)
    db  55h,0aah            ; Boot sector signature

; =========================================================================

CODE    ENDS
    END MAIN

Для тестирования написал небольшой загрузочный сектор на masm, просто выводит строку на экран.

Компилируется без проблем такими командами MASM 6.11 с командной строки:

ml.exe msboot.asm /Fl /link

exe2bin.exe msboot.exe

В результате получаю exe файл заполненный нулями после компиляции и линковки. В чем может быть дело? Пробовал компилировать под DosBox та же проблема.

Ответы

Ответов пока нет.