Как узнать, что биты из половины слов (8 битов) должны быть сдвинуты в Rd (регистр назначения) в инструкции LDRH? - PullRequest
0 голосов
/ 07 апреля 2019

Я делаю h.w, в котором я должен сделать формат инструкции памяти и одиночный цикл пути данных для инструкции LDRH. После вычисления адреса (rn + extended imm12) мы получаем 32-битное значение, которое хранится в Rd, но какие 8 бит в 32-битном значении (двоичном) должны храниться в Rd (я знаю, что 8 бит будут сохранены в младшем конец Rd?

Также я работаю в Arm32 и рассматриваю это как пример LDRH Rd, [Rn, # imm12].

Вот вопрос

Рассмотрим инструкцию LDRH (загрузка полуслов) в ARM ISA. Формат инструкции следующий: LDRH Rd, [Rn, # imm12] Инструкция считывает 8 бит (1 байт) данных из адреса, указанного (непосредственное значение с расширенным Rn + 0), и сохраняет данные в виде 32-битное значение со знаком в расширенном регистре Rd.

(a) Укажите 32-битный формат инструкции для инструкции LDRH. Назовите формат, основанный на ваших знаниях архитектуры ARM. Четко обозначьте все поля инструкций и укажите размер каждого поля в битах.

(б). Измените процессор ARM с одним циклом на следующей странице назначения для реализации LDRH. Показать все необходимые изменения в пути к данным и нарисовать любые дополнительные управляющие сигналы, которые могут потребоваться для реализации инструкции. Пожалуйста, используйте другую цветную ручку / маркер (или другой шрифт и цвет линии, если вы предоставляете цифровое решение), чем цвета на диаграмме, чтобы маркерам было легче понять ваше решение.

1 Ответ

0 голосов
/ 07 апреля 2019

Как узнать, какие полусотни (8 битов) ...

... и сохранить данные в виде 32-битного значения с расширенным знаком в целевом регистре Rd.

В терминологии ARM " word " означает 32 бита, а " halfword " означает 16 бит.

Кроме того, инструкция LDRHне расширяет знак, но расширяет ноль.

Здесь описана инструкция LDRSB, а не LDRH.LDRSB знак расширяет 8 бит.

После вычисления адреса ... мы получаем 32-битное значение, которое сохраняется в Rd, но какие 8 бит в 32-битном ... должны быть сохранены?

Рассчитанный адрес не сохраняется ни в одном регистре.Адрес используется для адресации байта в ОЗУ (или в любом другом типе памяти).

Другими словами: рассчитанный адрес является адресом где-то в памяти.

Байт, сохраненный вэтот адрес будет прочитан.

Этот байт будет записан в младшие 8 битов регистра Rd.Поскольку инструкция расширяет значение, бит 7 значения считанного значения будет скопирован в биты 31 ... 8 Rd.(Предполагая, что мы говорим о LDRSB.)

Это сделано потому, что (как в десятичной системе) положительное число остается тем же самым, когда предшествует "ноль" цифр (в двоичных системах: биты) и в дополнении до двух.арифметическое отрицательное число остается неизменным при добавлении «единичных» битов:

decimal 12 = decimal 0000012
01100 = 000000001100 = decimal 12
10100 = 111111110100 = decimal -12

... и число интерпретируется как «отрицательное» число, если старший бит установлен при использовании дополнения до двух.

Инструкция LDRB будет увеличивать значение на ноль, что означает, что двоичное число интерпретируется не как двоичное число, а как положительное число без знака:

10100 = 000000010100 = decimal 20

Следовательно, LDRB будетпросто установите биты 31 ... 8 в ноль.

Для 16-битных инструкций (LDRH и LDRSH) будет прочитано два байта:

Байт по вычисленному адресу будетбыть прочитано в младшие 8 битов, а байт, следующий за ним, будет считан в биты 15 ... 8.Старший бит второго байта будет скопирован в биты 31 ... 16 в случае LDRSH;эти биты будут просто установлены в ноль в случае LDRH.

Пример:

R0 = 1234000 (decimal)

Content of the memory:
  Address 1234012: 9A (hexadecimal)
  Address 1234013: 7A (hex.)
  Address 1234014: BC (hex.)
  Address 1234015: DE (hex.)
  Address 1234016: 7E (hex.)

Program:
  LDRSB R1, [R0, #12]
  LDRSB R2, [R0, #13]
  LDRB R3, [R0, #12]
  LDRSH R4, [R0, #14]
  LDRSH R5, [R0, #15]
  LDRH R6, [R0, #14]

Results:
    R1 = FFFFFF9A
    R2 = 0000007A
    R3 = 0000009A
    R4 = FFFFDEBC
    R5 = 00007EDE
    R6 = 0000DEBC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...