【发布时间】:2014-04-21 09:31:58
【问题描述】:
MIPs 汇编语言非常新——我找不到一个链接专门告诉一个函数在 MIPS 中的区别,我们如何使用 jal,jr 的示例,等等。
很难找出这些操作是如何工作的——我的这部分课程的教科书非常宽泛,假设我已经知道该语言并且只是概述了一个代码(假设我确切地知道代码是什么)意思)
因此,这本书对我没有帮助,所以我正在尝试自己练习..
任何人,在我的课堂上,我们编写了一个简单的数组代码,据说里面有一个“函数”。
我的问题是——我怎么知道什么是“功能” 下面是我们在课堂上做的代码——它应该输出一个从 1 到 10 的数组。我理解它在哪里递增等等(addi)以及为什么它是 1 和 4,但我不明白 $ra, jal , jr 是什么意思...但我假设这些与“功能”有关
#Load an array and display
.data
.align 2
a1: .space 40
.text
.globl main
main:
la $s0, a1
jal loadArray
la $s0, a1# <- return here after function return
jal displayArray
# <- return here after 2nd function
exit:
li $v0, 10
syscall
displayArray:
#$ra = the address of line 14
li $t0, 1 #int i = 0
displayLoop: blt $t0, 11, display
#else
jr $ra
display:
lw $t0, ($s0) # a1[i] = i;
li $v0, 1
move $a0, $t0
syscall
#incremment i and array pointer
addi $t0, $t0, 1
addi $s0, $s0, 4
j displayLoop
loadArray:
#$ra = the address of line 14
li $t0, 1 #int i = 0
loadLoop: blt $t0, 11, load
#else
jr $ra
load:
sw $t0, ($s0) # a1[i] = i;
#incremment i and array pointer
addi $t0, $t0, 1
addi $s0, $s0, 4
j loadLoop
所以这是示例代码,但此代码与仅带有标签的普通代码之间的唯一区别是跳转寄存器以及跳转和链接...... 那能区分什么是函数吗???
对不起,长长的文字墙——TL;DR 在 MIPS 中,你怎么知道什么是“函数”我知道标签是什么(obv.)但不是函数......
这对我来说并不像在 cpp 或 java 中那样直截了当。
【问题讨论】: