Hi,

I have a simple code written in MIPS assembly that reads an integer from a user and displays it to the screen. The code is as follows:

main:
     la         $a0, in_msg
     li         $v0, 4
     syscall
 
     li         $v0, 5
     syscall
     move       $t0, $v0
 
     la         $a0, out_msg
     li         $v0, 4
     syscall

     move       $a0, $t0
     li         $v0, 1
     syscall
     
     li         $v0, 10
     syscall

.data
     in_msg:    .asciiz "Input: "
     out_msg:   .asciiz "\nOutput:\n-------\n"

How can I convert this decimal value to a binary?

Thank you in advance.

Recommended Answers

All 5 Replies

I am currently trying to work on this. If anyone can help...it would be greatly appreciated.

Post what you've got and what part of it is giving you trouble.

Post what you've got and what part of it is giving you trouble.

I figured it out:

# Brent Wagner

.data
ask_str1: .asciiz "Enter a number PLEASE: "
result_str: .asciiz ""
.align 2

.text
.globl __start

__start:
# ask and store the first number
li $v0, 4
la $a0, ask_str1
syscall
li $v0, 5
syscall
move $a0, $v0

jal print_bin

# New Line
li $v0, 11
li $a0, 10
syscall

j __start

print_bin:

add $t0, $zero, $a0 # put our input ($a0) into $t0
add $t1, $zero, $zero # Zero out $t1
addi $t3, $zero, 1 # load 1 as a mask
sll $t3, $t3, 31 # move the mask to appropriate position
addi $t4, $zero, 32 # loop counter
loop:

and $t1, $t0, $t3 # and the input with the mask
beq $t1, $zero, print # Branch to print if its 0

add $t1, $zero, $zero # Zero out $t1
addi $t1, $zero, 1 # Put a 1 in $t1
j print


print: li $v0, 1
move $a0, $t1
syscall

srl $t3, $t3, 1
addi $t4, $t4, -1
bne $t4, $zero, loop

jr $ra

Post what you've got and what part of it is giving you trouble.

I figured it out:

# Brent Wagner

.data
ask_str1: .asciiz "Enter a number PLEASE: "
result_str: .asciiz ""
.align 2

.text
.globl __start

__start:
# ask and store the first number
li $v0, 4
la $a0, ask_str1
syscall
li $v0, 5
syscall
move $a0, $v0

jal print_bin

# New Line
li $v0, 11
li $a0, 10
syscall

j __start

print_bin:

add $t0, $zero, $a0 # put our input ($a0) into $t0
add $t1, $zero, $zero # Zero out $t1
addi $t3, $zero, 1 # load 1 as a mask
sll $t3, $t3, 31 # move the mask to appropriate position
addi $t4, $zero, 32 # loop counter
loop:

and $t1, $t0, $t3 # and the input with the mask
beq $t1, $zero, print # Branch to print if its 0

add $t1, $zero, $zero # Zero out $t1
addi $t1, $zero, 1 # Put a 1 in $t1
j print


print: li $v0, 1
move $a0, $t1
syscall

srl $t3, $t3, 1
addi $t4, $t4, -1
bne $t4, $zero, loop

jr $ra

could someone briefly describe how this MIPS code works please?

i get the syscalls, and the registers and all.. but how does it actually convert the decimal into binary? I cant seem to understand the logic behind it..

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.