MIPS Decimal to Hex Conversion: How To Guide

  • Thread starter Thread starter trouty323
  • Start date Start date
  • Tags Tags
    Mips
AI Thread Summary
The discussion centers on writing MIPS code to convert a decimal number to its hexadecimal equivalent. The initial inquiry seeks guidance on the algorithm and methods, such as manipulating ASCII values or using bit manipulation techniques like shifting and rotation. A suggested approach involves prompting the user for an integer input, rotating the number 4 bits to the left, and masking the result to isolate the last four bits. If the masked value is less than or equal to 9, 48 is added to convert it to ASCII; if it's 10 or higher, 55 is added. A sample MIPS code is provided, demonstrating the process of input, conversion, and output. Additionally, a minor correction is noted regarding the use of the instruction to exit the program, emphasizing the need for 'li $v0, 10' instead of 'la $v0, 10'.
trouty323
Messages
23
Reaction score
0
Hello. I was simply wondering if anyone has any idea on how to write a MIPS code to convert a decimal number to its hexadecimal equivalent. I have no idea on how I would go about this. Should I be trying to manipulate the ASCII values in some way? Or should I use some sort of shift/rotation method? I simply do not know the algorithm for completing this task. I'm completely lost.
 
Technology news on Phys.org
You mean integers, I take it? Not floating point?

The wiki on hexadecimal goes through how to convert from base-10 to base-16, and should have what you want:

http://en.wikipedia.org/wiki/Hexadecimal
 
The easiest way that I found was to have the user enter in an integer. I would then use a rotation instruction to rotate it 4 bits to the left. I would then mask those four bits with 0xf(1111). If those 4 digits were less than or equal to 9, I would add 48 to it to get the ASCII value. If it was 10 or above, I would add 55 to it. Here is my code in case anyone was wondering.

Code:
# Write a MIPS code that asks the user for decimal number
# Convert it to hex and print the result

	.data

prompt: .asciiz "Enter the decimal number to convert: "
ans: .asciiz "\nHexadecimal equivalent: "
result: .space 8

	.text
	.globl main

main:

	la $a0, prompt
	li $v0, 4
	syscall

	li $v0, 5
	syscall

	move $t2, $v0

	la $a0, ans
	li $v0, 4
	syscall

	li $t0, 8		        # counter
	la $t3, result		# where answer will be stored

Loop:

	beqz $t0, Exit		# branch to exit if counter is equal to zero
	rol $t2, $t2, 4		# rotate 4 bits to the left
	and $t4, $t2, 0xf	        # mask with 1111
	ble $t4, 9, Sum		# if less than or equal to nine, branch to sum
	addi $t4, $t4, 55	        # if greater than nine, add 55

	b End

	Sum:

		addi $t4, $t4, 48	# add 48 to result

End:

	sb $t4, 0($t3)		# store hex digit into result
	addi $t3, $t3, 1		# increment address counter
	addi $t0, $t0, -1		# decrement loop counter

j Loop

Exit:

	la $a0, result
	li $v0, 4
	syscall

	la $v0, 10
	syscall
 
Your program seems to work correctly, although I have done only minimal testing. One thing you should change is your next to last line. Instead of la $v0, 10, you should have li $v0, 10.
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Back
Top