Заредете позицията на индекса, като използвате въведена от потребителя стойност, съхранена в регистъра

Така че имам проста програма в MIPS, която приема въвеждане от потребителя за стойност на индекс за масив от думи, който съществува в паметта. Така че кажете, че думата е заредена като такава:

Array: .word 0xAABBCCDD:16

Така че вземам въведеното от потребителя и го съхранявам в $t0. Въпросът ми е как да заредя този конкретен индекс от моята дума? Не мога да измисля начин да получа стойността на третия байт в регистър. Например, кажете, че потребител ще въведе стойността 3 в подканата

Input value: 3

Тогава бих искал да върна стойността 0xAA.

Output: 0xAA

Не мога да измисля начин да получа правилното отместване, като стойността на индекса е в регистъра. Знам, че не мога да използвам два регистъра, когато използвам lw, защото няма достатъчно памет за него. И така, има ли някаква проста процедура, която пренебрегвам тук? Благодаря.


person Slicktopher    schedule 03.02.2014    source източник


Отговори (1)


Ако приемем, че въведената от потребителя стойност е в регистър $t1:

la    $t0,ARRAY   # starting address of array
addu  $t1,$t0     # add starting address to user input value
lb    $t2,($t1)   # load $t2 with the byte at (ARRAY + user_input)
person markgz    schedule 03.02.2014
comment
няма ли да имам нужда от addu $t2, $t1, $t0 - person Slicktopher; 04.02.2014
comment
Защо ще ви трябва това? - person markgz; 04.02.2014
comment
Предполагам, че беше само програмата, която използвах, MARS. Току-що направих addu $t1, $t1, $t0 - person Slicktopher; 04.02.2014
comment
Предполагам, че беше само програмата, която използвах, MARS. Току-що направих addu $t1, $t1, $t0 И така, сега имам 0x10010003, зареден в регистъра, но как конкретно да го отпечатам като цяло число? Цялото нещо се зарежда в $a0, когато направя add $a0, $t2, $zero Така че, ако трябва да направя li $v0, 1 add $a0, $t2, $zero syscall Отпечатва стойността на 0xFFFFFFFF, която е -1 с помощта на MARS. - person Slicktopher; 04.02.2014