Write a method in basic MIPS assembly (no pseudo instructions) which determines
ID: 3744371 • Letter: W
Question
Write a method in basic MIPS assembly (no pseudo instructions) which determines whether or not an input string is a palindrome.
.data
String0:
.asciiz ""
String1:
.asciiz "a"
String2:
.asciiz "b"
String3:
.asciiz "aba"
String4:
.asciiz "abba"
String5:
.asciiz "baab"
String6:
.asciiz "ababa"
String7:
.asciiz "aabba"
String8:
.asciiz "abbab"
Is:
.asciiz" is a palindrome. "
IsNot:
.asciiz" is not a palindrome. "
.text
la $a0, String0
jalCheckPalindrome
addi $a1, $v0, 0
jalWriteResult
la $a0, String1
jalCheckPalindrome
addi $a1, $v0, 0
jalWriteResult
la $a0, String2
jalCheckPalindrome
addi $a1, $v0, 0
jalWriteResult
la $a0, String3
jalCheckPalindrome
addi $a1, $v0, 0
jalWriteResult
la $a0, String4
jalCheckPalindrome
addi $a1, $v0, 0
jalWriteResult
la $a0, String5
jalCheckPalindrome
addi $a1, $v0, 0
jalWriteResult
la $a0, String6
jalCheckPalindrome
addi $a1, $v0, 0
jalWriteResult
la $a0, String7
jalCheckPalindrome
addi $a1, $v0, 0
jalWriteResult
la $a0, String8
jalCheckPalindrome
addi $a1, $v0, 0
jalWriteResult
addi $v0, $0, 10
syscall
WriteResult:
addi $sp, $sp, -8
sw $a0, 0($sp)
sw $v0, 4($sp)
addi $v0, $0, 4
syscall
beq$a1, $0, PrintNot
la $a0, Is
syscall
j WriteDone
PrintNot:
la $a0, IsNot
syscall
WriteDone:
lw $v0, 4($sp)
lw $a0, 0($sp)
addi $sp, $sp, 8
jr $ra
CheckPalindrome:
# $a0 – string address
# $v0 – result (1 = is a palindrome, 0 is not)
# your code goes here
Explanation / Answer
.file 1 "" .section .mdebug.abi32 .previous .nan legacy .module fp=32 .module nooddspreg .abicalls .rdata .align 2 $LC0: .ascii "Enter a string to check whether it is palindrome or not:" .ascii " " .align 2 $LC1: .ascii "%s " .align 2 $LC2: .ascii "Entered string is palindrome " .align 2 $LC3: .ascii "Entered string is not palindrome " .text .align 2 .globl main .set nomips16 .set nomicromips .ent main .type main, @function main: .frame $fp,144,$31 # vars= 112, regs= 2/0, args= 16, gp= 8 .mask 0xc0000000,-4 .fmask 0x00000000,0 .set noreorder .cpload $25 .set nomacro addiu $sp,$sp,-144 sw $31,140($sp) sw $fp,136($sp) move $fp,$sp .cprestore 16 movz $31,$31,$0 sw $0,28($fp) sw $0,32($fp) lw $2,%got($LC0)($28) nop addiu $4,$2,%lo($LC0) lw $2,%call16(printf)($28) nop move $25,$2 .reloc 1f,R_MIPS_JALR,printf 1: jalr $25 nop lw $28,16($fp) addiu $2,$fp,36 move $5,$2 lw $2,%got($LC1)($28) nop addiu $4,$2,%lo($LC1) lw $2,%call16(__isoc99_scanf)($28) nop move $25,$2 .reloc 1f,R_MIPS_JALR,__isoc99_scanf 1: jalr $25 nop lw $28,16($fp) sw $0,24($fp) b $L2 nop $L5: lw $2,24($fp) addiu $3,$fp,24 addu $2,$3,$2 lb $2,12($2) nop beq $2,$0,$L12 nop lw $2,32($fp) nop addiu $2,$2,1 sw $2,32($fp) lw $2,24($fp) nop addiu $2,$2,1 sw $2,24($fp) $L2: lw $2,24($fp) nop slt $2,$2,100 bne $2,$0,$L5 nop b $L4 nop $L12: nop $L4: sw $0,24($fp) b $L6 nop $L8: lw $2,24($fp) addiu $3,$fp,24 addu $2,$3,$2 lb $3,12($2) lw $2,32($fp) nop addiu $4,$2,-1 lw $2,24($fp) nop subu $2,$4,$2 addiu $4,$fp,24 addu $2,$4,$2 lb $2,12($2) nop bne $3,$2,$L7 nop lw $2,28($fp) nop addiu $2,$2,1 sw $2,28($fp) $L7: lw $2,24($fp) nop addiu $2,$2,1 sw $2,24($fp) $L6: lw $3,24($fp) lw $2,32($fp) nop slt $2,$3,$2 bne $2,$0,$L8 nop lw $3,32($fp) lw $2,28($fp) nop bne $3,$2,$L9 nop lw $2,%got($LC2)($28) nop addiu $4,$2,%lo($LC2) lw $2,%call16(printf)($28) nop move $25,$2 .reloc 1f,R_MIPS_JALR,printf 1: jalr $25 nop lw $28,16($fp) b $L10 nop $L9: lw $2,%got($LC3)($28) nop addiu $4,$2,%lo($LC3) lw $2,%call16(printf)($28) nop move $25,$2 .reloc 1f,R_MIPS_JALR,printf 1: jalr $25 nop lw $28,16($fp) $L10: move $2,$0 move $sp,$fp lw $31,140($sp) lw $fp,136($sp) addiu $sp,$sp,144 j $31 nop .set macro .set reorder .end main .size main, .-main
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.