|
Нюансы в преобразовании ASM инструкций в двоичный |
|
|
|
Nov 6 2007, 13:05
|
Группа: Участник
Сообщений: 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 биты), куда как я понимаю тоже надо записать нули... Вот тут я и стопорюсь. Что не так?
|
|
|
|
|
 |
Ответов
|
Nov 7 2007, 06:14
|
Группа: Участник
Сообщений: 9
Регистрация: 25-08-07
Пользователь №: 30 056

|
Цитата(GetSmart @ Nov 6 2007, 17:04)  Формат сдвига описывается на стр. 54. Он может быть непосредственным или взятым из другого регистра. Короче, второй операнд всегда (!) сдвигается, даже если в команде он опущен. Распишите пожалуйста эти комманды в двоичной форме, для всех 32-х бит. Хочу сверить со своим вариантом.
|
|
|
|
|
Nov 7 2007, 08:57
|
Группа: Участник
Сообщений: 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 так?
|
|
|
|
|
Nov 7 2007, 10:09
|
Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Nov 7 2007, 10:23
|
Группа: Участник
Сообщений: 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
|
|
|
|
|
Nov 7 2007, 10:35
|
Гуру
     
Группа: Свой
Сообщений: 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 не будет, о чем уже писали.
|
|
|
|
|
Nov 7 2007, 11:14
|
Группа: Участник
Сообщений: 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 ? Я так понимаю они также будут идентичны? Но ведь это ж разные комманды!
|
|
|
|
Сообщений в этой теме
wanderlust Нюансы в преобразовании ASM инструкций в двоичный Nov 6 2007, 13:05 GetSmart Цитата2) ADD R0, R0, LSL #0Вроде бы такой команды ... Nov 6 2007, 13:42 wanderlust Цитата(GetSmart @ Nov 6 2007, 15:42) Врод... Nov 6 2007, 14:36        aaarrr Цитата(wanderlust @ Nov 7 2007, 14:14) Я ... Nov 7 2007, 11:37         wanderlust Цитата(aaarrr @ Nov 7 2007, 13:37) Это од... Nov 7 2007, 11:57 GetSmart Тяжёлый случай. Nov 7 2007, 11:34
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|