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的主要内容,如果未能解决你的问题,请参考以下文章

MIPS——分支语句

优化系列MIPS架构汇编优化资料

优化系列汇编优化技术:MIPS架构纯汇编优化及demo

优化系列MIPS架构汇编优化总结

MIPS简单入门

MIPS汇编指令集