На чём написаны .COM проги

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Ponchik, 17 Aug 2009.

  1. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    Я вот и гуглил и спрашивал в оцеке, никто незнает, кабута .COM вобще не существует =\
    Мне Hello world написать надо :rolleyes:
    сабж, на чём?
    ====
    Вот блин будиш будиш всех, спят! А как токо создаёш тему прибегают поржать =\
    Мне уже визард спалил тему, не зажал :D
    ====
    Нифига он не смог написать, я тож ничерта неумею, проснусь вечером 10 рублёв дам тому кто мне hello world напишет, но тама с 1 условием, вечером уже отпишу :)
     
    #1 Ponchik, 17 Aug 2009
    Last edited: 17 Aug 2009
    1 person likes this.
  2. plas

    plas Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    83
    Likes Received:
    11
    Reputations:
    -2
    на любом языке на котором можно создать прогу для dos'a
     
  3. SmanxX1

    SmanxX1 Elder - Старейшина

    Joined:
    4 Aug 2008
    Messages:
    27
    Likes Received:
    6
    Reputations:
    2
    Code:
    org 100h
    
    mov ah, 9
    mov dx, msg
    int 21h
    ret
    
    msg db "Hello, World!",0dh,0ah,'$'
    FASM
     
  4. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    TASM

    Рассмотрим пример программы типа com.

    Пример:
    Code:
    ; hello.asm 
    ; Программа выводит на экран сообщение "Hello World" 
    .model tiny ; Модель памяти, используемая для СОМ.
    .code ; Начало сегмента кода.
    org 100h ; Начальное значение счетчика - 100h.
    start:
    mov ah, 9 ; Номер функции DOS - в АН.
    mov dx,offset message ; Адрес строки - в DX.
    int 21h ; Вызов системной функции DOS.
    ret ; Завершение СОМ-програнмы.
    message db "Hello World",ODh,0Ah,'$'; Строка для вывода.
    end start ; Конец программы.
    
    Для превращения программы в исполняемый файл сначала надо вызвать ассемблер, чтобы скомпилировать ее в объектный файл с именем hello.obj, набрав в командной строке следующую команду:

    tasm hello.asm

    Затем с помощью компоновщика превратить объектный файл в исполняемый:

    tlink /t /x hello.obj

    В результате появился исполняемый com-файл. Если его выполнить, на экране появится строка Hello World.

    Первая строка определяет модель памяти TINY, в которой сегменты кода, данных и стека объединены. Эта модель предназначена для создания файлов типа com.

    Директива .CODE начинает сегмент кода, который в нашем случае также должен содержать и данные.

    ORG 100h устанавливает значение программного счетчика в 100h, потому что при загрузке com-файла в память DOS занимает первые 256 байт (100h) блоком данных PSP и располагает код программы только после этого блока. Все программы, которые компилируются в файлы типа com, должны начинаться с этой директивы.

    Метка START располагается перед первой командой в программе и будет использоваться в директиве END, чтобы указать, с какой команды начинается программа.

    Команда MOV АН,9 помещает число 9 в регистр АН - номер функции DOS "вывод строки".

    Команда MOV DX,OFFSET MESSAGE помещает в регистр DX смещение метки MESSAGE относительно начала сегмента данных, который совпадает с сегментом кода.

    Команда INT 21h вызывает системную функцию DOS. Эта команда - основное средство взаимодействия программ с операционной системой. В нашем примере вызывается функция DOS номер 9 - вывести строку на экран. Эта функция выводит строку от начала, адрес которого задается в регистрах DS:DX, до первого встреченного символа $. При запуске com-файла регистр DS автоматически загружается сегментным адресом программы, а регистр DX был подготовлен предыдущей командой.

    Команда RET используется обычно для возвращения из процедуры. DOS вызывает com-программы так, что команда RET корректно завершает программу.

    DOS при вызове com-файла помещает в стек сегментный адрес программы НОЛЬ, так что RET передает управление на нулевой адрес текущего сегмента, то есть на первый байт PSP (префикс программного сегмента, с ним мы познакомимся немного позднее). Там находится код команды INT20h, которая и используется для возвращения управления в DOS. Можно сразу заканчивать программу командой INT20h.

    Следующая строка программы HELLO.ASM определяет строку данных, содержащую текст Hello World, управляющий символ ASCII возврат каретки с кодом 0Dh, управляющий символ ASCII перевод строки с кодом 0Ah и символ $, завершающий строку.

    Директива END завершает программу, одновременно указывая, с какой метки должно начинаться ее выполнение.

    После загрузки двоичного образа COM-программы:
    • CS, DS, ES и SS указывают на PSP;
    • SP указывает на конец сегмента PSP (обычно 0FFFEH, но может быть и меньше, если полный 64K сегмент недоступен);
    • слово по смещению 06H в PSP (доступные байты в программном сегменте) указывает, какая часть программного сегмента доступна;
    • вся память системы за программным сегментом распределена программе;
    • слово 00H помещено (PUSH) в стек;
    • IP содержит 100H (первый байт модуля) в результате команды JMP PSP:100H.

    З.Ы: Медведев В.А. © 2005 г. OSU
     
    _________________________
    2 people like this.
  5. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    fasm, tasm...

    В WinXP открываешь консоль и делаешь примерно так:
    [​IMG]
     
    _________________________
    2 people like this.
  6. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    лол
    >>Нифига он не смог написать
    ты словами аккуратнее кидайся, я тебе написал.
     
  7. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    виз, хелло ворлд 3КБ это не серьёзно =\
    Насчёт проги щас по личкам побегаю
    ===
    Всё, не актуально :)
     
    #7 Ponchik, 17 Aug 2009
    Last edited: 17 Aug 2009
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    Ponchik заврался
    не больше 21 байта было
     
Loading...
Similar Threads - написаны проги
  1. Peja
    Replies:
    0
    Views:
    2,524