装配MIPS:Palindrome字符串检查第二部分

时间:2016-11-18 20:11:35

标签: assembly mips

我在4天前发布了一个问题here关于在MIPS中编写代码,该代码将检查用户字符串是否为回文序列。

答案非常受欢迎,但由于缺乏经验(以及压力,可能),它只是像我的皱纹那样制造了一个中小型的大脑。反正。

我打电话给朋友寻求帮助,他从他的另一位朋友那里给我发了一封确切的代码!像魅力和所有这些一样工作,但我不能遵循其背后的逻辑。他本人无法帮助我,而他的朋友也是一种怪异的东西。

那是代码:

.data
str1: .asciiz "Give me a string\n"
str2: .asciiz "Palindromic\n"
str3: .asciiz "Not Palindromic\n"
txt: .space 25

.text
reading:
la $a0, str1
li $v0, 4
syscall

li $v0, 8
la $a0, txt
la $a1, 20
syscall

la $s0, 0($a0)
la $s4, 0($a0)      

loop:
add $t0, $t0, 1     
lb $t1, ($s0)       
add $s0, $s0, 1     
beq $t1, 32, reading    
bne $t1, 10, loop   
sub $t0, $t0, 1     
sub $s0, $s0, 2     
rem $s6, $t0, 2     

beq $s6, 0, calc_counter    
sub $t0, $t0, 1         

calc_counter:
divu $t0, $t0, 2

loop1:
lb $a0, 0($s0)      
lb $t8, 0($s4)      
sub $s0, $s0, 1     
add $s4, $s4, 1     
sub $t0, $t0, 1     
beq $t0, -1, print  
beq $a0, $t8, loop

j print2

print:
la $a0, str2
li $v0, 4
syscall

j finish_process

print2:
la $a0, str3
li $v0, 4
syscall

finish_process:

li $v0, 10
syscall

我不能接受"接受"这是有效的事实。我需要理解它,因为它的奇怪性质。这里没有测量字符串长度,标签有点混合在一起。

循环细分有什么作用?

loop1段有什么作用?

感谢您的一切。

0 个答案:

没有答案