Как делать вставки на СИ в код на ассеблере?
Например я хочу написать загрузчик. Я пока плохо понимаю ассемблер и возможно не правильно напишу, но хочется что-то типа такого.
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 ;Загрузочная сигнатура
Но суть не в этом. А в том как сделать чтобы компилятор заменил СИ код на ассемблер и скомпилировал вместе с остальным ассемблерным кодом в бинарный файл?