马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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区域的其他附加特性。如果op是0,则该指令是寄存器指令,通常执行算术或逻辑上的操作;功能区域(funct)明确了要执行的操作,reg1、reg2表示要使用到的寄存器,des表示要用来储存结果的寄存器。 1.4 Memory Organization 目前的大多数计算机结构中,存储单元为字节:1字节=8位,1字=16位 在新一代的计算机体系中,存储单元为32位;在最新的计算机体系中,存储单元为64位 绝大多数: byte=8 bits, longword=32 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 # 寄存器20、17里的内容相加,结果放入寄存器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会自动的把寄存器的符号名转换成实际的数值名.
。。。。。 更多见附件。 |