1

新来的,新的组装。

我正在做我的第一个任务,看起来很简单,但我仍然缺乏对 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)
4

1 回答 1

1

如果一开始更容易,只需用伪指令编写代码,然后用等效的 TAL 指令替换每个伪指令:

例如:

li $t0, 5

可以替换为:

addi $t0, $0, 5

最后作为一般建议,远离绝对寻址,对于现实生活中的代码,您实际上总是依赖相对寻址来进行打包,或者更准确地说,您的代码可以很容易地被操作系统或任何其他代码在内存中传送(在某些极端情况下可能的自修改代码)

于 2014-03-11T13:41:49.340 回答