MIPS介绍与MIPS汇编的常用指令

news/2024/12/4 7:46:27/

描述

CTF做题时会遇见MIPS汇编的题目,而我们接触的是8086汇编,IDA是不能反汇编的需要自己了解一些MIPS方面的知识;
1. List 1

在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

1. List 1.5

8086 CPU介绍

Intel 8086是一个由Intel于1978年所设计的16位微处理器芯片,是x86架构的鼻祖。

对于现今的机器来讲,8086CPU它已经属于古玩。但是,现在的任何一台PC机中的微处理器,只要是和 Intel兼容的系列,都可以8086的方式进行工作。可以将一个奔腾系列的微处理器当作一个快速的8086微处理器来用。整个奔腾PC的工作情况也是如此,可以当作一台高速的8086PC来用。

2. List 2

MIPS是(Microcomputer without interlocked pipeline stages)的缩写,含义是无互锁流水级微处理器。MIPS采用的是精简指令系统计算结构(RISC结构)(与之对应的:(复杂指令集)CISC结构)。RISC比CISC的设计更加简单,由于其授权费用低,被INTEL外的大多数厂商使用。同时在设计理念上MIPS强调软硬件协同提高计算机性能,并简化硬件设计。
MIPS 是最早的,最成功的RISC处理器之一,MIPS处理器广泛的应用于:数字电视、机顶盒、蓝光播放器、游戏机、网络设备。
3. List 3

MIPS寄存器

MIPS 包含32个通用寄存器 ($0-$31均为32 位), 硬件没有强制性的指定寄存器使用规则,但是在实际使用中,这些寄存器的用法都遵循一系列约定,寄存器约定用法引入了一系列的寄存器约定名。在使用寄存器的时候,要尽量用这些约定名或助记符,而不直接引用寄存器编号。

在这里插入图片描述

  1. (1)两个特殊寄存器:

    $0:不管你存放什么值,其返回值永远是零。
    $ 31:永远存放着正常函数调用指令(jal)的返回地址。
    

    (2)$at :

    由编译器生成的复合指令使用
    

    (3)$v0, $v1:

    用来存放一个子程序 (函数) 的非浮点运算的结果或返回值。如果这两个寄存器不够存放需要返回的值,编译器将会通过内存来完成。
    

    (4)$ a0-a3:

    用来传递子函数调用时前4个非浮点参数。
    

    (5)$ t0-t9:

    依照约定,一个子函数可以不用保存并随便的使用这些寄存器。在作表达式计算时,这些寄存器是非常好的暂时变量。当调用一个子函数时,这些寄存器中的值有可能被子函数破坏掉。所以也是最不安全的。
    

    (6)$ s0-s8:

    依照约定,子函数必须保证当函数返回时这些寄存器的内容必须恢复到函数调用以前的值, 或者在子函数里不用这些寄存器或把它们保存 在堆栈上并在函数退出时恢复。 这种约定使得这些寄存器非常适合作为寄存器变量、
    

    或存放一些在函数调用期间必须保存的原来的值。(类比:x86汇编中的函数序言和函数尾声)

    (7)$ k0, k1:

    被OS的异常或中断处理程序使用。被使用后将不会恢复原来的值。因此它们很少在别的地方被使用。
    

    (8)$gp:

    如果存在一个全局指针,它将指向运行时决定的静态数据(static data)区域的一个位置。这意味着,利用gp作基指针,在gp指针32K左右的数 据存取,系统只需要一条指令就可完成
    

    (9)$ sp:

    堆栈指针的上下需要显 式的通过指令来实现。因此 MIPS通常只在子函数进入和 退出的时刻才调整堆栈的指针。 这通过被调用的子函数来实现。SP通常被调整到这个被调用
    

    的子函数需要的堆栈的最低的地方,从而编译器可以通过相对sp的偏移量来存取堆栈上的堆栈变量。

    (10)$ fp(另外的约定名是s8):

    fp作为框架指针可以被函数用来记录堆栈的情况,在一 个过程中变量相对于函数指针的偏移量是不变的。(相对地址)一些编程语言显示的支持这一点。汇编编程员经常会利用fp的这个用法。C语言的库函数
    

    alloca()就是利用了fp来动态调整堆栈的。

    (11)$ ra:

    当调用任何一个子函数时,返回地址存放在ra寄存器中,因此通常 一个子程序的最后一个 指令是: jr ra.子函数如果还要调用其他的子函数,必须保存ra的值,通常通过堆栈。
    

    (12)其他方面:

    MIPS里没有状态码。CPU状态寄存器或内 部都不包含任何用户程序计算的结果状态信息。hi 和 lo 是与乘法运算器相关的两个寄存器,是用来存放结果的地方。 它们并不是通用寄存器,除了用在乘除法之 外,也不能有做其他用途。 MIPS里定义了一些指令可以往hi和lo里存入任何值。浮点运算协处理器 (浮点加速器,FPA),如果存在的话,有32个浮点寄存器。按汇编语言的简单约定讲, 是从$ f0到$f31
    

Began:

ADDIU(DADDIU) : 把一个寄存器的内容加上一个无符号的立即数(赋值) DADDIU R1,R2,#3

XORI 一个寄存器中的内容与一个立即数异或 (异或运算) XORI R1,R2,#3

CTF做了一到MIPS汇编的题目是这样的:在这里插入图片描述看懂之后就可以编写python解题脚本了;

str1 = 'cbtcqLUBChERV[[Nh@_X^D]X_YPV[CJ'flag = ''for i in str1:flag += chr(ord(i)^0x37)print(flag)

除了以上两个指令这道题目中还出现了:

1. LW 从存储器中读取一个字的数据到寄存器中 LW R1, 0(R2)
2. LB 从存储器中读取一个字节的数据到寄存器中 LB R1, 0(R2)
3. DSLL 双字逻辑左移 DSLL R1,R2,#2
4. DSRA 双字算术右移 DSRA R1,R2,#2

5. BEQ 条件转移指令,当两个寄存器内容相等时转移发生 BEQ R1,R2

汇总

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述


http://www.ppmy.cn/news/460577.html

相关文章

wordpress程序的升级步骤

1、备份Wordpress资料及数据库a.备份网站程序cp -ar /data/www/vhosts/chinasoft.cn/httpdocs/wp /opt/wp20201211b.备份数据库/usr/local/xtrabackup/bin/xtrabackup --defaults-file/etc/my.cnf --userroot --passwordpass --host127.0.0.1 --port3306 -S /tmp/mysql.sock --…

Deep Streaming Label Learning 论文阅读

这篇论文发表在ICML 2020上,是一篇关于多标签学习的文章,文章提出了一种基于深度神经网络的新型框架,即深度流标签学习(DSLL),以有效地对带有新兴标签的实例进行分类。 1.Introduction 在传统的监督学习中…

单龙芯3A3000-7A1000PMON研究学习-(29)撸起袖子干-再来一杯代码10-内存初始化2

接着上篇的代码来。 1.上代码 PRINTSTR("PCI space open: 0x80000000 - 0x8FFFFFFF\r\n") //打印信息//config high memory windowsGET_MC_SEL_BITSbeqz a1, 84f //不跳转nop /* Assume MC0_ONLY */GET_MC0_MEMSIZE //a1 16move t5, a1GET_MC1_ONL…

Linux curl命令参数详解

一、Linux curl用法举例: 1. linux curl抓取网页: 抓取百度: 1 curl http://www.baidu.com 如发现乱码,可以使用iconv转码: 1 curl http://iframe.ip138.com/ic.asp|iconv -fgb2312 iconv的用法请参阅:…

龙芯软件开发(10)--龙芯2E指令

每个CPU都有自己独特的指令,比如X86结构的CPU有INTEL的指令系统,MIPS的CPU也有自己的指令系统,当然龙芯CPU也不例外,有自己的指令系统。指令是控制CPU怎么样工作的接口,每条指令都会让CPU做出响应的。如果发送一条不是…

计组实验2 mips简单乘法器模拟实验

目录 前言加法原理忽略溢出的乘法器溢出提示的乘法器完整代码 前言 上一次做了 MIPS实验1:阴间指令集MIPS简介:汇编,IO,过程调用与冒泡排序,如果对mips的IO等等操作还有不懂的可以康康。。。 那么今天来记录一下计组…

计组实验---流水线冒险

文章目录 前言实验内容实验说明一、 调整指令序列二、 Forwarding功能开启三、 结构相关优化要求指令序列调整方案 实验中修改后的高效率代码数据冒险结构冒险 选做题 前言 看了龙哥的blog,感觉实验报告的内容变了一点,这里就更新一下 龙哥的blog 实验内…

计算机体系结构 第2章 指令系统的设计(2)

文章目录 第2章 指令系统的设计2.4 指令系统的发展和改进2.4.1 沿CISC方向发展和改进指令系统2.4.1.1 面向目标程序增强指令功能2.4.1.2 面向高级语言的优化实现来改进指令系统(缩小高级语言与机器语言的语义差距)2.4.1.3 面向操作系统的优化实现改进指令…