проблема с компиляцией

Тема в разделе "WASM.BEGINNERS", создана пользователем 10ton, 9 сен 2009.

  1. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    всем привет
    начал изучать ассемблер
    используя справочник Зубкова пробую откомпилировать программу
    Код (Text):
    1. ; hello-2.asm
    2. ; Выводит на экран сообщение "Hello World!" и завершается
    3.         .model     small             ; модель памяти, используемая для ЕХЕ
    4.         .stack     100h              ; сегмент стека размером в 256 байт
    5.         .code
    6. start:  mov        ax,DGROUP         ; сегментный адрес строки message
    7.         mov        ds,ax             ; помещается в DS
    8.         mov        dx,offset message
    9.         mov        ah,9
    10.         int        21h               ; функция DOS "вывод строки"
    11.         mov        ax,4C00h
    12.         int        21h               ; функция DOS "завершить программу"
    13.         .data
    14. message db         "Hello World!",0Dh,0Ah,'$'
    15.         end        start
    использую win7 и masm32
    в батнике написал
    Код (Text):
    1. d:\masm32\bin\ml /c 1.asm
    2. d:\masm32\bin\link 1.obj
    3. pause
    выдает ошибку
    LINK : error : Segment reference in fixup record
    1.obj : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

    почему ругается?

    и нужно ли в моем случае использовать coff при компиляции или нет? и что это за формат такой coff где прочесть?
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    http://www.google.ru/search?q=COFF&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox
     
  3. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    понял, значит coff мне не нужен , т.к. объектные файлы win32 мне нужны в программе... я использую маленькую модель памяти и реальный режим а не защищенный, просто программу под дос хочу запустить.. вообще такое реально сделать?
    почему же компилятор ругнулся?
     
  4. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    все понял, такой пример как я описал и модель памяти я не смогу использовать в виндах, нужно на виртуалку дос ставить и там запускать...
    является ли это единственным решением запуска досовской проги под окнами?
     
  5. IceT

    IceT IceT

    Публикаций:
    0
    Регистрация:
    13 авг 2009
    Сообщения:
    233
    Адрес:
    RU
    Вука вука!
     
  6. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    по запросу в гугле "вука вука" (http://www.google.ru/search?source=ig&hl=ru&rlz=&=&q=%D0%92%D1%83%D0%BA%D0%B0+%D0%B2%D1%83%D0%BA%D0%B0&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&meta=lr%3D)

    выдал следующий результат: Вука Вука - Верное решение мужских проблем :lol:
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    10ton
    Что-то я не совсем понимаю отметившихся в теме. На самом деле компоновать нужно 16-битным линкером:
    d:\masm32\bin\link16 1.obj
    Это смотря что понимать под фразой "в виндах".
    Не нужно. "Винды" легко запускают ntvdm (virtual dos machine), которая создаёт среду для исполнения приложений для DOS. Так что можете себе спокойно привычной распальцовкой кликать по полученному exe-шнику.
     
  8. 10ton

    10ton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    32
    в моем пакете masm32 нет файла link16.exe, только просто link
    насколько я читал windows работает с плоской моделью памяти и в защищенном режиме, соответственно модель small работать не должна или я неправильно понимаю? объясните пожалуйста
    каким образом запустить ntvdm? например под XP хотябы, у меня семерка, под ней есть своя виртуалка но руки до нее еще не дошли
     
  9. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    10ton, поетому он masm32, а не 16

    http://wasm.ru/forum/viewtopic.php?id=11378
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    10ton
    Взятый отсюда содержит всё, что нужно. И по большому счёту особо и установки не требует.
    Родные приложения Windows работают с плоской моделью, а под ntvdm любые, предназначенные для DOS с любой моделью.
    Уже ж сказал: "Привычной распальцовкой". Два раза кликаете на exe-шник, а загрузчик сам разберётся, запускать ему exe самостоятельно или под ntvdm. В диспетчере задач увидите потом, что ntvdm был запущен для эмуляции DOS-окружения.