一、cpu0介绍
cpu032位架构16位通用寄存器,协处理器和其他特殊寄存器
(1)通用寄存器
全局指针寄存器:"Global Pointer register"(全局指针寄存器)是一个在某些处理器架构中存在的专用寄存器,它的主要作用是提供一个基准点(base point)以便高效地访问全局变量和静态数据。这个寄存器通常用于存储一个指向全局数据区(global data area)的固定地址,这样就可以使用相对于这个寄存器的偏移量来访问那些数据,而不是使用完整的32位或64位的地址。
帧指针寄存器:Frame Pointer register(帧指针寄存器)是一个在计算机架构中常见的寄存器,用于帮助在函数调用期间管理栈帧。它通常存储了当前函数的栈帧的起始地址。在函数调用期间,函数的局部变量和其他局部数据都存储在栈上。当一个函数被调用时,栈指针寄存器(Stack Pointer register)指向栈的当前顶部。为了访问局部变量,我们可以使用栈指针加上一个偏移量。然而,在一些情况下,栈指针可能会在函数调用过程中发生变化,例如在递归调用或多线程程序中。Frame Pointer register的作用是提供一个固定的参考点,用于访问函数的局部变量和其他局部数据,即使栈指针发生变化。它在函数调用开始时保存当前栈帧的起始地址,并在需要时作为参考点进行偏移计算。
栈指针寄存器:Stack Pointer register(栈指针寄存器)是一个在计算机架构中常见的寄存器,用于跟踪栈的顶部或当前栈帧的位置。栈是一种常见的数据结构,用于存储临时数据、函数调用信息和局部变量。栈指针寄存器保存了栈的当前顶部地址,它可以随着栈的变化而自动更新。在函数调用期间,栈指针寄存器用于分配和释放函数调用所需的内存空间。当一个函数被调用时,栈指针寄存器会向下移动,为新的栈帧分配空间。在函数返回时,栈指针寄存器会向上移动,释放当前栈帧所占用的空间。栈指针寄存器还用于访问函数的参数和局部变量。通过在栈指针寄存器的基础上添加偏移量,可以定位到特定的参数或局部变量的存储位置。总而言之,栈指针寄存器是在函数调用期间管理栈的关键寄存器。它跟踪栈的顶部或当前栈帧的位置,并用于分配和释放内存空间以及访问函数的参数和局部变量
Link Register (LR)是一个寄存器,用于存储函数的返回地址。当函数被调用时,调用指令会将函数的返回地址保存到LR寄存器中。然后,函数执行过程中可能会修改LR寄存器的值,以便在函数返回时能够正确地返回到调用点。
Status Word Register (SW)是一个特殊的寄存器,用于存储和表示处理器的状态信息。它通常由硬件或操作系统维护,并用于记录和监控处理器的状态。
(2)协寄存器
(3)特殊寄存器
指令寄存器:Instruction Register (IR)是一个寄存器,用于存储当前正在执行的指令。当处理器执行指令时,会将指令从内存中取出并存储到IR寄存器中,然后对该指令进行解码和执行。
内存地址寄存器:Memory Address Register (MAR)是一个寄存器,用于存储要访问的内存地址。当处理器需要读取或写入内存中的数据时,它会将要访问的内存地址存储到MAR寄存器中。
内存数据寄存器:Memory Data Register (MDR)是一个寄存器,用于存储从内存中读取或将要写入内存的数据。当处理器执行读取或写入内存的操作时,它会将数据存储到MDR寄存器中或从MDR寄存器中获取数据。
高位乘法结果寄存器:"High part of MULT result" 是指乘法运算的结果的高位部分。在某些处理器中,乘法操作的结果可能会超过一个寄存器的容量,因此需要将结果分为高位部分和低位部分进行存储。低位同理。
cpu0有三种指令类型:A、L、J
A型和算数有关、L型和内存有关、J型和控制流有关
Cpu0有两个ISA,第一个ISA- i是采用ARM CMP指令的cpu032I;第二个ISA-II是cpu032II,它采用了Mips的SLT指令。cpu032II包含了所有的cpu032I指令集,并增加了SLT、BEQ、…,指令