伪指令

这部分使用到的就是在MIPS架构指令集一节中初步接触到的伪指令,在该程序中这些伪指令主要用途是标识数据段和代码段的位置,并为声明的数据分配空间。

.data
fibs: .space 48 # “array” of 12 words to contain fib values
size: .word 12 # size of “array”
space:.asciiz " " # space to insert between numbers
head: .asciiz “The Fibonacci numbers are:\n”
.text
在MARS中的Help文档MIPS->Directives一栏,对所有的伪指令都做了简要的介绍,如果大家想要进一步了解各个伪指令的具体用法,请自行上网搜索。接下来仅具体介绍程序中出现的这几条伪指令。(格式中[XXX]请用对应的数据替换)

1) .data

格式:.data [address]

说明:

定义程序的数据段,初始地址为address,若无address参数,初始地址为设置的默认地址。
需要用伪指令声明的程序变量需要紧跟着该指令。比如该程序中的fibs, size, space, head这四个变量。

  1. .text
    格式:.text [address]
    说明:
    定义程序的代码段,初始地址为address,若无address参数,初始地址为设置的默认地址。
    该指令后面就是程序代码。
    在MARS中如果前面没有使用.data伪指令,可以不使用.text直接编写程序代码,代码将放置在前面设置的代码段默认地址中,但如果前面使用了.data伪指令,务必在代码段开始前使用.text进行标注。

  2. .space
    格式:[name]: .space [n]
    说明:

申请n个字节未初始化的内存空间,类似于其他语言中的数组声明。
这段数据的初始地址保存在标签name中。
name的地址是由.data段的初始地址加上前面所申请的数据大小计算得出的。由于前面申请的空间大小不定,有可能会出现后来申请的空间没有字对齐的情况,从而在使用sw,lw一类指令时出现错误,所以在申请空间时尽可能让n为4的倍数,防止在数据存取过程中出现问题。
在本例中,事先申请了48个字节也就是12个字的内存空间,用来保存我们之后计算出来的12个Fibonacci数,地址标签为fibs。
4) .word

格式:[name]: .word [data1],[data2] ….

说明:

在内存数据段中以字为单位连续存储数据data1,data2,… (也就是将datax写入对应的1个字的空间,注意.word和.space的区别)
这段数据的初始地址保存在标签name中。计算方式与上面相同。
在本例中,把需要计算的Fibonacci数的个数保存在了内存数据段,地址标签为size。

  1. .asciiz

格式:[name]: . asciiz “[content]”

说明:

以字节为单位存储字符串,末尾以NULL结尾。
这个字符串在内存数据区的初始地址保存在标签name中。
注意.asciiz与.ascii这两条伪指令的区别。
.asciiz由于是按字节存储,可能会导致之后分配的空间首地址无法字对齐的情况发生,请大家自行思考解决方法。
本例中,声明了两个字符串,一个是输出时需要用到的空格符,一个是输出语句,地址标签分别为space和head。
.ascii和.asciz的区别是,.asciz会在字符串后自动添加结束符\0.

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值