coolibin 0 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба подскажите, что делает вот такая команда LDR R2, =0xC00FE1 ? мне с первого взгляда показалось, что в регистр загружается содержимое памяти по адресу 0xC00FE1, но такого адреса нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lotor 0 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба подскажите, что делает вот такая команда LDR R2, =0xC00FE1 ? мне с первого взгляда показалось, что в регистр загружается содержимое памяти по адресу 0xC00FE1, но такого адреса нет. В регистр загружается именно значение, почитайте тут например. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба Это псевдокоманда загрузки константы в регистр (т.е. она загрузит в R2 число 0xC00FE1). На деле же ассемблер заменяет её на LDR R2, [PC, #xx]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость tolikpuhovich 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба подскажите, что делает вот такая команда LDR R2, =0xC00FE1 ? мне с первого взгляда показалось, что в регистр загружается содержимое памяти по адресу 0xC00FE1, но такого адреса нет. Почитайте в руководстве на среду, в которой работаете, про assemler pseudo-instructions. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба А если операнд будет "в ширину", то в R2 загрузится значение по адресу, значение которого равно адресу) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
coolibin 0 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба дело в том, что про псевдо инструкции я читал, но я так и не понял что к чему) может кто нибудь объяснить т. с. на пальцах, что все таки делает данная инструкция? LDR R2, [PC, #xx] что заместо хх ставить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба что заместо хх ставить? Смещение относительно текущего адреса инструкции с учетом конвейера (т.е. на деле PC указывает на 2 инструкции вперед относительно текущей). Но лучше пусть ассемблер ставит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
coolibin 0 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба честно, я вообще ничего не пойму)) давайте по порядку, я в иде дизассемблировал прошивку проца аля ARM7TDMI, обнаружил кучу инструкций типа LDR R2, =0xC00FE1, меня интересует, что будет происходить в результате выполнения именно этой команды? в R2 будет загружено число 0xC00FE1? или число по несуществуещему адресу 0xC00FE1? или еще что то? я буду оч благодарен если кто нибудь популярно объяснит)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость tolikpuhovich 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба дело в том, что про псевдо инструкции я читал, но я так и не понял что к чему) может кто нибудь объяснить т. с. на пальцах, что все таки делает данная инструкция? LDR R2, [PC, #xx] что заместо хх ставить? Загрузить в регистр константу можно двумя способами: 1. Командой MOV 2. Командой LDR Одной командой MOV загрузить любое значение нельзя. Можно только такое, которое получается циклическим сдвигом любой 8-ми разрядной константы вправо на четное число бит. Если этого сделать нельзя - можно загрузить константу в несколько приемов (MOV + еще какая-нибудь data-processing команда с еще одним непосредственным операндом). Либо можно разместить константу (в секции DATA), недалеко от текущего кода, и загружать ее в регистр командой LDR, используя в качестве базовой части адреса текущее значение PC(R15), а смещение задавая непосредственным операндом. Чтобы избавить программиста от этого геморроя, введена псевдо-команда LDR. Программист просто указывает, что необходимо загрузить в регистр такую-то константу. Программа-ассемблер сама по ходу дела решает как это лучше сделать - через MOV или через LDR (вместо псевдо-каманды вставляет подходящую инструкцию, если надо LDR - добавляет константу в секцию DATA). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 3 мая, 2012 Опубликовано 3 мая, 2012 · Жалоба LDR -- не псевдокоманда, не вводите народ в заблуждение. Это самая что ни на есть обычная команда, загружающая в регистр содержимое некоторой ячейки памяти. Запись же вида LDR R0, =1234 говорит транслятору ассемблера, что надо где-то в памяти выделить местечко под константу 1234, а здесь обеспечить её загрузку в R0. Сама же команда в действительности примет вид LDR R0, [PC, #смещение], где смещение вычисляется, исходя из адреса этой команды и адреса константы. При выполнении процессор прибавит к текущему значению PC значение смещения, после чего прочитает из памяти слово, лежащее по получившемуся адресу, и занесёт его в R0. честно, я вообще ничего не пойму)) давайте по порядку, я в иде дизассемблировал прошивку проца аля ARM7TDMI, обнаружил кучу инструкций типа LDR R2, =0xC00FE1, меня интересует, что будет происходить в результате выполнения именно этой команды? в R2 будет загружено число 0xC00FE1? или число по несуществуещему адресу 0xC00FE1? или еще что то? я буду оч благодарен если кто нибудь популярно объяснит)) Будет загружено указанное число. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
coolibin 0 4 мая, 2012 Опубликовано 4 мая, 2012 · Жалоба вот сейчас все более менее понятно, благодарю! у меня еще один вопрос, есть код: LDR R1, =0xC0228C LDRB R0, [R1] я так понимаю здесь загружаеться в переменную R0 один байт хранящийся по адресу 0xC0228C. только такого адреса нет в программе и переферия имеет немного другие адреса? как это можно объяснить? может ли это быть связано, например, с внешним eeprom? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 4 мая, 2012 Опубликовано 4 мая, 2012 · Жалоба может ли это быть связано, например, с внешним eeprom? Вряд ли. Вы бы название процессора огласили, код которого разбираете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
coolibin 0 4 мая, 2012 Опубликовано 4 мая, 2012 (изменено) · Жалоба точно не помню, помоему этот - http://www.chipfind.ru/datasheet/micronas/cdc3272gc.htm из диаграммы я понял, что это RAM, но я могу ошибаться Изменено 4 мая, 2012 пользователем coolibin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 4 мая, 2012 Опубликовано 4 мая, 2012 · Жалоба Да, это RAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
coolibin 0 4 мая, 2012 Опубликовано 4 мая, 2012 · Жалоба спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться