Arm 指令的单总线指令

One Bus Instructions for Arm Instructions

我目前正在尝试使用 ARM 处理器在给定每个时钟周期的情况下找出一条指令。我已经两次被介绍到这些概念,但还没有找到能正确教授这些概念的人。目前我正在尝试找出说明:

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

而且我需要确定机器码,然后在一台总线机器上调度上面的指令。

感谢任何帮助!

机器码

The ARM Architecture Reference Manual 指定指令的机器码。 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, 鑫
    将指令中的立即数 (#2) 放入 X
  2. R1out,ALUsll,阴
    把R1的值放到总线上,告诉ALU移位,结果存入Y
  3. 你,R0in 将结果存入R0

为下一条指令推进 PC

  1. PCout、SetXto2、ALUadd、阴
  2. 你,PCin

您可以使用这些相同的方法来确定任何其他 ARM 指令的机器代码转换和单总线调度。