· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.HELHEIM —› Подскажите пособие по ассемблеру для полных идиотов

Посл.отвђт Сообщен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