MIPS 汇编语言,带有 MARS
Posted
技术标签:
【中文标题】MIPS 汇编语言,带有 MARS【英文标题】:MIPS Assembly Language, with MARS 【发布时间】:2013-05-24 19:37:12 【问题描述】:这里是新的,也是组装的新手。
我正在做我的第一个任务,看起来很简单,但我仍然缺乏对 MIPS 的理解。
我当前的问题是尝试阅读提示并打印整数。我必须在没有伪指令的情况下执行此操作(即 la、li、...),所以我只能使用 lui、add、addi、sw... 没有伪代码我会迷路,因为现在我必须调用字符串按地址,我猜是0x1001。我的另一个问题是如何移动到下一个地址?
tl;dr...必须能够计算函数 val3=$s0-$s1+$s2,其中 $s0=27、$s1=val1 和 $s2=val2 没有伪指令。
这只是我的代码的开始部分,如果有英文帮助(所以我可以理解 XD)将不胜感激)
.data #variable declaration
val1: .word 0 #0x100100000
val2: .word 0 #0x100100004
val3: .word 0 #0x100100008
prompt1: .asciiz "Mike Rosenfeld" #0x10010000c
prompt2: .asciiz "Enter a number" #0x100100010
prompt3: .asciiz "\n" #0x100100012
.space 15
.globl main
.text #instructions
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>START>>>>>>>>>>>>>>>>>>>>>>>>>>
main:
addi $s0, $zero, 5 #set command to read
#syscall #get value
addi $a0, $v0, 27 #initialize a = 27
addi $v0, $zero, 27 #set command to print
#>>>>>>>>>>>>>>>>>>>>>DEFINE VARIABLES>>>>>>>>>>>>>>>>>>>>>>
#lw $t0, val1 #input value #1
lui $t0, 0x1001 #store value #1
addi $a0, $zero, 4 #call string prompt 1
syscall
addi $v0, $zero, 5
syscall
sw $v0, 0($t0)
【问题讨论】:
伪指令是:伪。它们总是翻译成本地指令,所以只需替换它们。见here。 【参考方案1】:如果一开始更容易,只需用伪指令编写代码,然后将每个伪指令替换为等效的 TAL 指令:
例如:
li $t0, 5
可以替换为:
addi $t0, $0, 5
最后,作为一般建议,远离绝对寻址,对于现实生活中的代码,您实际上总是依赖相对寻址来进行打包,或者更准确地说,您的代码可以很容易地被操作系统或任何其他代码(在某些极端情况下可能会自行修改代码)
【讨论】:
以上是关于MIPS 汇编语言,带有 MARS的主要内容,如果未能解决你的问题,请参考以下文章