всем привет начал изучать ассемблер используя справочник Зубкова пробую откомпилировать программу Code (Text): ; hello-2.asm ; Выводит на экран сообщение "Hello World!" и завершается .model small ; модель памяти, используемая для ЕХЕ .stack 100h ; сегмент стека размером в 256 байт .code start: mov ax,DGROUP ; сегментный адрес строки message mov ds,ax ; помещается в DS mov dx,offset message mov ah,9 int 21h ; функция DOS "вывод строки" mov ax,4C00h int 21h ; функция DOS "завершить программу" .data message db "Hello World!",0Dh,0Ah,'$' end start использую win7 и masm32 в батнике написал Code (Text): d:\masm32\bin\ml /c 1.asm d:\masm32\bin\link 1.obj pause выдает ошибку LINK : error : Segment reference in fixup record 1.obj : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt почему ругается? и нужно ли в моем случае использовать coff при компиляции или нет? и что это за формат такой coff где прочесть?
понял, значит coff мне не нужен , т.к. объектные файлы win32 мне нужны в программе... я использую маленькую модель памяти и реальный режим а не защищенный, просто программу под дос хочу запустить.. вообще такое реально сделать? почему же компилятор ругнулся?
все понял, такой пример как я описал и модель памяти я не смогу использовать в виндах, нужно на виртуалку дос ставить и там запускать... является ли это единственным решением запуска досовской проги под окнами?
по запросу в гугле "вука вука" (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) выдал следующий результат: Вука Вука - Верное решение мужских проблем
10ton Что-то я не совсем понимаю отметившихся в теме. На самом деле компоновать нужно 16-битным линкером: d:\masm32\bin\link16 1.obj Это смотря что понимать под фразой "в виндах". Не нужно. "Винды" легко запускают ntvdm (virtual dos machine), которая создаёт среду для исполнения приложений для DOS. Так что можете себе спокойно привычной распальцовкой кликать по полученному exe-шнику.
в моем пакете masm32 нет файла link16.exe, только просто link насколько я читал windows работает с плоской моделью памяти и в защищенном режиме, соответственно модель small работать не должна или я неправильно понимаю? объясните пожалуйста каким образом запустить ntvdm? например под XP хотябы, у меня семерка, под ней есть своя виртуалка но руки до нее еще не дошли
10ton Взятый отсюда содержит всё, что нужно. И по большому счёту особо и установки не требует. Родные приложения Windows работают с плоской моделью, а под ntvdm любые, предназначенные для DOS с любой моделью. Уже ж сказал: "Привычной распальцовкой". Два раза кликаете на exe-шник, а загрузчик сам разберётся, запускать ему exe самостоятельно или под ntvdm. В диспетчере задач увидите потом, что ntvdm был запущен для эмуляции DOS-окружения.