Инструкции за един автобус за инструкции за ръка

В момента се опитвам да разбера една инструкция, дадена на всеки тактов цикъл, използвайки ARM процесор. Вече два пъти се запознах с тези концепции и все още не съм намерил някой, който да ги преподава правилно. В момента се опитвам да разбера инструкциите:

1). LSR R0, R1, #2; 2). cmp R5, R6;

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

Всяка помощ се оценява!


person John Groves    schedule 16.02.2015    source източник
comment
Определянето на машинния код за инструкции е тривиално - защо съществуват асемблерите ;) echo 'lsr r0, r1, #2' | arm-none-eabi-as -al   -  person Notlikethat    schedule 16.02.2015


Отговори (1)


Машинен код

Справочното ръководство за архитектура на ARM посочва машинния код за инструкции. Страница A7-68 описва формата за LSR инструкция с незабавно въвеждане.

//I can't post an image because of low reputation
Bit - 15 14 13 12 11 | 10           6 | 5     3 | 2     0
Val -  0  0  0  0  1 |     immed_5    |    Rm   |   Rd

Syntax
LSR <Rd>, <Rm>, #<immed_5>
where:
<Rd> Is the destination register for the operation.
<Rm> Is the register containing the value to be shifted.
<immed_5> Specifies the shift amount, in the range 1 to 32. 
Shifts by 1 to 31 are encoded directly in immed_5.
A shift by 32 is encoded as immed_5 == 0.

С вашите инструкции, immed_5 = 00010, Rm = 001, and Rd = 000

Така че двоичната инструкция е: 00001 00010 001 000

или в шестнадесетичен: 0x0111.


Едно автобусно разписание

Целта на планирането на инструкция на машина с една шина е да се посочи кои регистри въвеждат данни в шината, кои регистри четат данни от шината и в какъв ред трябва да се случи това. Важно нещо, което трябва да запомните е, че само една стойност трябва да бъде поставена в автобуса в даден момент.

Ето пример за планиране с помощта на първата ви инструкция. Това използва X като ALU входен регистър и Y като ALU изходен регистър. Това също предполага, че ALUsll ще измести наляво стойността в шината със стойността, съхранена в X.

LSR R0,R1,#2

Вземете инструкцията в регистъра на инструкциите

  1. PCout, MARin, MEMread
    Достъп до мястото на паметта на текущата инструкция
  2. MDRlatch
    Заредете стойността от паметта в MDR
  3. MDRout, IRin
    Пуснете инструкцията в регистъра на инструкциите

Извършване на специфични за инструкции операции

  1. IRimmediateout, Xin
    Поставете незабавната стойност (#2) от инструкцията в X
  2. R1out, ALUsll, Yin
    Поставете стойността от R1 в шината, кажете на ALU да премести и запазете резултата в Y
  3. Yout, R0in Съхранявайте резултата в R0

Напреднете компютъра за следващата инструкция

  1. PCout, SetXto2, ALUadd, Yin
  2. Ти, PCin

Можете да използвате същите тези методи, за да определите превода на машинния код и планирането на една шина на всяка друга ARM инструкция.

person Bonsaigin    schedule 18.02.2015
comment
Благодаря ти. Беше ми трудно да разбера от каква помощ имах нужда в тези ситуации, но вие ме разбрахте. Благодаря ти - person John Groves; 20.02.2015