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

Discussion in 'WASM.BEGINNERS' started by 10ton, Sep 9, 2009.

  1. 10ton

    10ton New Member

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    32
    всем привет
    начал изучать ассемблер
    используя справочник Зубкова пробую откомпилировать программу
    Code (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
    в батнике написал
    Code (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

    Blog Posts:
    0
    Joined:
    Mar 17, 2008
    Messages:
    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

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

    10ton New Member

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    32
    все понял, такой пример как я описал и модель памяти я не смогу использовать в виндах, нужно на виртуалку дос ставить и там запускать...
    является ли это единственным решением запуска досовской проги под окнами?
     
  5. IceT

    IceT IceT

    Blog Posts:
    0
    Joined:
    Aug 13, 2009
    Messages:
    233
    Location:
    RU
    Вука вука!
     
  6. 10ton

    10ton New Member

    Blog Posts:
    0
    Joined:
    Feb 8, 2007
    Messages:
    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

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

    10ton New Member

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

    litrovith Member

    Blog Posts:
    0
    Joined:
    Jun 20, 2007
    Messages:
    509
    10ton, поетому он masm32, а не 16

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

    l_inc New Member

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