<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>实验2&amp;#160;-&amp;#160;MIPS&amp;#160;汇编实验指导 on 北航软院计组教程整理</title><link>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/</link><description>Recent content in 实验2&amp;#160;-&amp;#160;MIPS&amp;#160;汇编实验指导 on 北航软院计组教程整理</description><generator>Hugo</generator><language>zh-Hans-CN</language><atom:link href="https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/index.xml" rel="self" type="application/rss+xml"/><item><title>入门篇</title><link>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/3/</guid><description>&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;MIPS 的指令非常多，指导书当中也只会列举出完成实验常用的指令。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;在课件下载区新增了《MIPS32-Quick Reference》，是常用 MIPS 指令的快速查询手册。&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:center"&gt;&lt;img src="https://awesome-buaa-cs.github.io/fch-tutorial/cguserImages?_img=621dc19d9e3af4d1eb5383d52414fd70.png" title="1699092402113036840.png" alt="MIPS32-Quick Reference.pdf.png" width="852" height="604" style="width: 852px; height: 604px;"/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;MIPS 汇编编写的主要的一个难点就是，一次只能做一个运算，但是会用到好几个寄存器，稍微复杂一点就乱了。我的建议是对每一个使用到的寄存器，都做上注释防止出现混乱。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;另外，希望大家在写 MIPS 汇编的时候，多多参考 MARS Help 当中的内容。&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:center"&gt;&lt;img src="https://awesome-buaa-cs.github.io/fch-tutorial/cguserImages?_img=3c56e7b75da77ccb7e91bd7928029ad7.png" title="1699092372361056346.png" alt="截屏2023-11-04 14.44.14.png" width="647" height="509" style="width: 647px; height: 509px;"/&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;赋值&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;在 C 语言中，我们最先用到的便是给变量赋值，这个在 MIPS 中该如何实现呢？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;下面这条指令的意思，就是将 t1 寄存器的值赋值为 100，其实际含义是给 $t1 赋值为 100 和 0 进行按位或运算后得到的结果。&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;&amp;nbsp;ori&amp;nbsp;$t1,&amp;nbsp;100&lt;br/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;当然了，我们也可以使用扩展指令（伪指令）li（load immediate），下面这条指令的意思，便是直接将 $t1 寄存器赋值为 100，该指令与上一条指令的效果完全一致。&lt;/span&gt;&lt;/p&gt;</description></item><item><title>写在最后</title><link>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/7/</guid><description>&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;以上便是 MIPS 汇编中一些最主要的编码方法，需要你能够在完全理解的基础上，多多练习，方能融会贯通。如果想要对 MIPS 汇编的原理进行更深一步的了解，可以阅读本课程相应的 PDF 版指导书。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;最后，感谢高远同学为课程组提供了“MIPS 教程”详细的指导书。今年胡峻诚同学在他的教程的基础上，扩充了部分内容。另外，由于高远同学今年不在担任本课程的助教，所以如果发现了本指导书的错误，或是对某些地方产生疑问，欢迎各位同学在计算机硬件基础群中添加助教的微信反馈。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description></item><item><title>基础篇</title><link>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/4/</guid><description>&lt;h3&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;一次简单的 if 条件判断&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;在 C 语言中，常用 if 结构，在 MIPS 中如何实现呢？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;考虑下面的代码：&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;&amp;nbsp;if&amp;nbsp;(a&amp;nbsp;&amp;gt;&amp;nbsp;5)&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;do&amp;nbsp;A;&lt;br/&gt;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;//&amp;nbsp;do&amp;nbsp;B;&lt;br/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;我们不得不提一个叫做 ble 的指令，如下图，其含义是若 $t1 寄存器的值小于等于 5，则跳转到 label 标签处；否则，执行 ble 的下一条指令。&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;&amp;nbsp;ble&amp;nbsp;$t1,&amp;nbsp;5,&amp;nbsp;label&lt;br/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;所以我们需要给源程序打上标签：&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;&amp;nbsp;if&amp;nbsp;(a&amp;nbsp;&amp;gt;&amp;nbsp;5)&amp;nbsp;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;do&amp;nbsp;A;&lt;br/&gt;&amp;nbsp;}&lt;br/&gt;&amp;nbsp;//&amp;nbsp;label:&lt;br/&gt;&amp;nbsp;//&amp;nbsp;do&amp;nbsp;B;&lt;br/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;经过这样打标签之后，程序的逻辑就变成了：&lt;/span&gt;&lt;/p&gt;&lt;ul class=" list-paddingleft-2"&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;如果 a 的值小于等于 5，就跳转到 label 的位置，执行 B 部分&lt;/span&gt;&lt;/p&gt;</description></item><item><title>实验内容</title><link>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/2/</guid><description>&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;汇编语言是使用符号格式表示指令，可直接面向机器内存以及寄存器的程序设计语言。本部分主要学习内容包括：&lt;/span&gt;&lt;/p&gt;&lt;ol class=" list-paddingleft-2"&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;以 MIPS 指令系统为例，学习 MIPS 指令集及汇编语言，能够使用 MIPS 汇编语言编写顺序、分支、循环等具有特定功能的结构化汇编程序，最好能掌握函数调用及栈操作等汇编程序设计方法。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;熟练使用 MARS 工具软件，具备 MARS 调试汇编代码的能力，能使用 MARS 模拟 CPU 执行汇编指令，通过观察相应寄存器、存储等部件的变化情况，查看程序是否符合期望。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description></item><item><title>敲门篇</title><link>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/1/</guid><description>&lt;h3&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;MIPS 体系结构中的寄存器&lt;/span&gt;&lt;/h3&gt;&lt;ul class=" list-paddingleft-2"&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;MIPS 结构体系当中定义了 32 个寄存器&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;通用寄存器标志由 $ 符号开头，通常有两种使用的方式：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=" list-paddingleft-2" style="list-style-type: square;"&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;直接使用对应的寄存器的名称，例如 $t0、$t1、$sp 等。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;直接使用对应的寄存器的编号，例如 $0、$1、$31 等。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;每个寄存器都有其特定的作用，有相应的规范，如下表所示。&lt;/span&gt;&lt;/p&gt;&lt;figure&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class="firstRow"&gt;&lt;th&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;寄存器编号&lt;/span&gt;&lt;/th&gt;&lt;th&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;助记符&lt;/span&gt;&lt;/th&gt;&lt;th&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;用途&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;0&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;zero&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;值总是为 0&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;at&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;（汇编暂存寄存器）一般由汇编器作为临时寄存器使用。我们编写 MIPS 汇编不使用。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;2 - 3&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;v0 - v1&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;用于存放表达式的值，或函数的整型、指针型的返回值&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;4 - 7&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;a0 - a3&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;用于函数传参。其值在函数调用的过程中不会被保存。若函数参数较多，多出来的部分通常会使用栈进行传递。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;8 - 15&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;t0 - t7&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;用于存放表达式的值的临时寄存器。其值在函数调用的过程中不会被保存。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;16 - 23&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;s0 - s7&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;保存寄存器。这些寄存器中的值在经过函数调用之后不会改变。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;24 - 25&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;t8 - t9&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;用于存放表达式的值的临时寄存器。其值在函数调用的过程中不会被保存。当调用位置无关函数时，25 号寄存器必须存放被调用函数的地址。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;26 - 27&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;k0 - k1&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;仅被操作系统使用。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;28&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;gp&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;全局指针和内容指针。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;29&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;sp&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;栈指针。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;30&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;fp 或 s8&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;保存寄存器（同 s0 - s7）。也可用作帧指针。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;31&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;ra&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;函数返回地址。&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description></item><item><title>进阶篇</title><link>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/6/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/6/</guid><description>&lt;h3&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;函数&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;虽然前面有宏定义，但是 MIPS 本身还是有函数的使用的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;宏定义和函数的关系就像是 C 语言当中 &lt;/span&gt;&lt;code&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;#define&lt;/span&gt;&lt;/code&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt; 关键字 和 函数 的关系一样。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;首先，我们来学习 jal（jump and link）指令。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;jal 指令的意思是跳转到对应标签的位置，并将当前执行的指令位置存储在 $ra 寄存器中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;前面说过 $a0 - $a3 寄存器的作用是函数传参，意味着如果在 jal 指令调用之前，往 $a0 - $a3 寄存器当中存放了数据，那么 jal 指令调用之后，这几个寄存器的值是可以直接拿出来用的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;既然 $ra 寄存器当中存放了调用之前的执行的位置，当函数调用结束后可使用 jr（jump register）指令：&lt;/span&gt;&lt;code&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;jr $ra&lt;/span&gt;&lt;/code&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt; ，返回（return）这个函数，&lt;strong&gt;函数的返回值存储在 $v0 和 $v1 寄存器中&lt;/strong&gt;。（MIPS 甚至可以有两个返回值）&lt;/span&gt;&lt;/p&gt;</description></item><item><title>高级篇</title><link>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://awesome-buaa-cs.github.io/fch-tutorial/2025ta/1085/5/</guid><description>&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;前面我们已经学习了 MIPS 汇编的基本使用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;下面我们在此基础上回顾一下 MIPS 汇编，同时讲一些高级一点的用法。&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;宏定义&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;有的同学可能会说，这个输入输出每次都要写好几条指令才能做到，但是每次写起来都是一样的，有没有更方便的方法去完成这件事呢？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;当然有，我们隆重向大家介绍宏定义。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;宏定义需要使用 .macro 和 .end_macro 进行包裹。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;看下面的例子：&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;&amp;nbsp;.macro&amp;nbsp;RI(%i)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;li&amp;nbsp;$v0,&amp;nbsp;5&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;syscall&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;move&amp;nbsp;%i,&amp;nbsp;$v0&lt;br/&gt;&amp;nbsp;.end_macro&lt;br/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;首先阅读一下中间三行 MIPS 代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;$v0 寄存器的值设置成 5，然后 syscall 系统调用，这个时候程序会进行读入整数的操作。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Menlo, Monaco, Consolas, monospace;"&gt;然后，将读到 $v0 寄存器的值移动到 %i。&lt;/span&gt;&lt;/p&gt;</description></item></channel></rss>