реклама на сайте
подробности

 
 
> Нюансы в преобразовании ASM инструкций в двоичный
wanderlust
сообщение Nov 6 2007, 13:05
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 25-08-07
Пользователь №: 30 056



Здравствуйте.

Пробую разобратся с сабжем. И тут у меня возник вопрос следующего типа.
Есть 2 комманды :
1) ADD R0, R0, R0;
2) ADD R0, R0, LSL #0
Если я пробую их записать в двоичной форме, согласно ARM Architecture Reference Manual, у меня получается, что они идентичны бит в бит.
т.е. Код операции у них одинаковый (ADD или 0000); Rd и Rs также нули. Меня смущает запись в параметре Operand2. Согласно вышеуказаному документу Operand2 для первого случая состоит из битов [11:4], которые забиты нулями и поля Rm (4 биты), куда я полагаю вносяться также нули. Operand2 для второго случая состоит из поля shift_imm (5 битов), трёх битов забитых нулями и поля Rm (4 биты), куда как я понимаю тоже надо записать нули... Вот тут я и стопорюсь. Что не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Nov 6 2007, 15:04
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Согласно файлу arm7tdmi.pdf (стр. 52)
1. Оп-код команды ADD = 0100
2. Вторым операндом может быть регистр со сдвигом (8 типов сдвигов и 5 бит = значение сдвига) или непосредственное число со сдвигом.

Формат сдвига описывается на стр. 54. Он может быть непосредственным или взятым из другого регистра.
Короче, второй операнд всегда (!) сдвигается, даже если в команде он опущен.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
wanderlust
сообщение Nov 7 2007, 06:14
Сообщение #3





Группа: Участник
Сообщений: 9
Регистрация: 25-08-07
Пользователь №: 30 056



Цитата(GetSmart @ Nov 6 2007, 17:04) *
Формат сдвига описывается на стр. 54. Он может быть непосредственным или взятым из другого регистра.
Короче, второй операнд всегда (!) сдвигается, даже если в команде он опущен.

Распишите пожалуйста эти комманды в двоичной форме, для всех 32-х бит. Хочу сверить со своим вариантом.
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 7 2007, 07:48
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(wanderlust @ Nov 7 2007, 09:14) *
Распишите пожалуйста эти комманды в двоичной форме, для всех 32-х бит. Хочу сверить со своим вариантом.

Правильнее будет, если Вы распишете, а другие сравнят со своим вариантом, если им это будет интересно.
Рекомендую перечитать ARM Architecture Reference Manual (у меня выпуск E), страницы A5-8 и A5-9. Мне кажется, там всё исчерпывающе описано.
Go to the top of the page
 
+Quote Post
wanderlust
сообщение Nov 7 2007, 08:57
Сообщение #5





Группа: Участник
Сообщений: 9
Регистрация: 25-08-07
Пользователь №: 30 056



Цитата(scifi @ Nov 7 2007, 09:48) *
Правильнее будет, если Вы распишете, а другие сравнят со своим вариантом, если им это будет интересно.

Прошу прощения, вы правы.
Итак:
команда ADD R0, R0, R0
код операции ADD 0100
поле S 0
поле Rn 0000
поле Rd 0000
поле Rm 0000
поле cond 0000


команда ADD R0, R0, LSL R0
код операции 0100
поле S 0
поле Rn 0000
поле Rd 0000
поле shift_imm 00000
поле Rm 0000
поле cond 0100

так?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 7 2007, 10:09
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(wanderlust @ Nov 7 2007, 11:57) *
команда ADD R0, R0, LSL R0
код операции 0100
поле S 0
поле Rn 0000
поле Rd 0000
поле shift_imm 00000
поле Rm 0000
поле cond 0100

так?

Нет, не так. Во-первых, команда должна быть записана так: ADD R0, R0, R0, LSL R0. Во-вторых, почему это у Вас изменилось поле cond? Изменится только нулевой бит поля shift Operand2, т.к. величина сдвига берется из регистра.

Код
ADD    R0, R0, R0            e0800000
ADD    R0, R0, R0, LSL R0    e0800010
Go to the top of the page
 
+Quote Post
wanderlust
сообщение Nov 7 2007, 10:23
Сообщение #7





Группа: Участник
Сообщений: 9
Регистрация: 25-08-07
Пользователь №: 30 056



Цитата(aaarrr @ Nov 7 2007, 12:09) *
Нет, не так. Во-первых, команда должна быть записана так: ADD R0, R0, R0, LSL R0. Во-вторых, почему это у Вас изменилось поле cond? Изменится только нулевой бит поля shift Operand2, т.к. величина сдвига берется из регистра.

Код
ADD    R0, R0, R0            e0800000
ADD    R0, R0, R0, LSL R0    e0800010

Извените, не тот пример... Я имел ввиду ADD R0,R0, LSL #0
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 7 2007, 10:35
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(wanderlust @ Nov 7 2007, 13:23) *
Извените, не тот пример... Я имел ввиду ADD R0,R0, LSL #0

Т.е. ADD R0, R0, R0, LSL #0. Тогда никакого отличия от ADD R0, R0, R0 не будет, о чем уже писали.
Go to the top of the page
 
+Quote Post
wanderlust
сообщение Nov 7 2007, 11:14
Сообщение #9





Группа: Участник
Сообщений: 9
Регистрация: 25-08-07
Пользователь №: 30 056



Цитата(aaarrr @ Nov 7 2007, 12:35) *
Т.е. ADD R0, R0, R0, LSL #0. Тогда никакого отличия от ADD R0, R0, R0 не будет, о чем уже писали.

Т.е. в двоичном представлении они будут идентичны? А каким образом тогда отделить
ADD R0, R0, R1
и
ADD R0, R0, R1 LSL #0 ?
Я так понимаю они также будут идентичны? Но ведь это ж разные комманды!
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 7 2007, 11:55
Сообщение #10


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(wanderlust @ Nov 7 2007, 14:14) *
Т.е. в двоичном представлении они будут идентичны? А каким образом тогда отделить
ADD R0, R0, R1
и
ADD R0, R0, R1 LSL #0 ?
Я так понимаю они также будут идентичны? Но ведь это ж разные комманды!

1. R0=R0+R1
2. R0=R0+R1<<0 или R0=R0+R1
biggrin.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 06:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016