mars mips在字符串中查找最低和最高字符

时间:2015-10-03 17:49:19

标签: mips mars-simulator

我试图将加密输出移到不同的温度。注册,然后我将这些字节加载到另一个新的临时。寄存器。将地址重置为0x10010000,然后让第三个临时寄存器从'a'开始然后如果它不等于那个字母并加上地址以查看每个字节中是否有'a',如果没有添加哪个将停止在null或换行符,然后将'a'加到'b'等等。然后我有第四个临时值。注册为'z'做同样的事情,但不是添加'z'而是减去它。我试过这种方式,但似乎不正确。以下是我正在做的事情的样本。

 la $t6,str1                     #str1 is the string I just encrypted and now  lb                                 moving it to a new register $t6.

 lb $t2,($t6)                    # I am loading the address bytes to this new temp.                                register $t2

 li $t8, 'a'                     # making $t8 to be 'a'

 i: ble $t6, 0x10010000,i1       #I am resetting the address back to zero

  subi $t6,$t6,1

 j i  


  i1: beq $t8,$t2, kvt          # I am testing to see if $t8 equals $t2

      addi $t6,$t6,1            # if not add the address by 1

      beq $t2,0x00,i2           # which ever one comes first, branch it to i2

      beq $t2,'/n',i2            

i2: addi $t8,$t8,1              # adds up t8

      j i              

kvt: sb $t8,($t6)               #now I am saving the new value of t6

     li $v0,4

    lb $a0,($t8)               #load the byte value of t8, and have it print.
     syscall               

我是否必须将str1加载到另一个字符串中,这样的话? range: .space 2,如果是这样,如何将str1的字符分配到该范围并让它读取值?

1 个答案:

答案 0 :(得分:0)

这是一个简单循环的例子:

.data
array: .word 1,2,3,4
size: .word 16


.text

MAIN:

la $t0 array
li $t1 0


lw $t2 array #max
lw $t3 array #min
lw $t5 size

LOOP:
add $t0 $t0 $t1
lw $t4 ($t0)

bge $t4 $t2 MAX
j MINTEST

Max:
move $t2 $t4

MINTEST:
blt $t4 $t2 MIN

j ENDLOOP

MIN:
move $t3 $t4

ENDLOOP:

addi $t1 $t1 4
beq $t1 $t5 END
j LOOP

END: