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

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


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

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

Выпуск № 516
от 14.08.2006, 05:05

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


Вопрос № 51556: Доброго времени суток, уважаемые эксперты! Рещил я написать антивирус к вирусу из 20-го выпуска рассылки Олега Калашникова. И написал. Почти. Не могу избавиться от одной ошибки: D:ASMmyprojantivir20.asm(36): error A2022: instruction operands ...
Вопрос № 51577: Здравствуите Уважаемые Эксперты ! У меня вопрос: в чем различие между командами OFFSET,ADDR и LEA Заранее спасибо...

Вопрос № 51.556
Доброго времени суток, уважаемые эксперты! Рещил я написать антивирус к вирусу из 20-го выпуска рассылки Олега Калашникова. И написал. Почти. Не могу избавиться от одной ошибки:
D:ASMmyprojantivir20.asm(36): error A2022: instruction operands must be the same size
D:ASMmyprojantivir20.asm(45): error A2022: instruction operands must be the same size
D:ASMmyprojantivir20.asm(55): error A2022: instruction operands must be the same size
D:ASMmyprojantivir20.asm(73): error A2022: instruction operands must be the same size
Помогите разобраться. Заранее спасибо.

Приложение:

Отправлен: 08.08.2006, 23:11
Вопрос задал: Macr0hard (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Пашка
Здравствуйте, Macr0hard!
;--------------------------------------------****************************************
Для того чтобы получить ответ с большим % правельности отправляйте не только код НО! и include-файлы, а так же название компилятора и компановщика + их версии.
;****************************---------------------------------------------------------------

Ниже идёт листиг вашей программы без include-вставок я их закоментировал. После компиляции исходника который идёт ниже ↓ + сборки его, ошибок обнаружено не было!

С, Уважением MnEm0niC.

"Да прибудет с вами сила..."

Приложение:

Ответ отправил: Пашка (статус: 1-ый класс)
Ответ отправлен: 09.08.2006, 01:15
Оценка за ответ: 5


Вопрос № 51.577
Здравствуите Уважаемые Эксперты !
У меня вопрос: в чем различие между командами OFFSET,ADDR и LEA
Заранее спасибо
Отправлен: 09.08.2006, 03:23
Вопрос задал: Денскевич Р (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Aliasman
Здравствуйте, Денскевич Р!

Честно говоря, незнаю такой команды "ADDR". Разберемся с остальными.
OFFSET - оператор получения смещения.
пример:
.data
pole dw 5
...
.code
...
mov ax, seg pole ;получение сегментной составляющей адреса
mov es, ax
mov dx, offset pole ;теперь в паре регистров es:dx полный адрес pole
...

LEA (Load Effective Address) - получение эффективного адреса (собственно, того же смещения) источника.
пример:
.data
mas db 10 dup (0)
.code
...
mov di, 4
lea bx, mas[di]
;или
lea bx, mas[4]
;или
lea bx, mas+4
...

Как видим они отличаются синтаксисом ("offset" используется совместно с командой передачи данных "mov": mov приемник, offset выражение. Синтаксис же команды "lea": lea приемник, источник), плюс команда "lea" потдерживает индексацию операнда, что позволяет более гибко организовать адресацию операндов.
Ответ отправил: Aliasman (статус: 1-ый класс)
Ответ отправлен: 09.08.2006, 05:38
Оценка за ответ: 5

Отвечает: All
Здравствуйте, Денскевич Р!

offset Оператор получения смещения выражения offset позволяет получить значение смещения выражения в байтах относительно начала того сегмента, в котором выражение опредеl 3;ено

LEA Назначение: получение эффективного адреса (смещения) источника
Данная команда является альтернативой оператору ассемблера offset. В отличие от offset команда lea допускает индексацию операнда, что позволяет более гибко организовать адрес ацию операндов.
ADDR это масмовский аналог offset, но тут я могу ошибаться(редко его использую)
Ответ отправил: All (статус: 1-ый класс)
Ответ отправлен: 09.08.2006, 07:23
Оценка за ответ: 5

Отвечает: Волков Павел Юрьевич
Здравствуйте, Денскевич Р!
offset - команда компилятора (МАSM, TASM), указывающая ему на замену переменной, в команде ассемблера, ее адресом (смещением, относительно начала сегмента).
В литературе называют оператором ассемблера или директивой.

addr - тоже команда компилятора (MASM), используется при вызове функции через макрос invoke, указывает на замену, в процессе компиляции, переменной ее адресом (смещением, относительно начала сегмента).

lea - команда процессора, выполняющая загрузку, в переменную-приемник, адреса переменной-источника (смещением, относительно начала сегмента).

При этом при использовании lea, источник - адрес переменной в памяти, приемник - регистр общего назначения.

Некоторые компиляторы (TASM v.4.1) заменяют инструкцию lea на mov, сокращая размер команды на байт, создавая идентичность использования lea r16/r32,m16/m32 и mov r16/r32, offset m16/m32.

---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 6-ой класс)
Ответ отправлен: 09.08.2006, 07:32
Оценка за ответ: 5

Отвечает: Brutaller
Здравствуйте, Денскевич Р!
В дополнение ко всему сказанному:
к сожалению не помню где читал, возможно даже на wasm.ru, о том, что ADDR можно применять в процедурах по отношению к локальным переменным, в то время как OFFSET с локальными переменными использовать нельзя.
Ответ отправил: Brutaller (статус: 2-ой класс)
Ответ отправлен: 10.08.2006, 22:29


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное