Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

Всё таки насчет меток не совсем понятно . Насколько я знаю метка будет означать по-другому опкод инструкции которая идет после неё , например :

Код: Выделить всё

metka: mov ebx,ecx
А если например у нас едут 2 и более инструкций после метки , то всё равно берется опкод только первой инструкции ???
Например :

Код: Выделить всё

xor ebx,ebx
mov ebx,metka


metka: mov ebx,ecx 
mov eax,ebx 
Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Да, ты очень сильно запутался! То что ты имеешь в виду это директивы DEFINE и MACRO, а метка это АДРЕС инструкции которая следует за ней.
Реклама
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

метка это АДРЕС инструкции которая следует за ней.
Ну :) Адрес инструкции по-другому же опкод ?
Получается которая ТОЛЬКО следует за ней (одна инструкция ? )
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

ОПКОД это код инструкции, число описывающее саму инструкцию, чтобы исполнительный блок процессора смог разобрать где в инструкции заданы операнды и что нужно делать.

Все равно микроконтроллеры сильно отличаются от процессоров, так что лучше не забивай себе голову аналогиями с инструкциями x86 процессоров. как минимум у AVR отсутствует аккумулятор, все регистры однобайтные и их 32 штуки причем 6 старших из них образуют пары и используются как индексные регистры X, Y и Z. Вся система инструкций состоит из ста с чем-то инструкций, большая половина которых являются частными случаями более универсальных.

ОпКод - это заимствованное с английского сокращение, которое если перевести на наш означает "код операции"
Реклама
Эиком - электронные компоненты и радиодетали
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

А ну тогда получается что метка - это адрес инструкции , а опкод получается указатель метки ?

Например :

Код: Выделить всё

metka: mov ecx,ebx 

mov cx, word[metka] ; то есть в младшую часть регистра ecx будет записан именно опкод инструкции , так ? 
И ещё такой вопрос : если мы инициализируем какие либо данные (db 8 dup (0) например) , то получается инициализация происходит сразу при объявлении ? А если db 8 dup (?) то инициализации не происходит ?

ЗЫ сейчас просто пока работаю с x86 процессором в защищенном режиме , на AVR не пишу пока прошивки
Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Тогда ты немного ошибся форумом... тут ведь по контроллерам.

Опкод - это часть кода инструкции. Никакого отношения к меткам он не имеет, ни прямого ни косвенного.
Вообще забудь это слово, оно нужно только чтобы разобрать двоичный код инструкций.

Когда ты используешь директиву DB и им подобные ты ничего не объявляешь! Ты просто в это место вставляешь двоичные данные. Все равно что писать инструкцию.

"DB 0xСD, 0x21" будет полностью эквивалентно записи инструкции "INT 21h" которая компилятором преобразуется именно в этот вид. кстати в этом случае опкод будет равен 0xCD, а 0x21 - операнд.

в часности директиву DB можно использовать для записи инструкций новых процессоров, о которых не знает компилятор, вводить массивы каких-либо данных и т.д.
Реклама
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

Вот ещё такой вопрос : получается регистр может сохранять как значения так и адрес ? Получается может выступать в роли указателя ? (регистры общего назначения например)

Тогда получается метка - это адрес на который она указывает , то есть адрес инструкции которая идет после неё , так ?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Да.
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

Ну у меня в книжке написано так :

Код: Выделить всё

metka: mov ebx,eax

mov cx,word[metka]
В регистр cx помещается опкод инструкции mov ebx,eax
(часто речь идет именно об опкодах а не адресах)
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Ты как всегда путаешь понятия. Да, она загрузит ОПКОД - т.е. ДАННЫЕ которые находятся по адресу МЕТКА.
Причем целое слово, 2 байта.
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

Но там же указатель ? Получается он загрузит не само значение которое "возвращает" инструкция (опкод) , а адрес (слово , старшие 2 байта) ?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Мне кажется ты рано взялся за ассемблер... квадратные скобки означают данные находящиеся по адресу внутри них. Процессор обратится к памяти по адресу МЕТКА возьмет там два байта, и вернет как результат.
Ему безразлично что там будет по этому адресу, какая-то инструкция или просто данные.

Перед тем как разбирать инструкции, разберись сначала со способами адресации, и как они записываются.
В таких вещах методика "пойму по ходу дела" не прокатывает - слишком быстро зарываешься в дебри и естественно ничего не можешь понять.
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

Тогда я не совсем понял разницы между этими двумя инструкциями :

mov ecx,ebx

mov ecx,[ebx]

Если мы командой mov пересылаем именно данные в первом случае из одного регистра в другой , то во втором мы делаем тоже самое что ли , присваиваем значение по-другому ? Или в первом случае мы присваиваем адрес регистра ebx ?
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение zero648 »

Это совсем разные команды:

mov ecx,ebx ; здесь присваиваем регистру ecx значение регистра ebx
mov ecx,[ebx] ; здесь присваиваем регистру ecx значение содержащееся по адресу содержащемуся в регистре ebx, т.е. ebx содержит адрес, по которому находится значение, которое будет загружено в ecx
Последний раз редактировалось zero648 Сб июл 21, 2012 23:00:23, всего редактировалось 2 раза.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6321
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

Стесняюсь спросить : чегой-то в теме про AVR съехали на Intel`овский ассемблер ? У них разные весовые категории.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение zero648 »

Дак это ..., без слез не взглянешь! :cry:
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Самое досадное, что народ не совсем понял разницу между микропроцессором в составе персонального компьютера, работающего под управлением опреационной системы (аппаратная реализация схемотехники и ее особенности, распределение ресурсов, в том числе и ОЗУ),
и нашими микроконтроллерами (или система на кристалле)...
Если копать ПК на том уровне, что и МК, да еще на ассемблере то прийдется изучать и bios и структуру (описание регистров, адресация, управление) всех СБИС в ПК входящих... :shock:
Для того надо соответствующие форумы искать, да и на основе какого асма? masm32 sdk? fasm? борландовский tasm или еще чего - там ведь вариантов весьма много (в отличии от AVRASM/AVRASM2 в avr studio или mpasm в mplab) :tea:
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

mov ecx,[ebx] ; здесь присваиваем регистру ecx значение содержащееся по адресу содержащемуся в регистре ebx, т.е. ebx содержит адрес, по которому находится значение, которое будет загружено в ecx
А ну всё понятно , получается мы читаем из регистра как из указателя , так ?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Читается содержимое ячейки памяти, адрес которой указан содержимым регистра ebx, (однако вот относительно какого сегментного регистра (ds, es, cs или sp - не помню, склерозумс - по умолчанию вроде адрес ячейки будет ds:ebx )
У avr таких заморочек нет в связи с структурными особенностями МК (раздельный доступ к памяти программ и памяти данных)
если мы читаем ПЗУ то неполным аналогом (нет сегментных регистров) будет LPM Rd,Z ну и нечто "поближе" у mega/xmega ELPM Rd,Z поскольку "примешался" RAMPZ (rampz:z)
если читаем внутреннее/внешнее ОЗУ команды ряда LD/LDD по адресу, определяемому содержимым регистровых пар Zh:Zl,Xh:Xl или Yh:Yl.
Говорят же - не в тех МК (не на том форуме) ответ ищем - на крайний случай создай отдельную ветку в этом же разделе (Микроконтроллеры и ПЛИС) или прицепись к темам по I8088/86 (наша кр1810вм88/кр1810вм86), I8080 ( КР580ВМ80) на крайний случай Z80 или MCS51! 8)
Не грузи народ интеловско-мелкософтовской идеологией - и так мозги "шипят" :beer:
Vendein_RaZoR
Сверлит текстолит когтями
Сообщения: 1158
Зарегистрирован: Ср июн 22, 2011 21:14:17
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Vendein_RaZoR »

Вот ещё последний вопрос :
А если например : mov ah,dh
то получается значение dh записывается по адресу со смещением ah ?
Ответить

Вернуться в «AVR»