我在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段有什么作用?
感谢您的一切。