· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.SITE —› FAQ от WASM.RU

Посл.отвђт Сообщенiе


Дата: Сен 11, 2003 12:48:32 · Поправил: KiNDeR


                  FAQ от FORUM WASM.RU
       При составлении FAQ были использованы
              ответы участников форума.
                Оформление by Asterix.

                              Если хочешь похудеть? -
                                 спроси меня, как?...

Q: Какой компилятор выбрать, если я хочу начать
   программировать на ассемблере? Где их можно взять?
A: В настоящее время наибольшую популярность имеет
   пакет MASM32. За ним идет молодой, но быстро
   развивающийся пакет FASM(скачать их можно из
   раздела "Компиляторы" на сайте WASM.RU(там же вы
   найдете ссылки на официальные сайты разработчиков)).
   Для любителей ретро, подойдет старенький пакет
   TASM(его вы можете слить с сайта www.wasm.narod.ru.)
   А вот какой же из них выбрать - это решать вам!

Q: С какой книги можно начать изучение ассемблера?
A: Да, с любой. Но в настоящее время наиболее популярными являются:
   С. В. Зубков "Assembler. Для DOS, Windows и Unix", изд. ДМК.
   В. Юров "Assembler" - Учебник, изд. Питер, 2000
   В. Юров "Assembler" - Специальный справочник, изд. Питер, 2000
   Если кодинг под Win32, то туториалы Iczelion'а.
   Но лучшая книга всех рвемен и народов это:
   Абель "Ассемблер и программирование для IBM PC"

Q: Как скомпилировать исходный текст программы в com, exe или dll?
A: Итак, все по порядку:
   КОМПИЛЯЦИЯ В COM(MS DOS)
    TASM:
     tasm /m /ml /q /zn file_name.asm
     tlink /x /t file_name.obj
    MASM:
     ml /c file_name.asm
     link file_name.obj,,NUL,,,
     exe2bin file_name.exe file_name.com

   КОМПИЛЯЦИЯ В EXE(MS DOS)
    TASM:
     tasm /m /ml /q /zn file_name.asm
     tlink /x file_name.obj
    MASM:
     ml /c file_name.asm
     link file_name.obj

   КОМПИЛЯЦИЯ В EXE(MS WINDOWS)
    TASM:
     (с файлом ресурса)
     tasm32.exe /ml /m /q /zn /kh32000 file_name.asm
     brcc32.exe file_name.rc
     tlink32.exe /Tpe /aa /c /x file_name.obj,,,,,file_name.res
     (без файла ресурсов)
     tasm32.exe /ml /m /q /zn /kh32000 file_name.asm
     tlink32.exe /Tpe /aa /c /x file_name.obj
    MASM:
     (с файлом ресурса)
     ml /c /coff "file_name.asm"
     rc file_name.rc
     Link /SUBSYSTEM:WINDOWS "file_name.obj" file_name.res
     (без файла ресурсов)
     ml /c /coff "file_name.asm"
     Link /SUBSYSTEM:WINDOWS "file_name.obj"

   КОМПИЛЯЦИЯ В EXE(MS WINDOWS(КОНСОЛЬ))
    TASM:
     tasm32.exe /ml /m /q /zn /kh32000 file_name.asm
     tlink32.exe /Tpe /ap /c /x file_name.obj
    MASM:
     ml /c /coff "file_name.asm"
     Link /SUBSYSTEM:CONSOLE "file_name.obj"

   КОМПИЛЯЦИЯ В DLL(MS WINDOWS)
    TASM:
     tasm32.exe /ml /m /q /zn /kh32000 file_name.asm
     implib file_name.lib file_name.dll
     tlink32 /Tpd /aa /z /c file_name.dll
    MASM:
     ml /c /coff file_name.asm
     Link /SUBSYSTEM:WINDOWS /DLL /DEF:file_name.def file_name.obj

Q: Какой редактор лучше всего подходит для написания
   листингов программ на ассемблере?
A: О, это риторический вопрос, и камень приткновения
   для многих программистов на ассемблере. Здесь
   нельзя ответить однозначно. Каждый решает этот
   вопрос по своему. Кто-то пользуется RadAsm'ом,
   кто-то AsmEd by AV(t)LAB, мне лично нравиться
   встроенный редактор Дос Навигатора.

Q: Каким отладчиком пользоваться при отладке своих и
   исследовании чужих программ?
A: Самый лучший отладчик для операционной системы
   Windows это, конечно же, SoftIce(сейчас Driver
   Studio). Самый дЗенный инструмент, после твоего
   лубимого компилятора. Основная особенность - это
   возможность поставить бряк на любое событие в
   системе. Существует, так же, отладчик Win32
   приложений под названием OllyDbg. Маленький,
   быстрый, удобный отладчик. В наборе со своими
   плагинами может имитировать функции Soft Ice,
   такие как: бряк на функцию по ее имени и многое
   другое. Очень хороший инструмент!

Q: Допустим мы имеем:
    .data
      ...
      mes1 db 'stroka1',0
      mes2 db 'stroka2',0
      ...
   как склеить эти строки, чтобы вывести на экран как
   'stroka1stroka2'?
A: Все стандартные алгоритмы (вроде тех, что
   реализованы в strcpy) предполагают наличие
   достаточного места в строке. Если это не так,
   тогда надо вычислить длину добавляемой строки,
   добавить память, занимаемую массивом и дописать ее
   туда. А вообще, для таких случаев есть книжка
   Рэндалла Хайда! Давным-давно лежит!

Q: Как можно вызывать API функции не через их имена?
A: Через ординалы.
   http://www.programmingjournal.com/issue4/art3/index.htm

Q: Каким инструментом можно воспользоваться для того,
   чтобы посмотреть какие API функции использует то
   или иное приложение? Какие есть ресурсы (иконки,
   диалоги и пр.)?
A: Существует множество приблуд позволяющих
   просматривать внуренности исплняемого файла. Это
   редакторы ресурсов. Я не возьмусь перечислять их
   все и определять кто из низ лучше делает свою
   работу. Лично мне нравиться инструмент под
   названием eXeScope. Его, а так же еще много друх
   инструментов вы сможете найти на WASM.RU в разделе
   "Редакторы ресурсов".

Q: Какой софт можно использывать для pедактиpования
   файлов в HEX-виде?
A: Лучше всего подойдет HIEW by SEN(к стати, любимый
   инструмент нашего многоуважаемого критика молодых
   и неопытных посетителей форума WASM.RU - Володи),
   QView by Alexander Gazko. Но существуют и дpугие
   pедактоpы.

Q: Где можно взять справочник по API функциям?
A: 1.Если у Вас быстрый Интернет, то здесь есть почти
     всё, что надо:
Microsoft.MSDN.Library
   2.Если поставить Borland С++ Builder 6, то с ним
     идет неплохой хэлп, написанный по MSDN-у. Файл
     находиться: C:\Program Files\Common Files\Borland Shared\MSHelp\win32.hlp.
   3.MSDN за апрель 2003
     CD-1
    Microsoft.MSDN.Disk1
     CD-2
    Microsoft.MSDN.Disk2
     CD-3
    Microsoft.MSDN.Disk3


Q: Можно ли писать на ассемблере в одну строчку?
A: Возникает встречный вопрос: "Зачем?". Но если вам
   это необходимо, то можно воспользоваться способом
   описанным на, когда-то существовавшем сайте
   "Assembler.ru". Нам потребуется написать макрос
   примерно следущего содержания:
     @ macro p0,p1,p2,p3,...,pX
        p0
        p1
        p2
        p3
        ...
        ...
        pX
       endm
   Теперь используя макрос "@" мы можем записывать
   команды в строчку:
     @<mov ah,09h>,<mov dx,offset _str>,<int 21h>,...,<...>

           FAQ от WASM.RU №2.(Не полная версия)

Q: В языках высокого уровня существет функция abs() -
   модуль числа(абсолютное значение). Как мне её организовать
   на ассемблере?
A: Эта задача на языке ассемблера решается очень просто:
   Если число находиться в регистре EAX, то функция получения
   его абсолютного значения будет выглядеть так:
   ; EAX = число.
   _abs:
     NEG EAX  ; Поменяем знак числа.
     js _abs  ; Если установился флаг знака, то повторим.
   Но так как мы считаем себя Войнами дЗена, и наверняка прочли
   Агнера Фога, то еще один вариант будет выглядеть так:
   ; EAX = число.
   _abs:
     xor eax,-1 \
     inc eax    /  NEG EAX
     js _abs


Q: Как вызвать API функцию из программы на ассемблере?
A: При вызове Win32 API функций используется STDCALL-конвенция.
   В ней параметры помещаются в стек в обратном порядке.
   Пример:
    на С:
     some_proc(a,b,c,d,e)
    на Ассемблере:
     (TASM32&MASM32)
      push e
      push d
      push c
      push b
      push a
      call some_proc
     (FASM)
      push e
      push d
      push c
      push b
      push a
      invoke some_proc
     либо
      call some_proc,a,b,c,d,e (TASM32)
      invoke some_proc,a,b,c,d,e (MASM32&FASM)

Q: Говорят, что команда LEA умеет делать что-то еще, кроме как вычисление
   адреса сложно адресуемой переменной.
A: Это так. LEA можно использывать для следующих ситуаций:
   * быстрое умножение
      lea eax,[eax*2]      ; EAX=EAX*2 (shl eax,1 лучше).
      lea eax,[eax+eax*2]  ; EAX=EAX*3.
      lea eax,[eax*4]      ; EAX=EAX*4 (shl eax,2 лучше).
      lea eax,[eax+eax*4]  ; EAX=EAX*5.
      lea eax,[eax+eax*8]  ; EAX=EAX*9.
      ...
   * трехоперандное сложение
      lea ecx,[eax+ebx]    ; ECX=EAX+EBX.
      ...

Q: Как мне сделать так, чтобы моя программа работала только в одном
   экземпляре? Т.е. была бы активна только одна копия.
A: На WASM.RU, в документах, лежит OffLine версия, некогда прекраснейшего,
   сайта Assembler.ru. Так вот там есть статья под названием
   "взаимодействие экземпляров приложения". В этой статье описан наиболее
   дейсвенный и простой алгоритм реализации.

Q: Что такое Stub программа?
A: "Stub" в переводе с английского - "пень, обломок, огрызок".
   Это в литературном переводе. В нелитературный перевод углубляться
   не будем. Скажем только, что это то самое, что показывает компьютер
   человеку, попытавшемуся запустить из-под DOS приложение, написанное
   для Windows. Обычно он показывает сообщение: "This program cannot
   be run in DOS mode". А вы что подумали?
   Это вступление статьи "минимальная stub-программа", которую вы можете
   найти в OffLine версии сайта Assebmler.ru.

   Продолжение следует....


Дата: Сен 11, 2003 18:01:40

IMHO ни Юров ни Зубков не подойдут для начала.
Раньше новичкам стартовать легче всего было с книг где автор Финогенов, либо авторы Рудаков, Финогенов.
Их отличало обилие примеров, объяснения простым языком и понимание что их читатель новичок, его нужно осторожно "вести".

Старый Абель в русском издании был с тучей ошибок,
некоторые убивали новичка наповал. В новом издании всё выглядит гораздо лучше.

Iczelion с его тюторами к ассемблеру отношение имеет относительное. Он объяснит, и очень хорошо для начала, как программировать под Windows а не ассемблер, в отношении ассемблера его тюторы нанесут просто вред начинающему.
Я Iczelion'а люблю. Но если говорить об ассемблерной составляющей его тюторов то это скорее "как продолжать писать на ЯВУ используя при этом ML.EXE вместо компилятора C".

Вообще стиль современных книг по асму я бы определил словом "неряшливый". Никто даже близко не приближается к
старичкам типа Григорьева. У старых же книг другой существенный недостаток - многое в них безнадёжно устарело.

Более - менее универсальные знания можно подчерпнуть в старом (Без HLA) AOA Хайда. Кстати Зубков, часто переписывал из Хайда старой книги Хайда целые куски, без упоминания источника :)

Самый большой минус книг - книги фокусируются на вопросах системы и ассемблера, и не учат собственно программировать
т.е. строить управляющие блоки, вычислять, создавать свои форматы и автоматы. Поэтому больше "обученных" так и остаются на написании программных примитивов, остальная небольшая часть учится этому своим умом или подглядывает как это делают компиляторы (т.к. для ЯВУ есть всё таки ряд классических и не классических книг по собственно решению задач). Чего толку то от того будет у тебя картинка на окошке или нет, если программа ничего полезного не делает - не ищет, не обрабатывает, не вычисляет, не автоматизирует и т.п. Что это за агрегат то такой? Не агрегат это - а коробка от агрегата.

Всё думаю, кто наконец начнёт хоть Кнута адаптировать к x86, у него всё таки ассемблер. Просто прорешать его задачки для x86 и переделать исходники программ под него.


Дата: Сен 11, 2003 18:16:10

The Svin
Я согласен, Абель это геморой для новичка, когда я его первый раз читал, кроме как что эта книга об ассемблере, я ничего не пронял. Но зато позже, когда я перичитал, и Зубкова и Юрова и Финогенова, Абеля я читал в захлеб. Это было что-то...


Дата: Сен 11, 2003 20:03:05

Ни хрена себе! Абеля пинают? Да я его мурыжил в день по 6 часов! Вставал и мурыжил. Думал, какой я идиот, понять ничего не могу. Потом показалось - разобрался. Пошел к своему учителю. Поговорили... Решил бросить, потому что понял - безнадежен :) Однако через какое-то время вернулся. Да так и остался :)


Дата: Окт 4, 2003 23:47:24

Некоторые топики я убил, так что, если кого этим обидел, прошу не сердиться.


Дата: Окт 5, 2003 14:36:38

KiNDeR

Ну вот ведь всё испортил, всего-то нужно было сдвинуть строчки(те что
были не ровно) на пару пробелов и всё было бы ровно, и не менять
шрифта :(


Дата: Окт 5, 2003 16:29:40

Asterix
Потом истправлю неровности :))


Дата: Окт 5, 2003 19:08:53 · Поправил: Asterix

Пусть будет так, только не меняй шрифт, потому что никакой другой
с италиком не катит как Times New Roman.


Дата: Окт 5, 2003 21:59:37

Посмотрели бы вы на книгу Н.Шалаева и Е.Осина вы бы ужаснулись, а вот некоторые (типа меня) именно по таким книгам ассемблер и учили...


Дата: Окт 8, 2003 19:59:12 · Поправил: Sk. Inc.

KiNDeR
Напиши, что у всех дисков с MSDN'ом CRC32 должна быть FFFFFFFF. Что бы люди могли быть уверены, что они скачали образы без ошибок.
Справочник по API, где взять... Страница 2
Справочник по API, где взять... Страница 3


Дата: Окт 9, 2003 11:26:29

Лично начинал с Финогенова, причём где он ориентируеться на DOS, чудесная книга. Потом был учебник, справочник Юрова (новичку нужны небльшие простые примеры, в которых хорошо кометируеться каждая строчка кода), начал писать под Windu тут мне помогли туториалы Iczeliona, а также пакет Masm32 (куча примеров, хороший набо процедур и макросов). Читал тукже книгу Пирогова, но в не материала очень мало, но может навичок что нибудь и возмёт (авось втрое издание будет получше). Хотел бы прочитать Абеля, но где его взять?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.037