Простейшее сообщение
, вывод 21h
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.219] |
|
|
Перед отправкой сообщения внимательно прочтите правила раздела!!!

Простейшее сообщение
, вывод 21h
|
Сообщ.
#1
,
|
|
|
|
![]() ![]() s segment org 100h start: mov ah, 09 mov dx, offset string int 21 int 20 string db 'PRIVET$' s ends end start Прога вроде верно написана Но вот при линковке(использую MASM) пишет следующее asmmmmmm.obj:fatal error LNK1190: invalid fixup found, type 0x0001 _ Link Error Изображение не прикрепилось В чем дело? поравьте, если что не так спасибо |
|
Сообщ.
#2
,
|
|
|
|
Про компиляцию прог под ДОС с помощью MASM'а я ничего писать не буду, ибо это гемор, поэтому приведу пример для TASM:
.COM: ![]() ![]() .MODEL Tiny .286 .CODE ORG 100h SMART LOCALS Start: int 20h END Start .EXE: ![]() ![]() .MODEL Small .286 .STACK 100h .DATA .CODE Start: .exit END Start Есть ещё и другие варианты, например, FASM и т.п. p.s. И с выбором подраздела поаккуратнее, ты пишешь не под WINDOWS/UNIX! |
|
Сообщ.
#3
,
|
|
|
|
Цитата 7in X @ с помощью MASM'а я ничего писать не буду, ибо это гемор Точнее не скажешь. Но мне непонятна вот эта строчка:Цитата maxutov @ s segment Это так сегмент кода объявляется? Цитата 7in X @ поэтому приведу пример для TASM Лучше уж так: ![]() ![]() ; COM .MODEL Tiny .286 .CODE ORG 100h SMART LOCALS Start: retn END Start Сократили один байт |
|
Сообщ.
#4
,
|
|
|
|
Цитата AndNot @ Цитата 7in X @ с помощью MASM'а я ничего писать не буду, ибо это гемор Точнее не скажешь. Но мне непонятна вот эта строчка:Цитата maxutov @ s segment Это так сегмент кода объявляется? Цитата 7in X @ поэтому приведу пример для TASM Лучше уж так: ![]() ![]() ; COM .MODEL Tiny .286 .CODE ORG 100h SMART LOCALS Start: retn END Start Сократили один байт ![]() Так объявляется сегмент кода Иногда пишут еще CESG просто чтоб сократить написал s |
|
Сообщ.
#5
,
|
|
|
|
Цитата maxutov @ Так объявляется сегмент кода А где указано что это сегмент кода, а не стека или данных? Где тип выравнивания? Судя по всему ошибка связана именно с выравнивание. Такое у линкеров встречается. Добавлено Попробовал на тасме. Все отлично скомпилилось. Только вот прога сразу же вылетела Глянул повнимательнее и.... е мое, maxutov, у тебяж инты в десятичной системе указаны!!!!!!![]() ![]() int 21 ; т.е. int 15h .... int 20 ; int 14h какой уж там вывод строки |
|
Сообщ.
#6
,
|
|
|
|
А ты не поделишься какая разница между кодом и данными с точки зрения проца?
Прога правильная, tasm'ом компилится так: ![]() ![]() tasm /m proga.asm tlink /t proga.obj Получишь proga.com. А насчёт ошибки - я подозреваю что ты виндовым масмом компилишь из-под винды, а он дос проги не собирает. Или найди масм под дос - но он под виндой не работает, или возьми тасм и не парься. |
|
Сообщ.
#7
,
|
|
|
|
Цитата cppasm @ А ты не поделишься какая разница между кодом и данными с точки зрения проца? Чтобы сгенерить правильный код, асму нужно знать какие сегментные регистры на какой сегмент настроены. А для линкера, при сборке, очень важно знать выравнивание сегментов, не знаю какое уж там масм прописывает по умолчанию. Цитата cppasm @ tasm /m proga.asm Можно вообще без параметров обойтись Кстати в масме не линкуется наверное из-за его тупизны, ему явно надо указать, какие регистры настроены на текущий сегмент. попробуй вставить ![]() ![]() assume cs:_TEXT,ds:_TEXT,es:NOTHING Если не поможет, то явно объяви сегмент: ![]() ![]() _TEXT segment byte public 'CODE' assume cs:_TEXT,ds:_TEXT,es:NOTHING Что то из этого должно помочь ЗЫ: В тасме это все по умолчанию. Поэтому он без проблем компильнул твой пример. |
|
Сообщ.
#8
,
|
|
|
|
Цитата AndNot @ Цитата maxutov @ Так объявляется сегмент кода А где указано что это сегмент кода, а не стека или данных? Где тип выравнивания? Судя по всему ошибка связана именно с выравнивание. Такое у линкеров встречается. Добавлено Попробовал на тасме. Все отлично скомпилилось. Только вот прога сразу же вылетела Глянул повнимательнее и.... е мое, maxutov, у тебяж инты в десятичной системе указаны!!!!!!![]() ![]() int 21 ; т.е. int 15h .... int 20 ; int 14h какой уж там вывод строки ![]() в 16-ричной тоже самое надо разобраться в ошибке invalid fixup found -Added Цитата cppasm @ А ты не поделишься какая разница между кодом и данными с точки зрения проца? Прога правильная, tasm'ом компилится так: ![]() ![]() tasm /m proga.asm tlink /t proga.obj Получишь proga.com. А насчёт ошибки - я подозреваю что ты виндовым масмом компилишь из-под винды, а он дос проги не собирает. Или найди масм под дос - но он под виндой не работает, или возьми тасм и не парься. Да компилирую из-под винды а есть MASM под винду? -Added Цитата AndNot @ Цитата cppasm @ А ты не поделишься какая разница между кодом и данными с точки зрения проца? Чтобы сгенерить правильный код, асму нужно знать какие сегментные регистры на какой сегмент настроены. А для линкера, при сборке, очень важно знать выравнивание сегментов, не знаю какое уж там масм прописывает по умолчанию. Цитата cppasm @ tasm /m proga.asm Можно вообще без параметров обойтись Кстати в масме не линкуется наверное из-за его тупизны, ему явно надо указать, какие регистры настроены на текущий сегмент. попробуй вставить ![]() ![]() assume cs:_TEXT,ds:_TEXT,es:NOTHING Если не поможет, то явно объяви сегмент: ![]() ![]() _TEXT segment byte public 'CODE' assume cs:_TEXT,ds:_TEXT,es:NOTHING Что то из этого должно помочь ЗЫ: В тасме это все по умолчанию. Поэтому он без проблем компильнул твой пример. ![]() ![]() _TEXT segment byte public 'CODE' assume cs:_TEXT,ds:_TEXT,es:NOTHINGorg 100h start: mov ah, 09 mov dx, offset string int 21h int 20h string db 'PRIVET$' _TEXT ends end start выдает ошибку underscore required for start address: start |
|
Сообщ.
#9
,
|
|
|
|
Цитата maxutov @ Да компилирую из-под винды а есть MASM под винду? Есть, только он и проги собирает под винду, а у тебя дос. |
|
Сообщ.
#10
,
|
|
|
|
Цитата cppasm @ Цитата maxutov @ Да компилирую из-под винды а есть MASM под винду? Есть, только он и проги собирает под винду, а у тебя дос. компилирую не из командной строки Захожу в Masm32 editor нажимаю Project->Built all Это и есть MASM под виндоус? |
|
Сообщ.
#11
,
|
|
|
|
Цитата maxutov @ в 16-ричной тоже самое Это относится только к неправильному коду, а не к линкеру Даже если бы и скомповал, то программа у тебя в лучшем случае не стала бы работать (что у меня и произошло поначалу).Цитата maxutov @ underscore required for start address: start Пессимисты оказались правы, масм действительно требует явного указания сегментов. Вот этот код гарантированно должен скомпилиться: ![]() ![]() code SEGMENT ASSUME cs:code, ds:code, ss:code, es:code entry: ORG 0100h mov ah,09 mov dx,offset tststr int 21h retn tststr db 'PRIVET',13,10,'$' code ENDS ; конец сегмента текста программы END entry Если нет, то, как и говорил cppasm, "асма у него не той системы" Цитата maxutov @ Захожу в Masm32 editor нажимаю Project->Built all Это и есть MASM под виндоус? Да! |
|
Сообщ.
#12
,
|
|
|
|
Цитата AndNot @ Цитата maxutov @ в 16-ричной тоже самое Это относится только к неправильному коду, а не к линкеру Даже если бы и скомповал, то программа у тебя в лучшем случае не стала бы работать (что у меня и произошло поначалу).Цитата maxutov @ underscore required for start address: start Пессимисты оказались правы, масм действительно требует явного указания сегментов. Вот этот код гарантированно должен скомпилиться: ![]() ![]() code SEGMENT ASSUME cs:code, ds:code, ss:code, es:code entry: ORG 0100h mov ah,09 mov dx,offset tststr int 21h retn tststr db 'PRIVET',13,10,'$' code ENDS ; конец сегмента текста программы END entry Если нет, то, как и говорил cppasm, "асма у него не той системы" Цитата maxutov @ Захожу в Masm32 editor нажимаю Project->Built all Это и есть MASM под виндоус? Да! Ура! Ничего не вышло! proga.obj:fatal error LNK1190: invalid fixup found, type 0x0001 _ Link Error вот такую ошибку деает гад |
|
Сообщ.
#13
,
|
|
|
|
maxutov - походу ты компилишь 32-bit Incremental Linker, который делает PE файлы под Windows ®
Добавлено скомпилил комок.. ML /omf xz.asm ![]() ![]() .model tiny .686 .code .startup mov ah,09 mov dx,offset tststr int 21h retn tststr db 'PRIVET',13,10,'$' end вобщем по умолчанию масм (у меня 7.0) COFF-файлы генерит.. на что линкер послал ![]() ![]() Microsoft (R) Segmented Executable Linker Version 5.60.220 Sep 9 1994 Copyright (C) Microsoft Corp 1984-1993. All rights reserved. Object Modules [.obj]: xz.obj /t Run File [xz.com]: /OUT:"xz.com" LINK : warning L4017: /OUT : unrecognized option name; option ignored List File [nul.map]: Libraries [.lib]: Definitions File [nul.def]: xz.obj : fatal error L1101: invalid object module Object file offset: 1 Record type: 4c Добавлено с ключём /omf ![]() ![]() C:\WINNT\Temp>ML.EXE /omf xz.asm Microsoft (R) Macro Assembler Version 7.00.9466 Copyright (C) Microsoft Corporation. All rights reserved. Microsoft (R) Segmented Executable Linker Version 5.60.220 Sep 9 1994 Copyright (C) Microsoft Corp 1984-1993. All rights reserved. Object Modules [.obj]: xz.obj /t Run File [xz.com]: "xz.com" List File [nul.map]: NUL Libraries [.lib]: Definitions File [nul.def]: даже не пикнул.. Добавлено maxutov-а у тебя какие версии этих консольных тулз ? |
|
Сообщ.
#14
,
|
|
|
|
в хелпах все написано!!!
тока мне самому ниче не ясно |