Как создать файл .com DOS с OpenWatcom `owcc`, но без OpenWatcom lib c? - PullRequest
0 голосов
/ 20 июня 2020

Вот короткий C файл cu.c:

int main(int argc, char **argv) {
  (void)argc; (void)argv;
  return 0;
}

Когда я компилирую его с помощью OpenWatcom в файл DOS .com, результат составляет почти 3 КиБ:

$ owcc -bcom -mcmodel=t -fno-stack-check -Os -s -march=i86 -W -Wall -Wextra -o cu.com cu.c
$ ls -l cu.com
-rwxr-x--- 1 pts pts 2938 Jun 20 19:26 cu.com

Наименьший возможный файл .com DOS, который делает то же самое (просто завершается), имеет длину 1 байт: он содержит единственную инструкцию ret (байт 0xc3).

Как я могу скомпилировать мой cu.c файл (с возможными некоторыми изменениями, меня не интересуют arg c или argv) в меньший файл DOS .com без библиотеки OpenWatcom C (lib c), предпочтительно меньше 100 байт? Я буду вызывать функции DOS API (int 0x21) непосредственно из моей программы, поэтому мне не понадобятся функции библиотеки OpenWatcom C.

Обратите внимание, что COM-исполняемые файлы с Open Watcom не отвечает на мой вопрос, потому что все представленные там решения включают библиотеку OpenWatcom C.

1 Ответ

0 голосов
/ 21 июня 2020

Мне удалось решить эту проблему, используя format dos com вместо system com в моем пользовательском файле .lnk. Таким образом, libfile cstart_t.obj в system begin com в link.lnk не использовалось, поэтому не было ссылки на код запуска в библиотеке OpenWatcom C.

Полученный файл .com является только 3 байта (xor ax, eax; ret), что меня устраивает. Чтобы заставить его работать, мне нужно подготовить и добавить свой .obj файл, который содержит ..start: и настраивает сегменты.

Я все еще ищу решение, которое не требует кастомизации. lnk файл.

...