Как связать ассемблерный код вместе с C\С++ для запуска в DosBox с прерываниями?
asm(".code16gcc\n");
#define G640x350x64c 0x10
#define T80x25 0x3
#define R320x200x16c 0xD
void setVMode(int mode);
int _main() {
setVmode(G640x350x64c);
return 0;
}
void setVMode(int mode) {
asm("mov ah,0");
asm("mov al,byte ptr[ebp+0x8]");
asm("int 0x10");
}
Итак, этот код рабочий, и он меняет видеорежим в консоли. Запускается в досбоксе, предварительно скомпилированный таким образом:
gсс -O0 -c -masm=intel main.c -o main.o
ld main.o -o prog.com
objcopy prog.com -O binary
C:\Progra~1\DOSBox-0.74\DOSBox.exe
Т.е. создается бинарник, независимый от системы. И вот тут начинаются проблемы, если добавить какую-нибудь библиотечную функцию, ld автоматически не линкует библиотеки типа stdlib и прочих. Использование автоматической линковки с помощью gcc к успеху не приведет, нужен чистый бинарник, свободный от системной информации.
Источник: Stack Overflow на русском