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

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 850
от 12.09.2007, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 384, Экспертов: 28
В номере:Вопросов: 2, Ответов: 2


Вопрос № 101124: зндрастуйти :) я решил чуток поизучять асм и у меня есть вопрос inc edi or al, al jz loc_00416074 mov ecx, edi push edi dec eax repne scasb push ebp call dword ptr [esi+161f4h] or eax, eax ...
Вопрос № 101145: 1)как обьявляются переменные? 2)как обьявляются и описяваются функции? 3)как подключяются библиотеки?...

Вопрос № 101.124
зндрастуйти :) я решил чуток поизучять асм и у меня есть вопрос

inc edi
or al, al
jz loc_00416074
mov ecx, edi
push edi
dec eax
repne scasb
push ebp
call dword ptr [esi+161f4h]
or eax, eax
jz loc_004160b0
mov [ebx], eax
add ebx, 04h
jmp loc_00416091
вставьте коментарии к каждой строке(хочется узнать что это за операторы или что тут)
Отправлен: 06.09.2007, 23:08
Вопрос задал: Stachovskis valerijus henriko (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Stachovskis valerijus henriko!
Тяжело судить о смысле каждой команды из вырванного из контекста программы
куска дизассемблерного текста...
Можно только смутно догадываться, для чего они...

inc edi; в EDI очевидно хранится адрес последовательности байт, в которой потом будет искаться байт из AL, для чего инкрементируется - неясно, надо знать структуру последовательности байт
or al, al ; проверим на 0
jz loc_00416074 ; если 0, то ничего не делаем
mov ecx, edi ; непонятно, зачем в ECX адрес строки - там должна быть длина строки
push edi ; сохраняем в стеке адрес строки, где-то должно быть восстановлено
dec eax ; в строке значения с 0, для этого уменьшаем на 1
repne scasb ; ищем значение из AL в строке по адресу [EDI], ищем пока не найдем, либо пока не обнулится ECX
push ebp ; сохраним в стеке EBP, где-то должно быть либо восстановлено, либо удалено из стека как параметр
call dword ptr [esi+161f4h] ; вызов подпрограммы по адресу из таблицы по адресу 161f4h, индекс в регистре ESI
or eax, eax ; проверяем результат
jz loc_004160b0 ; если ноль, то уходим на указанный адрес (метку)
mov [ebx], eax ; иначе сохраняем результат
add ebx, 04h ; увеличиваем адрес, где что-то там сохраняется, для сохранения при последующих вызовах
jmp loc_00416091 ; очевидно, идем куда-то, возможно, для повтора операций

PS Боюсь, что, изучая дизассемблерный текст, весьма тяжело изучать ассемблер.
После моего ответа, наверняка, появится еще больше вопросов...
Рекомендую сначала изучить ассемблер на "нормальных" текстах, а уж потом
разбирать дизассемблерный текст.
---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 07.09.2007, 10:39
Оценка за ответ: 5


Вопрос № 101.145
1)как обьявляются переменные?
2)как обьявляются и описяваются функции?
3)как подключяются библиотеки?
Отправлен: 07.09.2007, 07:21
Вопрос задал: Stachovskis valerijus henriko (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Stachovskis valerijus henriko!

1)С помощью псевдокоманд определения переменных.
Псевдокоманда — это директива ассемблера, которая приводит к включению данных или кода в программу, хотя сама она никакой команде процессора не соответствует. Псевдокоманды определения переменных указывают ассемблеру, что в соответствующем месте программы располагается переменная, определяют тип переменной (байт, слово, вещественное число и т.д.), задают ее начальное значение и ставят в соответствие переменной метку, которая будет использоваться для обращения к этим данным.
DB —определить байт;
DW —определить 2 байта;
DD —определить 4 байта;
DF —определить 6 байт;
DQ —определить 8 байт;
DT —определить 10 байт.

2)Процедурой в ассемблере является все то, что в других языках называют подпрограммами, функциями, процедурами и т.д. Ассемблер не накладывает на процедуры никаких ограничений — на любой адрес программы можно передать управление командой CALL, и оно вернется к вызвавшей процедуре, как только встретится команда RET. Такая свобода выражения легко может приводить к трудночитаемым программам, и в язык ассемблера были включены директивы логического оформления процедур.
метка proc язык тип USES регистры; TASM
или
метка proc тип язык USES регистры;MASM/WASM
. . .
ret
метка endp

Все операнды PROC необязательны (описание операндов можно найти в книге см. ссылку).
3)С помощью директивы INCLUDELIB имя_файладиректива, указывающая компоновщику имя дополнительной библиотеки или объектного файла, который потребуется при составлении данной программы. Например, если используются вызовы процедур или обращение к данным, определенным в других модулях. Использование этой директивы позволяет не указывать имена дополнительных библиотек при вызове компоновщика.

ps:Скачайте книгу Зубкова
Удачи!
---------
И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Специалист)
Ответ отправлен: 07.09.2007, 11:59
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.58 от 10.09.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное