当前位置: 首页 > news >正文

MIPS-32架构(寄存器堆,指令系统,运算器)

文章目录

  • 0 Preview:
  • 寄存器
    • 32通用
      • 0 $zero
      • 1 $at
      • 2—3 \$v0-$v1
      • 4—7 \$a0-$a3
      • 8—15 \$t0-$t7
      • 16—23 \$s0-$s7
      • 24—25 \$t8-$t9
      • 26—27 \$k0-$k1
      • 28 $gp
      • 29 $sp
      • 30 $fp
  • 指令系统
  • 运算
  • 存储器

0 Preview:

MIPS架构有32位版本和64位版本,本文介绍32位版本

寄存器

正如笔者曾说,窃以为学习一款架构,首先应该学习的就是寄存器堆,会用寄存器堆,基本就能汇编语言编程,而且寄存器堆也是制作编译器的关键。

  • 32个寄存器
  • 3个特殊寄存器

每个寄存器都是32bits,也就是一个word

32通用

首先通过这张表格总览:
MIPS32个通用寄存器概览

0 $zero

the constant value zero, 零号寄存器,编号为0,存储的值也永远为0,主要用于在一些指令中起辅助作用,实现复制、掩码等功能。

例1.实现分支:
在这里插入图片描述

1 $at

保留寄存器,用于处理32位立即数

2—3 $v0-$v1

values,用于保存函数返回值

4—7 $a0-$a3

用于保存函数的前四个参数,过程调用时不用保存,但如果是嵌套过程(即递归)就需要保存

8—15 $t0-$t7

temporaries, 用于存放一些临时产生的计算的中间结果,调用子过程的话不用保存

16—23 $s0-$s7

saved values,编译期将程序中的那些有名变量保存在 s 0 − s0- s0s7中,调用其他过程的话需要压栈保存这些寄存器的值

24—25 $t8-$t9

t 0 − t0- t0t7的扩充,

26—27 $k0-$k1

saved for OS kernel ,用于异常处理,

28 $gp

global pointer 全局指针,存放一个地址,指向内存中静态区(也称全局区)的中间位置,用于定位整个静态区

29 $sp

stack pointer 栈指针,存放栈顶位置,也就是内存中栈区的顶部位置,也就是栈区的地址最小的位置(栈区是栈底到栈顶地址逐渐减小)

30 $fp

frame pointer,

指令系统

掌握了各个寄存器的功能之后我们就可以学习指令系统并进行汇编编程

MIPS指令系统,按照寻址方式可以分为5种:

  • 基址寻址
  • 立即数寻址
  • 直接寻址
  • PC相对寻址
  • 伪直接寻址

运算

(TODO)

存储器

(TODO)


http://www.mrgr.cn/news/96532.html

相关文章:

  • 第三次作业
  • Epub转PDF软件Calibre电子书管理软件
  • LLM实践(二)——基于llama-factory的模型微调
  • mybatis里in关键字拼接id问题
  • GOF23种设计模式
  • 从Web到桌面:深入解析Electron的技术架构与应用实践
  • RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝
  • Docker实现MySQL主从复制配置【简易版】
  • AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion 论文阅读 ECCV
  • UE5 学习笔记 FPS游戏制作30 显示击杀信息 水平框 UI模板(预制体)
  • .js项目编译成.exe程序(交叉编译全过程整理)
  • Docker使用ubuntu
  • 浅析车规芯片软错误防护加固的重要性
  • 设计模式之适配器模式(二):STL适配器
  • 房贷计算器
  • 验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示
  • C++ 继承:面向对象编程的核心概念(二)
  • Dust3r、Mast3r、Fast3r
  • docker-compose部署prometheus+grafana+node_exporter+alertmanager规则+邮件告警
  • 逆向--ARM64汇编