MIPS Decimal to Hex Conversion: How To Guide

  • Thread starter Thread starter trouty323
  • Start date Start date
  • Tags Tags
    Mips
Click For Summary

Discussion Overview

The discussion revolves around writing MIPS assembly code to convert a decimal number to its hexadecimal equivalent. Participants explore different methods and algorithms for achieving this conversion, including the use of bit manipulation techniques and ASCII value adjustments.

Discussion Character

  • Technical explanation
  • Exploratory
  • Homework-related

Main Points Raised

  • One participant expresses uncertainty about how to approach the conversion, questioning whether to manipulate ASCII values or use shift/rotation methods.
  • Another participant clarifies that the conversion pertains to integers, not floating-point numbers, and suggests referring to a Wikipedia article on hexadecimal conversion.
  • A participant shares a specific algorithm involving user input of an integer, rotating the number 4 bits to the left, masking the bits, and adjusting values based on whether the masked result is less than or equal to 9 or greater than 9.
  • A later reply offers feedback on the shared code, indicating that it appears to work correctly but suggests a minor correction regarding the instruction for exiting the program.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the best method for conversion, as different approaches are discussed, and feedback is provided on the proposed code without resolving the overall question of the most effective algorithm.

Contextual Notes

The discussion includes varying levels of testing and validation of the proposed code, with some assumptions about the correctness of the methods used. There is also a lack of detailed exploration into potential edge cases or limitations of the algorithm presented.

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.
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
11K
  • · Replies 43 ·
2
Replies
43
Views
7K
  • · Replies 8 ·
Replies
8
Views
1K
Replies
4
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 14 ·
Replies
14
Views
3K
  • · Replies 8 ·
Replies
8
Views
4K
  • · Replies 2 ·
Replies
2
Views
7K
  • · Replies 17 ·
Replies
17
Views
4K
  • · Replies 1 ·
Replies
1
Views
6K