Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Как связать ассемблерный код вместе с C\С++ для запуска в DosBox с прерываниями?

#c #компоновщик #cpp #ассемблер


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 к успеху
не приведет, нужен чистый бинарник, свободный от системной информации.    


Ответы

Ответ 1



Нужно либо писать сразу в интел асме этот код и обращаться к библиотекам там (наверняка у вас интел асм), либо использовать другой способ внедрения asm -- тот что используется в gcc без пропускания данных через masm

Комментариев нет:

Отправить комментарий