我是如何理解 ARM 架构的基本工作原理的;
有 15 个主寄存器,第 15 个 (r15) 是程序计数器 (PC)。
如果程序计数器指向一个特定的寄存器,那么你怎么能有一个运行超过 14 行的程序呢?
显然这不是真的,但我不明白你怎么能合并一个只有 15 个寄存器的大程序?我错过了什么?
我是如何理解 ARM 架构的基本工作原理的;
有 15 个主寄存器,第 15 个 (r15) 是程序计数器 (PC)。
如果程序计数器指向一个特定的寄存器,那么你怎么能有一个运行超过 14 行的程序呢?
显然这不是真的,但我不明白你怎么能合并一个只有 15 个寄存器的大程序?我错过了什么?
程序计数器指向内存,而不是另一个寄存器。
寄存器不存储程序代码。程序代码在主存中,程序计数器指向下一条指令在内存中的位置。
其他寄存器是高速位置,用于在应用程序处理期间存储临时或经常访问的值。
最简单的形式是程序(指令存储器)、数据存储器、堆栈存储器和寄存器。
ARM指令存储在指令存储器中,它们是一系列命令,告诉处理器要做什么。它们永远不会存储在处理器的寄存器中。程序计数器仅指向该指令,该指令只是一个命令,其基本形式具有操作码(操作码)和变量/文字..
所以发生的事情是从程序计数器指向的位置从内存中读取(获取)指令。它没有被加载到寄存器中,而是被解码的控制单元(即知道要执行什么操作,即 add、sub、mov 等)以及在哪里读取/存储其输入和输出。
那么要操作和存储的输入/输出在哪里呢?ARM架构是一种加载/存储架构,这意味着它对加载到其寄存器中的数据进行操作,即R1,R2 .. R7 ..etc ..寄存器可以被认为是所有输入和输出的临时变量存储。使用寄存器是因为它们非常快并且以与处理器频率相同的速度运行,而不是较慢的内存。
现在的问题是,如何首先用值填充这些寄存器?
这些值可以存储在数据存储器或堆栈存储器中,因此有将它们复制到这些寄存器的指令,然后是对它们进行操作并将值存储在寄存器中的指令,然后是其他指令将结果复制回记忆。一些指令还可以加载带有常量的寄存器。
Instruction 1 // Copy Variable X into R1 from memory
Instruction 2 // Copy Variable Y into R2 from memory
ADD, R3, R1, R2 // add them together
Instruction 3 // Copy back the result into Memory
我试图让它尽可能简单,有很多细节需要涵盖。需要书:)