|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 15, 2004 20:35:23 Прочитал недавно пособие по ассемблеру А.Климова. Все примеры ручками переписал, все ассеммблируется (правда только в masm32) и линкуется (только в masm 6.1), вобщем все путем работает. А вот начал читать бумажную книжонку В.И.Юров Assembler 2-e издание, так мало того что хрен поймешь о чем пишет, так с нее ещё и ни один пример не ассемблируется :( Че за лажа. Вот самый первый и простой: data segment para public 'data'
message db 'Hello World! No war and bomb! Let us live friendly and learn assembler language. $'
data ends
stk segment stack
db 256 dup ('?') ;сегмент стека
stk ends
code segment para public 'code' ;начало сегмента кода
main proc ;начало процедуры main
assume cs:code,ds:data,ss:stk
mov ax,data ;адрес сегмента данных в регистр ax
mov ds,ax ;ax в ds
mov ah,9
mov dx,offset message
int 21h ;вывод сообщения на экран
mov ax,4c00h ;пересылка 4c00h в регистр ax
int 21h ;вызов прерывания с номером 21h
main endp ;конец процедуры main
code ends ;конец сегмента кода
end main ;конец программы с точкой входа main |
|
|
Дата: Ноя 16, 2004 03:59:55 ipse все ассеммблируется (правда только в masm32) и линкуется (только в masm 6.1) Вообще то ассемблером является ml.exe, а ликером - link.exe, а приведенные тобой наименования - это названия пакетов. книжонку В.И.Юров Assembler 2-e издание Зачем же так? Afaik у Юрова приведены примеры для командных строк запуска ассемблера и линкера, в том числе для дос приложений. ни один пример не ассемблируется :( Че за лажа. Если что-то не работает, то обычно показывают код, показывают строку запуска компилятора/линкера и приводят текст сообщения об ошибке/предупреждения. У меня твой пример прекрасно собирается в исполняемый код. |
|
|
Дата: Ноя 16, 2004 11:09:45 Я это и хотел сказать, что ассемблируется только ассемблером из пакета masm32, а линкуется только link.exe из пакета masm 6.1 и ни как иначе. На счет Юрова. Как ассемблировать этот конкретный пример он не написал, но написал как ассемблировать похожий следующий пример tasm.exe /zi prg_5_2.asm , , , ассемблер выдает кучу бреда, стирает все содержимое prg_5_2.asm (то есть получается из него пустой файл 0байт), но выдает таки prg_5_2.obj Далее Юров пишет сделать так: tlink.exe /v prg_5_2.obj но так как в пакете tasm у меня линкера нет, пытаюсь линковать в масм: link.exe /t prg_5_2.obj выдает чет типа "корявый обьектный файл" На счет вышеприведенного примера, масм32 ругается на строку mov ax,dataтипа симбол конфликт и на последнюю строку чет тоже ругается. |
|
|
Дата: Ноя 16, 2004 12:42:06 · Поправил: q_q ipse линкуется только link.exe из пакета masm 6.1 Потому что редактор связей из пакета masm32 не умеет делать dos-приложения. ассемблер выдает кучу бреда, стирает все содержимое prg_5_2.asm Попробовал твою командную строку, использовал tasm.exe из BC++v3.1. Получил объектный файл, и при этом исходный текст не был испорчен. но так как в пакете tasm у меня линкера нет Ищи или используй masm. масм32 ругается на строку ... на последнюю строку чет тоже ругается Ты полагаешь, что на форуме телепаты? Не надо типа .... Запости сообщения об ошибках. PS. Повторяю Мой ml.exe v6.15.8803 и link.exe v5.60.339 без ошибок и предупреждений собрал указанный тобой код. |
|
|
Дата: Ноя 16, 2004 13:22:45 · Поправил: ipse Ок, я вечером напишу. Сейчас под рукой только машинка с ARM процем (с которой я и пишу сейчас сюда) и ассемблер на ней стоит только narm (с которым никогда в жизни я наверно не разберусь) Ищи или используй masm. Так использовал.. пытаюсь линковать в масм: link.exe /t prg_5_2.obj Приведенный в самом начале пример: Не хочет он ассемблировать :( на строку mov ax,dataвыдает ошибку Symbol conflict, ассемблирировать пробовал через RadAsm |
|
|
Дата: Ноя 16, 2004 13:24:31 Кстати ml.exe из masm 6.1 ругается на то что не является приложением win32 |
|
|
Дата: Ноя 16, 2004 19:29:13 Вот чем собственно увенчались все попытки сассемблировать этот самый пример приведенный вначале.. Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\Documents and Settings\ipse.IPSE-2718F8F875>cd C:\MASM61\BIN C:\MASM61\BIN>ml.exe prg_5_1.asm /at Отказано в доступе. C:\MASM61\BIN>cd C:\TASM C:\TASM>TASM.EXE Prg_5_1.asm TASM Assembler. Version 3.2 September, 2001. Copyright (C) 2001 Squak Valley Software tasm: pass 1 complete. Prg_5_1.asm line 0001: Label not found: (data) Prg_5_1.asm line 0001: label value misalligned. (data) Prg_5_1.asm line 0001: unrecognized instruction. (data) Prg_5_1.asm line 0002: Label not found: (message) Prg_5_1.asm line 0002: label value misalligned. (message) Prg_5_1.asm line 0002: unrecognized instruction. (message) Prg_5_1.asm line 0003: Label not found: (data) Prg_5_1.asm line 0003: label value misalligned. (data) Prg_5_1.asm line 0003: unrecognized instruction. (data) Prg_5_1.asm line 0004: Label not found: (stk) Prg_5_1.asm line 0004: label value misalligned. (stk) Prg_5_1.asm line 0004: unrecognized instruction. (stk) Prg_5_1.asm line 0005: unrecognized instruction. (DB) Prg_5_1.asm line 0006: Label not found: (stk) Prg_5_1.asm line 0006: label value misalligned. (stk) Prg_5_1.asm line 0006: unrecognized instruction. (stk) Prg_5_1.asm line 0007: Label not found: (code) Prg_5_1.asm line 0007: label value misalligned. (code) Prg_5_1.asm line 0007: unrecognized instruction. (code) Prg_5_1.asm line 0008: Label not found: (main) Prg_5_1.asm line 0008: label value misalligned. (main) Prg_5_1.asm line 0008: unrecognized instruction. (main) Prg_5_1.asm line 0009: unrecognized instruction. (ASSUME) Prg_5_1.asm line 0010: unrecognized instruction. (MOV) Prg_5_1.asm line 0011: unrecognized instruction. (MOV) Prg_5_1.asm line 0012: unrecognized instruction. (MOV) Prg_5_1.asm line 0013: unrecognized instruction. (MOV) Prg_5_1.asm line 0014: unrecognized instruction. (INT) Prg_5_1.asm line 0015: unrecognized instruction. (MOV) Prg_5_1.asm line 0016: unrecognized instruction. (INT) Prg_5_1.asm line 0017: Label not found: (main) Prg_5_1.asm line 0017: label value misalligned. (main) Prg_5_1.asm line 0017: unrecognized instruction. (main) Prg_5_1.asm line 0018: Label not found: (code) Prg_5_1.asm line 0018: label value misalligned. (code) Prg_5_1.asm line 0018: unrecognized instruction. (code) Prg_5_1.asm line 0019: Label not found: (end) Prg_5_1.asm line 0019: label value misalligned. (end) Prg_5_1.asm line 0019: unrecognized instruction. (end) line 0019: No END directive before EOF. tasm: pass 2 complete. tasm: Number of errors = 40 C:\TASM>cd C:\tasm32 C:\tasm32>TASM.EXE Prg_5_1.asm TASM Assembler. Version 3.2 September, 2001. Copyright (C) 2001 Squak Valley Software tasm: pass 1 complete. Prg_5_1.asm line 0001: Label not found: (data) Prg_5_1.asm line 0001: label value misalligned. (data) Prg_5_1.asm line 0001: unrecognized instruction. (data) Prg_5_1.asm line 0002: Label not found: (message) Prg_5_1.asm line 0002: label value misalligned. (message) Prg_5_1.asm line 0002: unrecognized instruction. (message) Prg_5_1.asm line 0003: Label not found: (data) Prg_5_1.asm line 0003: label value misalligned. (data) Prg_5_1.asm line 0003: unrecognized instruction. (data) Prg_5_1.asm line 0004: Label not found: (stk) Prg_5_1.asm line 0004: label value misalligned. (stk) Prg_5_1.asm line 0004: unrecognized instruction. (stk) Prg_5_1.asm line 0005: unrecognized instruction. (DB) Prg_5_1.asm line 0006: Label not found: (stk) Prg_5_1.asm line 0006: label value misalligned. (stk) Prg_5_1.asm line 0006: unrecognized instruction. (stk) Prg_5_1.asm line 0007: Label not found: (code) Prg_5_1.asm line 0007: label value misalligned. (code) Prg_5_1.asm line 0007: unrecognized instruction. (code) Prg_5_1.asm line 0008: Label not found: (main) Prg_5_1.asm line 0008: label value misalligned. (main) Prg_5_1.asm line 0008: unrecognized instruction. (main) Prg_5_1.asm line 0009: unrecognized instruction. (ASSUME) Prg_5_1.asm line 0010: unrecognized instruction. (MOV) Prg_5_1.asm line 0011: unrecognized instruction. (MOV) Prg_5_1.asm line 0012: unrecognized instruction. (MOV) Prg_5_1.asm line 0013: unrecognized instruction. (MOV) Prg_5_1.asm line 0014: unrecognized instruction. (INT) Prg_5_1.asm line 0015: unrecognized instruction. (MOV) Prg_5_1.asm line 0016: unrecognized instruction. (INT) Prg_5_1.asm line 0017: Label not found: (main) Prg_5_1.asm line 0017: label value misalligned. (main) Prg_5_1.asm line 0017: unrecognized instruction. (main) Prg_5_1.asm line 0018: Label not found: (code) Prg_5_1.asm line 0018: label value misalligned. (code) Prg_5_1.asm line 0018: unrecognized instruction. (code) Prg_5_1.asm line 0019: Label not found: (end) Prg_5_1.asm line 0019: label value misalligned. (end) Prg_5_1.asm line 0019: unrecognized instruction. (end) line 0019: No END directive before EOF. tasm: pass 2 complete. tasm: Number of errors = 40 C:\tasm32>cd C:\masm32\bin C:\masm32\bin>ml.exe prg_5_1.asm /at Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: prg_5_1.asm MASM : warning A4018: invalid command-line option : /at Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /z2 "prg_5_1.obj" "prg_5_1.exe" NUL LINK : warning LNK4044: unrecognized option "z2"; ignored LINK : error : Segment reference in fixup record prg_5_1.obj : fatal error LNK1123: failure during conversion to COFF: file inval id or corrupt C:\masm32\bin> |
|
|
Дата: Ноя 16, 2004 19:44:22 В последнем случае всетаки создается .obj файл, пытаюсь слинковать C:\MASM61\BIN>link.exe prg_5_1.obj /t Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992 Copyright (C) Microsoft Corp 1984-1992. All rights reserved. Run File [prg_5_1.com]: prg_5_1.com List File [nul.map]: Libraries [.lib]: Definitions File [nul.def]: LINK : fatal error L1127: far segment references not allowed with /TINY C:\MASM61\BIN>cd C:\masm32\bin C:\masm32\bin>link.exe prg_5_1.obj /t Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. LINK : warning LNK4044: unrecognized option "t"; ignored LINK : error : Segment reference in fixup record prg_5_1.obj : fatal error LNK1123: failure during conversion to COFF: file inval id or corrupt C:\masm32\bin> |
|
|
Дата: Ноя 17, 2004 04:13:47 · Поправил: q_q ipse Совсем другое дело. Попорядку. C:\MASM61\BIN>ml.exe prg_5_1.asm /at Отказано в доступе. Судя по всему сообщение ОС. Почему ml.exe не выдал logo? Либо он не выполнился и значит к нему нет доступа, либо он где-то, например, в переменных среды, нашел ключ /nologo. Т.е. надо разобраться к чему нет доступа. C:\TASM>TASM.EXE Prg_5_1.asm ... C:\tasm32>TASM.EXE Prg_5_1.asm Судя по всему TASM у тебя один и тот же в обоих каталогах. Где ты его достал? Это явно не продукт Borland'а. Мне известны версии 3.1 для dos/win16 и 5.3 для win32, притом последняя датирована 2000-ым годом. C:\masm32\bin>ml.exe prg_5_1.asm /at ... MASM : warning A4018: invalid command-line option : /at Компилятор справедливо заметил, что ключа /at нет. Есть /AT. Этот ключ указывает, что необходимо собрать com-файл, т.е. использовать крохотную модель памяти (TINY). К твоей программе это не применимо. Надо запускать ml.exe prg_5_1.asm Что касается microsoft'овского редактора связей (link), то твоя версия не умеет делать dos-приложения. Ищи, я качал с сайта ms, файлик Lnk563.exe - самораспаковывающийся архив, он содержит нужный линкер. + у ms'овского линкера нет ключа /t. |
|
|
Дата: Ноя 17, 2004 10:32:32 ipse Если не юзать устаревших "ассемблеров"(компиляторов), то например на fasm подобная программа выглядела бы приблизительно так: format MZ entry _CODE:start ; program entry point stack 100h ; stack size segment _CODE ; main program segment start: mov ax,_TEXT mov ds,ax mov dx,message mov ah,9 int 21h mov ax,4C00h int 21h segment _TEXT message db 'Hello world!$' |
|
|
Дата: Ноя 17, 2004 10:45:49 Отказано в доступе т.к. "не является приложением win32", видимо только под работал бы. За то линкер из того пакета может ваять DOS файлы, поятому я его и держу пока. Сегодня закачаю tasm5+ попробую им еще. Та значит так надо? C:\masm32\bin>ml.exe prg_5_1.asm без всяких at и создастся нормальный obj файл. Далее найти линкер Lnk563.exe на сайте microsoft. Правильно я понял? |
|
|
Дата: Ноя 17, 2004 10:50:21 Asterix Тут немного другая задача, не по написанию программы "hello world!", а по компиляции приведенного мною исходника. |
|
|
Дата: Ноя 17, 2004 10:55:48 ipse Дык и компилируется мой пример в fasm без малейших проблем и линкера не нужно ;-). Забей ты на tasm и старый masm - вчерашний день ;-) |
|
|
Дата: Ноя 17, 2004 11:37:12 ipse За то линкер из того пакета может ваять DOS файлы ИСпользуй его. Далее найти линкер Lnk563.exe на сайте microsoft. Правильно я понял? Да. Только я не настаиваю на microsoft'е. Надо искать link.exe версии 5.60.339. Конкретно тебе я это уже писал в ветке Помогите ламеру |
|
|
Дата: Ноя 17, 2004 22:21:24 Все, спасибо, разобрался :) prg_5_1.exe удалось таки собрать, теперь ищу link.exe версии 5.60.339 чтоб работать с одним пакетом. А еще поставил сегодня TASM 5.0, доволен им по уши :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.221 |