mars mips查找字符串中的最低和最高字符
我已尝试将加密输出移动到其他临时位置。注册,然后我将这些字节加载到另一个新的temp中。登记将地址重置回0x10010000,然后让第三个临时寄存器从“a”开始,如果它不等于该字母,则将地址相加,以查看每个字节中是否有一个“a”,如果没有,则将其添加到null或换行符字节,然后将“a”添加到“b”等。然后我有第四个临时寄存器。注册对“z”执行相同的操作,但不是将“z”加起来,而是将其减去。我试过这种方法,但似乎不对。这是我正在做的一个例子mars mips查找字符串中的最低和最高字符,mips,mars-simulator,Mips,Mars Simulator,我已尝试将加密输出移动到其他临时位置。注册,然后我将这些字节加载到另一个新的temp中。登记将地址重置回0x10010000,然后让第三个临时寄存器从“a”开始,如果它不等于该字母,则将地址相加,以查看每个字节中是否有一个“a”,如果没有,则将其添加到null或换行符字节,然后将“a”添加到“b”等。然后我有第四个临时寄存器。注册对“z”执行相同的操作,但不是将“z”加起来,而是将其减去。我试过这种方法,但似乎不对。这是我正在做的一个例子 la $t6,str1
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
str1
加载到另一个字符串中吗<代码>范围:。空格2,如果是,如何将str1
的字符分配到该范围并让其读取值 下面是一个简单循环的示例:
.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:
i
循环的意义是什么?为什么不干脆li$t6,0x10010000
?而且,'/n'
看起来很奇怪。您的意思是“”\n“
”?查找最小/最大元素时,可能会将整个字符串按字母表中的字符数进行多次遍历,这似乎是一种非常低效的方法。只需检查字符串一次,检查每个字符是否小于/大于当前的最小/最大值。Michael,我该怎么做?我如何通过一次字符串并打印出最小值和最大值来测试它。这是我唯一能想到的搜索它的最小值和最大值并打印出来的方法。所有这一切都将进入一个无限循环。而且,用户必须输入字符a-z,所以在该范围内的任何东西。