Open Watcom размер .com

Тема в разделе "WASM.BEGINNERS", создана пользователем nullbackup, 21 июл 2017.

  1. nullbackup

    nullbackup New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2017
    Сообщения:
    4
    Как правильно компилировать под дос чтобы размер .com был минимально возможным.
    Код (C):
    1.  
    2. #include <stdio.h>
    3. int main()
    4. {
    5.         int a = 9, b = 23;
    6.                 _asm{                                  
    7.                         mov cx,a
    8.                 mov ax,b
    9.                 lab:
    10.                 add ax,23
    11.                 loop lab
    12.                 mov b,ax
    13.                
    14.             mov ah,10h
    15.                 int 16h
    16.                 };
    17.                 printf("%d", b);
    18. return 0;
    19. }
    20.  
    Компилю этот код вот так:wcc -d0 -ms t.c wlink system com file t.obj.
    Возможно ли, не отключая стандартную либу, сделать исполняемый файл хотя бы до 1кб? Ибо то же самое, написанное на асме без принтф(на интах) занимает до полсотни байт.Что я делаю не так?
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
    наверное,
    1. вместо printf нужно использовать int 21h или int 10h
    2. вместо ассемблерной вставки написать СОМ целиком на Watcom
    3. Попробуй просто создать
      Код (C):
      1. #include <stdio.h>
      2. int main()
      3. {      
      4.            return 0;
      5. }
      и посмотреть на размер
     

    Вложения:

    • wasm.zip
      Размер файла:
      414,7 КБ
      Просмотров:
      239
    nullbackup нравится это.
  3. nullbackup

    nullbackup New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2017
    Сообщения:
    4
    Спасибо за ответ, разобрался с вашим примером, как оказалось в ваткоме 1.9 нет ключа -mt(model tiny), есть -ms(model small) и выше. Т.е. единственный способ уменьшить *.com - реализовывать нужные библиотечные ф-ции на ассемблере(прерывания дос\биос)?
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
    nullbackup,
    я конечно понимаю, что DOS и COM имеют учебный характер, но, по-моему, пора писать программы под 64-разрядные системы, а небольшой размер (< 1 К) можно и с ними добиться (смотри WASM.ARTICLES "Сказки дядюшки Римуса") :)
     
    _edge и nullbackup нравится это.
  5. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Не на правда, зачем так извращаться? Ком, Дос, Инт. В Ком только машинный код.
    >>реализовывать нужные библиотечные ф-ции на ассемблере(прерывания дос\биос)? - Да
    Вы используете Си с вкраплениями библиотечных фунций. Разве можно получить Ком файл рабочий?:scratch_one-s_head:
     
  6. nullbackup

    nullbackup New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2017
    Сообщения:
    4
    Не знаю как с другими компиляторами но на ваткоме можно и оно даже работает. Попробуйте скомпилировать вышеуказанный код: wcc -d0 -ms t.c wlink system com file t.obj. В досбоксе работает без проблем.
     
  7. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Наверно, всё это потому что я не застал Ком файлов.
     
  8. nullbackup

    nullbackup New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2017
    Сообщения:
    4
    Как выяснилось так и должно быть. Если брать по аналогии с паскалем, то "Turbo Pascal 4.0, 1987 год. Компиляция осуществлялась в EXE-файл, а не как ранее, в COM"- взято из вики. А это про microsoft quick c "Версия 2.50, выпущенная в мае 1990 года, включала поддержку модели памяти tiny для написания небольших COM-программ". История...