Как делать вставки на СИ в код на ассеблере?

Например я хочу написать загрузчик. Я пока плохо понимаю ассемблер и возможно не правильно напишу, но хочется что-то типа такого.

org 7C00h

void clear()
{
__asm("
;Очищаем экран
  mov ax, 3
  int 10h
");
}

void init()
{
__asm("
    cli              ;Запрещаем прерывания (чтобы ничего не отвлекало)
    xor ax, ax       ;Обнуляем регистр ax
    mov ds, ax       ;Настраиваем dataSegment на нулевой адрес
    mov es, ax       ;Настраиваем сегмент es на нулевой адрес
    mov ss, ax       ;Настраиваем StackSegment на нулевой адрес
    mov sp, 07C00h   ;Указываем на текущую вершину стека
    sti              ;Запрещаем прерывания
");
}

void write(char*message)
{
__asm("
  ;Печатаем строку
  mov ax, 1301h
  mov bp, message
  mov cx, 12
  mov bl, 02h
  int 10h
")
}

void main()
{
char*text[256]="";
char c=1;

init();
while(c)
{
message(text);
clear();
text[c]=c;
c++;
}
}

  mov ah, 2h
  mov dh, 0
  mov dl, 0
  xor bh, bh
  int 10h
call main

message db 'Hello World!',0

times 510 - ($ - $$) db 0 ;Заполнение оставшихся байт нулями до 510-го байта
db 0x55, 0xAA ;Загрузочная сигнатура 

Но суть не в этом. А в том как сделать чтобы компилятор заменил СИ код на ассемблер и скомпилировал вместе с остальным ассемблерным кодом в бинарный файл?


Ответы (0 шт):