在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 18342|回复: 5

[原创] MIPS Assembly Language Programming笔记

[复制链接]
发表于 2012-10-22 09:39:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 flyriz 于 2012-10-22 13:36 编辑

09年的时候啃过一本书:MIPS Assembly Language Programming-CS50 Discussion and Project Book,这是当时做的笔记,图片贴不上来,在附件里了。


原书地址:http://www.utdallas.edu/~nhutnn/cs3340/cs50-MIPS-asm.pdf


.set  伪操作符(directive),用来告诉 assembler 如何编译。

.noreorder 表示禁止对代码重排序,让代码严格保持其书写的顺序,否则 MIPS assembler会尝试将代码重新排序——填补那些delay-slot以获得较好的运行效率。

.nowarn要求 assembler 不要费心去指出那些应该被重排序的地方,相信程序员已经处理好这些事情了。通常这不是个好主意——除非你确信你肯定正确。




MIPS Assembly Language Programming-CS50 Discussion and Project Book读书笔记 节选

Chapter 1 Data Representation

1.3 Representing Programs

每条指令的长度为32位,其组成如下表所示:

file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-12447.png

6位被称为op区域,决定了一条指令是寄存器指令、立即数指令或跳转指令,以及指令的余下部分应该如何解释。根据op区域的内容,指令的剩余部分可能代表寄存器名字、立即数存储地址、16位的整数或者是op区域的其他附加特性。如果op0,则该指令是寄存器指令,通常执行算术或逻辑上的操作;功能区域(funct)明确了要执行的操作,reg1reg2表示要使用到的寄存器,des表示要用来储存结果的寄存器。

1.4 Memory Organization

目前的大多数计算机结构中,存储单元为字节:1字节=8,1字=16

在新一代的计算机体系中,存储单元为32位;在最新的计算机体系中,存储单元为64

绝大多数: byte8 bitslongword32 bits

在本结构中:byte=8bits,halfword=16bits,word=32bits


Chapter 2  MIPS Tutorial

2.1 What is Assembly Language?

machine language:机器语言,能被计算机理解的唯一形式

assembly language:汇编语言,与机器语言非常接近,但易于理解、可读性要好

2.2 Getting Started: add.asm

the MIPS assembly instruction

程序开始的时候要写以符号“#”做为开头的标注

add $16, $20, $17  # 寄存器2017里的内容相加,结果放入寄存器16里面,需要3个操作数,一个寄存器用来保存结果,一个用来放第一个数据,一个用来放第二个数据。

add $t0, $t1,  2   # $t0 = $t1 + 2.

li (load immediate value): 把一个32位的常数装入寄存器

li $t1, 1 # load 1 into $t1

标号:必须放在该行的第一个位置,一个位置可以有多个标号;指令与标号不能同名;当一个标号单独的出现在一行中,它将引用接下来的存储单元。所以写标号“main”的时候,让它单独的占一行,如:

main:
# SPIM starts execution at main

li $t1,  1 # load 1 into $t1

add   $t0,  $t1, 2 # $t0 = $t1 + 2


系统调用syscall:

要使用到的寄存器:$v0

li $v0, 10 # syscall code 10 is for exit.

syscall # make the syscall.


2.3 Using SPIM

% spim

SPIM Version 5.4 of Jan. 17, 1994

Copyright 1990-1994 by James R. Larus (larus@cs.wisc.edu).

All Rights Reserved.

See the file README a full copyright notice.

Loaded: /home/usr6/cs51/de51/SPIM/lib/trap.handler

(spim)

这个” %”是用来做什么的?

在运行一个程序之前,必须先装载(load)包含有该程序的文件,用如下命令完成:
(spim) load "add.asm";程序被成功装载之后,可以用该命令来执行:
(spim) run;执行完以后, print”命令,可以查看相应寄存器里面的结果:  (spim) print $t0

Reg 8 = 0x00000003 (3)  其内容会以16进制和10进制两种形式显示

注意:SPIM会自动的把寄存器的符号名转换成实际的数值名.


。。。。。

更多见附件。

mips笔记.pdf

529.71 KB, 下载次数: 46 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2013-2-21 13:40:19 | 显示全部楼层
thanks
发表于 2013-8-28 20:42:16 | 显示全部楼层
支持原创
发表于 2019-12-3 23:49:08 | 显示全部楼层
感谢分享啊
发表于 2023-5-19 10:03:26 | 显示全部楼层
谢谢楼主分享。
发表于 2023-12-11 14:18:19 来自手机 | 显示全部楼层
支持原创
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 09:06 , Processed in 0.023881 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表