Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

hello world!!!

Здравствуйте, comp!

Только вчера вечером начал изучать ассемблер, скачал MASM32.
Но линкер почему-то ругается на САБЖ:

C:\MASM32\BIN>ml /c c:\hello-1.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

Assembling: c:\hello-1.asm

C:\MASM32\BIN>link hello-1.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

hello-1.obj : warning LNK4033: converting object format from OMF to COFF
hello-1.obj : fatal error LNK1190: invalid fixup found, type 0x0001
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^что это???
Как решить эту проблему?

ЗЫ. Сорц тут точно ни при чем.

Ответить   Dmitry Beshenov Thu, 4 Nov 2004 13:28:20 +0300 (#257152)

 

Ответы:

Hi Dmitry Beshenov!On Thu, Nov 04, 2004 at 13:28 +0300, you wrote:

Попробуйте link /SUBSYSTEM:WINDOW hello-1
И попробуйте вместо C:\MASM32\BIN>ml /c c:\hello-1.asm
C:\MASM32\BIN>ml /c /coff c:\hello-1.asm

Ответить   APT Fri, 5 Nov 2004 00:17:48 +0500 (#257262)

 

Здравствуйте, Dmitry!

Вы писали 4 ноября 2004 г., 13:28:20:

ХМ, письмо прошло в лист только через 10 часов... (я уж подумал, что
забанили :) )
--

Я так думаю, что проьблема в том, что прога не под Вин32. В книге
Зубкова сказано:

Только линкер естсственно ругается на имя obj-файла.

Прбовал тоже самое сделать в tasm'е, поставляемым с билдером. их линкер
тоже ругается :(

ЗЫ. Почему QEDITOR не запускает (не билдит) сорцы в ХР? Пробовал в
Миллениуме - командная строка запускается. ????????

ЗЗЫ. Только что скачал Visual Assembler, который как я понял основывается
на борландовском ТАСМе. Этот вообще показывает оконо с мессагами и
ничего не делает. В миллениуме опять же работает, хотя тоже отказывается
ДОСовские проги билдить - говорит не поддерживает и ВСЕ!

Еще скачал fasm он вообще ругается на полвину строчек этого кода:

.model tiny ; модель памяти, используемая для СОМ
^^^^^на это
.code ; начало сегмента кода
^^^^^на это
org 100h ; начальное значение счетчика - 100h
start: mov ah,9 ; номер функции DOS - в АН
mov dx,offset message ; адрес строки - в DX
^^^^^на это
int 21h ; вызов системной функции DOS
ret ; завершение СОМ-программы
message db "Hello World!",0Dh,0Ah,'$' ; строка для вывода
end start ; конец программы
^^^^^на это

???

Потом выкачал какой-то WinASM. Пишет:
C:\WinAsm\Bin\ML /c /I"C:\WinASM\Include" "E:\Documents and Settings\Dmitry\?aai?ee
noie\DosCom.asm"
Make error: Cannot create process.
Make finished. 1 error(s) occured

Открыл свойства - там пути неправильно прописаны, прописал. Остальные
настройки касаются редактора. Но ошибка осталась.

Похоже, что проблема во мне. Просьба помочь поставить на ноги хоть
что-нибудь из перечисленного. Буду очень признателен.

ЗЗЗЫ. Какие справочники посоветуете по асм'у? (ссылки) Книг не нужно -
есть "art of assembly language" и Зубков.

Ответить   Dmitry Beshenov Thu, 4 Nov 2004 23:33:05 +0300 (#257273)

 

Здравствуйте, Dmitry.

Вы писали 4 ноября 2004 г., 23:33:05:

:)

Замечание 1:
Так нельзя завершать программу! Это возврат из процедуры и то не из
любой! Фактически ваша прога не будет завершаться.
Попробуйте так:
.exit

Замечание 2:
По умолчанию линкер думает, что вы суете ему модель памяти small
(в разных линкерах по разному, но точно не tiny). Для того, что бы
слинковать tiny нужен флаг. Почитайте справку.

(Для тасма флаг /t если ничего не путаю).

Для справки:
То, что пишет вам линкер в первом случае буквально означает следующее:
"Найден неправильный фиксап".
В EXE-файлах (!) есть таблица фиксапов. Что это - вы
поймете, если продолжите изучать ASM :). Однако, в СОМ-файле никаких
фиксапов быть не может, так как СОМ-файл имеет один сегмент для
данных, кода, и стека :), а следовательно все переходы и вызовы
происходят без смены сегмента.

Ответить   paradise Fri, 5 Nov 2004 11:23:49 +0300 (#257506)

 

Здравствуйте, Dmitry.

Правильнее lea dx,message

lea - Load Effective Address
Загрузить смещение

Ответить   paradise Fri, 5 Nov 2004 11:44:04 +0300 (#257510)

 

В модели памяти tiny как раз можно

Ответить   Sun, 7 Nov 2004 22:46:18 +0300 (#259427)

 

Ищите на www.wasm.ru Я скачал оттуда приятный "Архив статей WASM.RU на 18.01.2004"
Есть справочник-учебник неплохой на http://www.Kalashnikoff.ru

Ответить   Fri, 5 Nov 2004 11:40:51 +0300 (#257511)

 

Насколько я помню, последние версии link.exe вообще не поддерживают
компоновку для DOS, хотя ml.exe по-прежнему правильно
транслирует программы для нее.

Если тебе обязательно нужно получать программу для DOS, придется
воспользоваться другим компоновщиком, например от Borland:

tasm32.exe hello-1.asm
tlink.exe /t hello-1.obj

или даже так:

ml.exe /c hello-1.asm
tlink.exe /t hello-1.obj

Нужен именно tlink.exe, а не tlink32.exe.

В исходнике все в порядке, в нем трудно ошибиться :).
Использование команды ret совершенно верно для
com файлов (но только для них). Это следствие
особенностей соглашения о вызове
com программ в DOS.

Есть. Но записи fixup есть и в объектных файлах. Однако поскольку
используемый компоновщик не умееет делать программы для
DOS, он возмутился по поводу типа fixup, допустимого
только в 16-битных программах.

Это не важно. Команды, конечно разные, но
результат будет тот же.

Номер выпуска : 3752
Возраст листа : 410 (дней)
Количество подписчиков : 498
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/257620
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Fri, 5 Nov 2004 14:29:50 +0300 (#257620)

 

Здравствуйте, Емельянов!

Вы писали 5 ноября 2004 г., 14:29:50:

Так и есть, Зубков использует первый.

В шестом билдере есть какой-то ilink32.exe, но им я как раз и пробовал.
Visual Assembler (tasm) пишет, что чего-то не поддерживает(лень в
миллениум перегружаться, чтобы уточнять что именно :) ). Это значит, что мне
нужен линкер более старой версии?
Еще скачал TASM5Plus, только там tlink32.exe.

Хотя у меня вроде завалялся ТурбоСи... Нашел! tlink.exe! Щас
попробуем... :(((

E:\DOCUME~1\DMITRY\РАБОЧИ~1\TC\BIN>tlink.exe /t hello-1.obj
Turbo Link Version 5.0 Copyright (c) 1992 Borland International
Fatal: Bad object file record in hello-1.obj near module file offset 0x00000000

Ладно, пороюсь у мелкомягких в QuickC...

Ответить   Dmitry Beshenov Fri, 5 Nov 2004 16:57:48 +0300 (#257883)

 

Здравствуйте, Dmitry!

Вы писали 5 ноября 2004 г., 16:57:48:

Он все нормально слинковал и более того, в нем можно открывать
ассемблерные сорцы, править и делать все нажатием одной клавиши. Но
пригодится он может естественно только для ДОСовских программ. Еще для
любителей этой ОС (каким я и являюсь :) ) нарыл неплохой справочник на
русском:
http://sharoviki.narod.ru/download/asmteach.rar

Третий борландюк поставляется с ТАСМом и тоже все слинковал, а ТурбоСИ
не смог... ??? Странно...

ЗЫ. тему можно закрывать.

Ответить   Dmitry Beshenov Sat, 6 Nov 2004 01:00:35 +0300 (#258042)