Язык ассемблера MIPS с MARS

новый здесь, и новый в сборке.

Я работаю над своим первым заданием, и оно кажется простым, но мне все еще не хватает понимания 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)

person mike1866    schedule 24.05.2013    source источник
comment
Псевдо-инструкции таковы: псевдо. Они всегда переводятся в собственные инструкции, поэтому просто замените их. См. здесь.   -  person m0skit0    schedule 27.05.2013


Ответы (1)


просто напишите код с псевдо-инструкциями, если сначала это проще, затем замените каждую псевдо-инструкцию эквивалентными инструкциями TAL:

Например:

li $t0, 5

Можно заменить на:

addi $t0, $0, 5

Наконец, общий совет: держитесь подальше от абсолютной адресации, для реальных кодов вы практически ВСЕГДА будете зависеть от относительной адресации для целей упаковки или, точнее, для того, чтобы ваш код легко переносился в память ОС или любым другим кодом ( возможен самомодифицирующийся код в некоторых крайних случаях)

person Stack Player    schedule 11.03.2014