Как правильно компилировать под дос чтобы размер .com был минимально возможным. Код (C): #include <stdio.h> int main() { int a = 9, b = 23; _asm{ mov cx,a mov ax,b lab: add ax,23 loop lab mov b,ax mov ah,10h int 16h }; printf("%d", b); return 0; } Компилю этот код вот так:wcc -d0 -ms t.c wlink system com file t.obj. Возможно ли, не отключая стандартную либу, сделать исполняемый файл хотя бы до 1кб? Ибо то же самое, написанное на асме без принтф(на интах) занимает до полсотни байт.Что я делаю не так?
наверное, вместо printf нужно использовать int 21h или int 10h вместо ассемблерной вставки написать СОМ целиком на Watcom Попробуй просто создать Код (C): #include <stdio.h> int main() { return 0; } и посмотреть на размер
Спасибо за ответ, разобрался с вашим примером, как оказалось в ваткоме 1.9 нет ключа -mt(model tiny), есть -ms(model small) и выше. Т.е. единственный способ уменьшить *.com - реализовывать нужные библиотечные ф-ции на ассемблере(прерывания дос\биос)?
nullbackup, я конечно понимаю, что DOS и COM имеют учебный характер, но, по-моему, пора писать программы под 64-разрядные системы, а небольшой размер (< 1 К) можно и с ними добиться (смотри WASM.ARTICLES → "Сказки дядюшки Римуса")
Не на правда, зачем так извращаться? Ком, Дос, Инт. В Ком только машинный код. >>реализовывать нужные библиотечные ф-ции на ассемблере(прерывания дос\биос)? - Да Вы используете Си с вкраплениями библиотечных фунций. Разве можно получить Ком файл рабочий?
Не знаю как с другими компиляторами но на ваткоме можно и оно даже работает. Попробуйте скомпилировать вышеуказанный код: wcc -d0 -ms t.c wlink system com file t.obj. В досбоксе работает без проблем.
Как выяснилось так и должно быть. Если брать по аналогии с паскалем, то "Turbo Pascal 4.0, 1987 год. Компиляция осуществлялась в EXE-файл, а не как ранее, в COM"- взято из вики. А это про microsoft quick c "Версия 2.50, выпущенная в мае 1990 года, включала поддержку модели памяти tiny для написания небольших COM-программ". История...