#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
Комментариев нет:
Отправить комментарий