Write a MIPS program that will read in a base (as an integer) and a value (nonne
ID: 3801986 • Letter: W
Question
Write a MIPS program that will read in a base (as an integer) and a value (nonnegative integer but as an ASCII string) in that base and print out the decimal value; you must implement a function (which accepts a base and an address for a string as parameters, and returns the value) and call the function from the main program. The base will be given in decimal and will be between 2 and 36, and the digits for the values will be in set [0...9, a...z]. You can assume that no overflow will occur and the value is valid in the given base. An example run will be: Enter a base (between 2 and 36 in decimal): 2 Enter a number in base 2: 101 The value in decimal is: 5
Explanation / Answer
.file 1 "" .section .mdebug.abi32 .previous .gnu_attribute 4, 1 .abicalls .text .align 2 .globl _Z3valc $LFB0 = . .set nomips16 .ent _Z3valc .type _Z3valc, @function _Z3valc: .frame $fp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0 .mask 0x40000000,-4 .fmask 0x00000000,0 .set noreorder .set nomacro addiu $sp,$sp,-8 $LCFI0: sw $fp,4($sp) $LCFI1: move $fp,$sp movz $31,$31,$0 $LCFI2: move $2,$4 sb $2,8($fp) lb $2,8($fp) nop slt $2,$2,48 bne $2,$0,$L2 nop lb $2,8($fp) nop slt $2,$2,58 beq $2,$0,$L2 nop lb $2,8($fp) nop addiu $2,$2,-48 b $L3 nop $L2: lb $2,8($fp) nop addiu $2,$2,-55 $L3: move $sp,$fp lw $fp,4($sp) addiu $sp,$sp,8 j $31 nop .set macro .set reorder .end _Z3valc $LFE0: .size _Z3valc, .-_Z3valc .rdata .align 2 $LC0: .ascii "Invalid Number " .text .align 2 .globl _Z6toDeciPci $LFB1 = . .set nomips16 .ent _Z6toDeciPci .type _Z6toDeciPci, @function _Z6toDeciPci: .frame $fp,48,$31 # vars= 16, regs= 2/0, args= 16, gp= 8 .mask 0xc0000000,-4 .fmask 0x00000000,0 .set noreorder .cpload $25 .set nomacro addiu $sp,$sp,-48 $LCFI3: sw $31,44($sp) $LCFI4: sw $fp,40($sp) movz $31,$31,$0 $LCFI5: move $fp,$sp $LCFI6: .cprestore 16 sw $4,48($fp) sw $5,52($fp) lw $4,48($fp) lw $2,%call16(strlen)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) sw $2,36($fp) li $2,1 # 0x1 sw $2,32($fp) sw $0,28($fp) lw $2,36($fp) nop addiu $2,$2,-1 sw $2,24($fp) b $L6 nop $L9: lw $2,24($fp) lw $3,48($fp) nop addu $2,$3,$2 lb $2,0($2) nop move $4,$2 lw $2,%got(_Z3valc)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) move $3,$2 lw $2,52($fp) nop slt $2,$3,$2 xori $2,$2,0x1 andi $2,$2,0x00ff beq $2,$0,$L7 nop lw $2,%got($LC0)($28) nop addiu $4,$2,%lo($LC0) lw $2,%call16(printf)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) li $2,-1 # 0xffffffffffffffff b $L8 nop $L7: lw $2,24($fp) lw $3,48($fp) nop addu $2,$3,$2 lb $2,0($2) nop move $4,$2 lw $2,%got(_Z3valc)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) move $3,$2 lw $2,32($fp) nop mult $3,$2 mflo $3 lw $2,28($fp) nop addu $2,$2,$3 sw $2,28($fp) lw $3,32($fp) lw $2,52($fp) nop mult $3,$2 mflo $2 sw $2,32($fp) lw $2,24($fp) nop addiu $2,$2,-1 sw $2,24($fp) $L6: lw $2,24($fp) nop nor $2,$0,$2 srl $2,$2,31 andi $2,$2,0x00ff bne $2,$0,$L9 nop lw $2,28($fp) $L8: move $sp,$fp lw $31,44($sp) lw $fp,40($sp) addiu $sp,$sp,48 j $31 nop .set macro .set reorder .end _Z6toDeciPci $LFE1: .size _Z6toDeciPci, .-_Z6toDeciPci .rdata .align 2 $LC1: .ascii "Enter a base (between 2 and 36 in decimal): " .align 2 $LC2: .ascii "%d " .align 2 $LC4: .ascii "Enter a number in base %d : " .align 2 $LC5: .ascii "%s " .align 2 $LC6: .ascii "Decimal equivalent of %s in base %d is %d
" .align 2 $LC3: .ascii "11A " .text .align 2 .globl main $LFB2 = . .set nomips16 .ent main .type main, @function main: .frame $fp,48,$31 # vars= 8, regs= 3/0, args= 16, gp= 8 .mask 0xc0010000,-4 .fmask 0x00000000,0 .set noreorder .cpload $25 .set nomacro addiu $sp,$sp,-48 $LCFI7: sw $31,44($sp) $LCFI8: sw $fp,40($sp) movz $31,$31,$0 $LCFI9: sw $16,36($sp) $LCFI10: move $fp,$sp $LCFI11: .cprestore 16 lw $2,%got($LC1)($28) nop addiu $4,$2,%lo($LC1) lw $2,%call16(printf)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) nop lw $2,%got($LC2)($28) nop addiu $4,$2,%lo($LC2) addiu $2,$fp,24 move $5,$2 lw $2,%call16(scanf)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) nop lw $2,%got($LC3)($28) nop lw $2,%lo($LC3)($2) nop sw $2,28($fp) lw $2,24($fp) lw $3,%got($LC4)($28) nop addiu $4,$3,%lo($LC4) move $5,$2 lw $2,%call16(printf)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) addiu $2,$fp,28 lw $3,%got($LC5)($28) nop addiu $4,$3,%lo($LC5) move $5,$2 lw $2,%call16(scanf)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) lw $16,24($fp) lw $2,24($fp) addiu $3,$fp,28 move $4,$3 move $5,$2 lw $2,%got(_Z6toDeciPci)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) addiu $3,$fp,28 lw $4,%got($LC6)($28) nop addiu $4,$4,%lo($LC6) move $5,$3 move $6,$16 move $7,$2 lw $2,%call16(printf)($28) nop move $25,$2 jalr $25 nop lw $28,16($fp) move $2,$0 move $sp,$fp lw $31,44($sp) lw $fp,40($sp) lw $16,36($sp) addiu $sp,$sp,48 j $31 nop .set macro .set reorder .end main $LFE2: .size main, .-main .section .eh_frame,"aw",@progbits $Lframe1: .4byte $LECIE1-$LSCIE1 $LSCIE1: .4byte 0x0 .byte 0x1 .globl __gxx_personality_v0 .ascii "zP " .uleb128 0x1 .sleb128 -4 .byte 0x1f .uleb128 0x5 .byte 0x0 .4byte __gxx_personality_v0 .byte 0xc .uleb128 0x1d .uleb128 0x0 .align 2 $LECIE1: $LSFDE3: .4byte $LEFDE3-$LASFDE3 $LASFDE3: .4byte $LASFDE3-$Lframe1 .4byte $LFB1 .4byte $LFE1-$LFB1 .uleb128 0x0 .byte 0x4 .4byte $LCFI3-$LFB1 .byte 0xe .uleb128 0x30 .byte 0x4 .4byte $LCFI5-$LCFI3 .byte 0x11 .uleb128 0x1e .sleb128 2 .byte 0x11 .uleb128 0x1f .sleb128 1 .byte 0x4 .4byte $LCFI6-$LCFI5 .byte 0xd .uleb128 0x1e .align 2 $LEFDE3: $LSFDE5: .4byte $LEFDE5-$LASFDE5 $LASFDE5: .4byte $LASFDE5-$Lframe1 .4byte $LFB2 .4byte $LFE2-$LFB2 .uleb128 0x0 .byte 0x4 .4byte $LCFI7-$LFB2 .byte 0xe .uleb128 0x30 .byte 0x4 .4byte $LCFI10-$LCFI7 .byte 0x11 .uleb128 0x10 .sleb128 3 .byte 0x11 .uleb128 0x1e .sleb128 2 .byte 0x11 .uleb128 0x1f .sleb128 1 .byte 0x4 .4byte $LCFI11-$LCFI10 .byte 0xd .uleb128 0x1e .align 2 $LEFDE5: .ident "GCC: (Debian 4.4.5-8) 4.4.5"
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.