这里是新的,也是装配的新手。
我正在进行第一次任务,看起来很简单,但我仍然缺乏对MIPS的理解。
我目前的问题是尝试阅读提示并打印整数。我必须用伪指令(即la,li,...)来做这个,所以我只能使用lui,add,addi,sw ...没有伪代码我丢失了,因为现在我必须调用字符串通过地址,我猜是0x1001。我的另一个问题是如何进入下一个地址?
tl; dr ...必须能够计算函数val3 = $ s0- $ s1 + $ s2,其中$ s0 = 27,$ s1 = val1,$ s2 = val2 w / o伪指令。
这只是我的代码的开始部分和英语帮助(所以我可以理解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)
答案 0 :(得分:0)
如果首先更容易用伪指令编写代码,然后用等效的TAL指令替换每个伪指令:
例如:
li $t0, 5
可替换为:
addi $t0, $0, 5
最后作为一般建议,远离绝对寻址,对于实际代码,您实际上总是依赖于相对寻址用于包装目的,或者更准确地说,您的代码可以通过操作系统或任何内容轻松地在内存中传输其他代码(在某些极端情况下可能的自修改代码)