`
isiqi
  • 浏览: 16500719 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

mips处理器学习笔记

阅读更多

摊上了移植bootloader和OS的事情,没办法,得把mips工作机制弄明白了才能干好啊。今天托我家狗狗了买了本 《see mips run》。就用它为主了。争取用一个月的时间走一遍。同时把学习笔记和心得记录到这里。本篇为第一章。从mips体系结构开始。


一.mips汇编语言
1.借助c预处理器,在汇编代码中避免使用寄存器编号。尽量使用寄存器名称。
2. 在一个单词后加 ":"表示这是个标号,标号可以包含各种字符,以及定义代码入口点和指定数据段的存储地址。
/* this is a comment */
# so is this
entrypoint: #that is a label
addu $1,$2,$3 #(regisers) $1 =$2+$3
3. 许多指令是3 个操作数,目的寄存器在左边(和intel的x86相反的)。
目前知道这些就行了。


二 寄存器的特点
1. 有32个通用寄存器可供编程使用:$0 -$31.其中两个寄存器特殊:
$0 无论存入什么,总是返回0.
$31 被常规子程序调用指令(jal)用来保存返回地址。注意:尽管寄存器调用指令(jalr)可以用任何寄存器存放返回地址,但不建议使用$31以外的其他寄存器。
2. 其他方面,所有寄存器都是一样的,可以在任何指令中以相同的方式使用。
3. jal 指令返回地址是下例第三行指令,而不是气候的那条指令。
.........
jal printf
move $4,$6
xxx #return here after call
紧跟在调用指令后面立即执行的指令(move)称做调用的延迟槽。
4. hi和lo保存计算结果。它们不是通用寄存器,且只能用于乘和除的操作。但mips定义了一些指令可以往hi和lo 里存入任何值。
5. 浮点数处理和具体的实现有关。可以看看godson的相关文档。
6. 寄存器的习惯命名和用法。
7. 寄存器约定的汇编程序名称和用法。
at:这个寄存器由编译器生成的复合指令使用。没完全懂。
v0,v1:用来存放子程序(函数)的非浮点的结果或返回值。如果两个寄存器不够存放需要返回的值,编译器会通过内存来完成。
a0-a1:用来传递前4个非浮点参数给一个子程序,并非绝对。
s0-s8:习惯上,子程序必须保证其中的值在调用前后保持不变。那有两种情况,要么在子程序中不使用它,要么调用前后把他们保存在堆栈中并在函数退出时恢复。这使他们非常适合做寄存器变量或保存那些在一次子程序调用过程中需要保持不变的值。
ko-k1: 为操作系统陷入/中断处理保留使用。可以使用他们而不恢复原来的值。
gp: 如果存在一个全局指针,它将指向静态数据区中的一个运行时临时决定的地址。不明白
sp: 上下移动栈指针需要明确的指令,因此mips代码通常通常只在子程序入口或出口处调整栈指针,这应该由被调用子程序实现。在子程序入口点,sp被调整指向栈底部,编译器可以通过一个sp中的便宜地址访问栈里的变量。
fp: 帧指针,也称做 s8。若子程序想要在运行时候动态的扩展栈的大小。fp 将用以跟踪栈变换的情况。c语言中的alloca()就是利用了fp来动态的调整栈的。
ra: 在任何子程序的入口点。返回地址存放在ra寄存器中。所以子程序通常都以 “jr ra”指令结尾。当一个子程序需要调用其他子程序必须先存储 ra时,通常存放在栈中。


三 寻址方式
加载和存储。任何载入和存储机器指令都可以写成:
lw $1,offset($2)
可以使用任何寄存器作为目的操作数或源操作数。偏移量是个有符号的16位数。程序使用rd与偏移量之和载入地址。


四 存储器和寄存器中的数据类型
1. 整数类型数据
2.未对齐的加载和存储。
3,存储器中的浮点数据。


五 汇编语言的合成指令。
汇编器对汇编程序员的帮助有下:
1. 一个32位的立即数加载:可以在代码中加载任何数据,汇编器将会将其拆开为两条指令,分别是在加载数据的前半部分和后半部分。
2. 从一个内存地址加载:可以加载一个内存变量。汇编器会把这个变量地址的高位放入一个暂时的寄存器中,然后将低位作为一个加载的偏移量。
3.对内存变量的快速访问。利用gp。
4.更多类型的跳转条件:汇编器通过对两个寄存器的算术测试来合成一系列的条件跳转。
5.简单或不同形式的指令:一元操作。如 not.neg sub.还可以用两个操作数的方式表示一个三操作数的指令。
6. 隐藏跳转延迟槽。
7.隐藏加载延迟:如果汇编器检测到一条指令试图使用上一条加载指令的结果。它会转移代码。早期的mips中,采取的是加入一条nop.
8.没对齐的数据传送。
9.其他流水线的矫正。
10.其它的优化。


六 基本地址空间
32位cpu的地址空间划分:
kuseg 0x00000000-0x7fffffff(低端2G):用户模式下可用的地址。分为有MMU无MMU两种情况。如果希望代码在两者之间具有兼容性,最好不使用这片区域。
kseg0 0x80000000-0x9fffffff(512M):只需把最高位清零,这些地址就变为物理地址。然后把他们连续映射到物理内存中512M大小的低字段(0x00000000-0x1fffffff内)。通常通过快速缓存对这段内存区域访问。因此在cache被正确初始化之前,不使用这片地址。通常在无MMU的系统中,存放大多数程序和数据,有MMU的系统中,操作系统会存放在这个区域。
kseg1 0xA0000000-0xbfffffff(512M):这个区域不经过cache存取(uncached)。这块是唯一在系统重启时候能正常访问的地址空间。入口向量是0xbfc00000会在这个区域的原因了。
kseg2 0xc0000000-0xfffffff(1G):这段地址空间只能在核心态下使用并且经过MMU的转化。在MMU没有设置好之前,不能对它访问。
今天就写到这里,做为mips的一些基本知识。

分享到:
评论

相关推荐

    32位MIPS处理器设计

    在学习这个主题时,可以参考“2012011250_熊志伟_32位MIPS处理器设计.pdf”文档,这可能包含了详细的设计报告或课程笔记。"ReadMe.txt"可能提供了关于课程资料的使用说明。"pipeline_工程文件"、"1_2_ALU_another"、...

    See MIPS Run Linux (2nd Edition) 中文版

    - **1.4.1 R2000与R3000**:介绍这两款早期MIPS处理器的技术特点及应用场景。 - **1.4.2 R6000系列**:分析R6000系列处理器相对于前代产品的改进之处。 - **1.4.3 MIPS CPU核心**:深入探讨MIPS处理器的核心架构...

    Migrating from MIPS to ARM

    MIPS处理器广泛应用于网络、通信和消费电子产品中。 从MIPS迁移到ARM,需要考虑很多方面,包括但不限于指令集的差异、编程模型、开发工具链、性能优化以及系统兼容性问题。这本书通过对比MIPS和ARM的架构特点,帮助...

    全国计算机等级考试三级网络技术学习笔记(全).doc

    学习笔记中还提到了Intel的处理器发展,从8080到8088,再到奔腾,展示了处理器技术的不断进步。奔腾芯片的这些特性使其在台式机和笔记本市场中占据了重要的位置。 总结来说,这篇全国计算机等级考试三级网络技术的...

    STM32学习笔记

    STM32学习笔记主要聚焦于STM32微控制器的选用理由和初步开发流程。STM32是由意法半导体(STMicroelectronics)生产的一系列基于ARM Cortex-M3内核的微控制器,其特点是拥有丰富的外设选项和高效能,适合各种嵌入式...

    gem5学习笔记.pdf

    Gem5 学习笔记 Gem5 是一个开源免费的处理器开发设计工具,由 Michigan 大学的 m5 和 Wisconsin 大学的 GEMS 合并而成。它可以用于开发各种模型,包括片上 IP 模型、ISA 指令集 decoder 模型和 ruby 的 memory 模型...

    u-boot-1.1.6学习笔记

    ### U-Boot 1.1.6学习笔记详解 #### 目录结构解析 U-Boot(Universal Boot Loader)作为一款广泛使用的嵌入式设备引导加载程序,其1.1.6版本的目录结构体现了其高度模块化和可移植性的设计原则。下面详细解析U-...

    pmon学习笔记(更新版本)

    ### pmon学习笔记(更新版本) #### start.S 在计算机启动过程中,`start.S` 文件是CPU执行的第一段代码,这段代码通常用汇编语言编写,对于MIPS架构的处理器而言,它负责初始化CPU的基本寄存器并为后续操作准备...

    VxWorks 培训学习笔记(1)

    ### VxWorks培训学习笔记(1) #### 一、嵌入式开发涉及的内容 嵌入式开发是一项综合性强的工作,涉及到硬件与软件两个层面。在实际项目开发过程中,需要综合考虑多个方面,确保最终产品的稳定性和高效性。 #####...

    计算机组成原理学习笔记MD版本

    **计算机组成原理学习笔记** 计算机组成原理是计算机科学与技术领域的基础课程,它涉及计算机硬件系统的基本构造和工作原理。本笔记将详细讲解以下几个核心概念: 1. **数据表示与运算** - **二进制系统**: ...

    u-boot学习笔记

    ### U-Boot学习笔记 #### 一、U-Boot简介 U-Boot(Universal Boot Loader)是一种开源的、可移植的、支持多种处理器架构的BootLoader。它被广泛应用于嵌入式系统的启动加载过程中,能够支持包括但不限于ARM、Power...

    网络三级学习笔记 非常适合最后一个星期复习

    【网络三级学习笔记】主要涵盖了计算机发展历史、计算机分类、硬件和软件的相关概念以及软件开发流程,这些都是网络三级考试中的重要知识点。 计算机的发展阶段包括: 1. 大型机阶段:早期的大型计算机,主要用于...

    全国计算机等级考试三级网络技术学习笔记全.pdf

    全国计算机等级考试三级网络技术的学习笔记涵盖了广泛的计算机基础知识,包括计算机的特点、发展历程、应用领域以及硬件系统的构成。在备考过程中,考生需要对这些知识点有深入的理解。 计算机的主要特点包括减轻...

    全国计算机等级考试三级网络技术学习笔记全.doc

    全国计算机等级考试三级网络技术的学习笔记涵盖了计算机基础知识、硬件系统、计算机分类以及性能指标等多个方面的内容。以下是这些知识点的详细解析: 1. 计算机基础知识: - 计算机四特点:信息处理、普遍适用性...

    u-boot-1.1.6移植学习笔记

    ### U-Boot 1.1.6 移植学习笔记 #### 一、U-Boot 1.1.6 目录结构解析 U-Boot(Universal Boot Loader)是一款广泛应用于嵌入式系统的引导加载程序,它支持多种处理器架构及各种外围设备。U-Boot 1.1.6 的目录结构...

Global site tag (gtag.js) - Google Analytics