32-х битный компилятор C

No comments
  • Ладно что хотябы такой компилятор есть.
    O01eg,проверь возможность создания больших массивов типа flot array[200][200] (можно больщего размера).А то кто занает - может там тот же сюрпириз,что и в XScompiler.То,что под этот компилятор нет библиотеки stdlib.h - это не страшно.Можно взять реализацию malloc от Халявина Андрея(halyvin)(при помощи 64 функции).
    А менять путь /rd/1/ на /hd/1/ можно.Для этого нужно в CCOMP.ASM сделать так:
    inp_path: times 100 db '/hd/1/',0

    Компилятор читает файлы через 58-ю функцию,а она не привязана к конкретному типу диска.
    O01eg,попробуй вместо #include "file.h" писать include "file.h" иразмещать file.h в той же папке,где и запущенный SmallC
    Даже если не сработает,то можно покопаться в исходниках и изменить тот участок кода,который ответственнен за include(автор всёравно не узнает да и не до этого ему наверно).Ради дела можно пойти на маленькие эксперименты.
    Если заставить работать include и написать стандартные библиотеки: stdio.h,stdlib.h.string.h и т.д.,то можно им попробовать tcc скомпилировать.А потом процесс пойдет по экспоненте.
  • nn2,а тв где брал tccboot.h для компиляции ?
    Он ведь configure не создается.
  • 2 andrew_programmer: Массивы щас посмотрю, похоже каждый файл исходника надо компилировать отдельно, а потом уже в ассемблерном коде делать include
    Есть небольшой пример:

    Code: Select all

    #asm
    use32
    org 0x0
    
     db 'MENUET01'
     dd 0x01
     dd _main
     dd I_END
     dd 0x100000
     dd 0x7fff0
     dd 0x0,0x0
    
    include 'KOLIBRI.INC'
    
    #endasm
    
    void main()
    {
      k_delay(100);
      k_quit();
    }
    
    #asm
    I_END:
    #endasm
    и к нему KOLIBRI.INC, там все вызовы системных функций, я пока написал до пятой:

    Code: Select all

    _k_quit: ;-1 k_quit()
      mov eax,-1
      int 0x40
    
      ;0-4 skipped
    
    _k_delay: ;5 k_delay(time)
      mov ebx,[esp+8]
      mov eax,5
      int 0x40
  • Двухмерные массивы не созаются(ошибки), include тоже никак не работает. Похоже SmallC придётся дорабатывать, потому что если использовать структуры, то они понадобятся и в сисколах, и в программе.
    Как делать возврат значения функцией?
  • O01eg
    В си обычно это делается с помощью return. В ассемблере командой mov eax,<результат> в случае int'a.
  • Странно что обсуждение портрирования Си
    компилятора попало в оффтопик.
    В топике кодинга тоже были близкие темы?!

    Ассемблер хороший язык, если его приблизить
    по возможностям к высокоуровневым языкам!!!
  • 2 andrew_programmer:open error SmallC пишет, потому что пути не разбирает, перенеси свой файл на /RD/1 и всё заработает.
  • Who is online

    Users browsing this forum: No registered users and 4 guests