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

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

За 2004-11-05

Re[2]: hello world!!!

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

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

ЕА> Если тебе обязательно нужно получать программу для 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.

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

В шестом билдере есть какой-то 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 2004-11-05 20:52:17 (#257883)

Re: hello world!!!

> C:\MASM32\BIN>link hello-1.obj
> Microsoft (R) Incremental Linker Version 5.12.8078
>
> hello-1.obj : warning LNK4033: converting object format from OMF to COFF
> hello-1.obj : fatal error LNK1190: invalid fixup found, type 0x0001
>
> Как решить эту проблему?
>
Насколько я помню, последние версии 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.

PR> Замечание 1:
PR> Так нельзя завершать программу! Это возврат из процедуры и то не из
PR> любой! Фактически ваша прога не будет завершаться.
PR>
В исходнике все в порядке, в нем трудно ошибиться :).
Использование команды ret совершенно верно для
com файлов (но только для них). Это следствие
особенностей соглашения о вызове
com программ в DOS.

PR> То, что пишет вам линкер в первом случае буквально означает следующее:
PR> "Найден неправильный фиксап".
PR> В EXE-файлах (!) есть таблица фиксапов.
Есть. Но записи fixup есть и в объектных файлах. Однако поскольку
используемый компоновщик не умееет делать программы для
DOS, он возмутился по поводу типа fixup, допустимого
только в 16-битных программах.

PR> Правильнее lea dx,message
Это не важно. Команды, конечно разные, но
результат будет тот же.

Номер выпуска : 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

   2004-11-05 14:32:05 (#257620)

Re: hello world!!!

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

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

   2004-11-05 11:41:35 (#257511)

Re[3]: hello world!!!

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

DB>> mov dx,offset message ; адрес строки - в DX
DB>> ^^^^^на это

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

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

   paradise 2004-11-05 11:41:04 (#257510)

Re[2]: hello world!!!

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

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

DB>> ЗЫ. Сорц тут точно ни при чем.
:)

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

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

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

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

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

   paradise 2004-11-05 11:20:19 (#257506)

Re: hello world!!!

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

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

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

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

Я так думаю, что проьблема в том, что прога не под Вин32. В книге
Зубкова сказано:
> Для MASM (команда link должна вызывать 16-битную версию LINK.EXE):
>
> link hello-1.obj,,NUL,,,
> exe2bin hello-1.exe hello-1.com

Только линкер естсственно ругается на имя 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 2004-11-05 00:37:46 (#257273)

Ассемблер

Хочется немного поучить сабж. Какую литературу можете посоветовать,
чтобы полученные знания можно было применять в различных ОС? Можно ее
(литературу:) где-нибудь скачать?
И можно где-нить всети скачать подробную техническую характеристику по
32-битовым микропроцессорам?

   APT 2004-11-05 00:22:50 (#257263)

Re: hello world!!!

Hi Dmitry Beshenov!On Thu, Nov 04, 2004 at 13:28 +0300, you wrote:
> Здравствуйте, 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
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^что это???
> >
> Как решить эту проблему?
Попробуйте 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 2004-11-05 00:22:34 (#257262)