MIPS Assembly asm Number Converter Write a MARS program that

MIPS Assembly (.asm)

Number Converter: Write a MARS program that can perform conversions between binary, decimal, and hexadecimal representations for positive integers (under 32 bits). Your program should accept a string that follows the following format -- invalid inputs or formats should be rejected. Format: , where the input and output types can be one of \"b\", \"d\", \"h\". Hex inputs will start with 0x and use lower case letters. You should then print the converted answer and prompt the user again (unless the user enters a string starting with e). Here is an example run of this program:
What would you like to convert?
d b 33
100001
What would you like to convert?
b h 100010
0x22
What would you like to convert?
h d 0x23
35
What would you like to convert?
d b 4b
Sorry, invalid format.
What would you like to convert?
f g 43
Sorry, invalid format.
What would you like to convert?
e
Goodbye.

Solution

.LC0:
.string \"Enter any decimal number: \"
.LC1:
.string \"%ld\"
.LC2:
.string \"Equivalent hexadecimal value of decimal number %d: \"
main:
push rbp
mov rbp, rsp
sub rsp, 144
mov DWORD PTR [rbp-12], 1
mov edi, OFFSET FLAT:.LC0
mov eax, 0
call printf
lea rax, [rbp-32]
mov rsi, rax
mov edi, OFFSET FLAT:.LC1
mov eax, 0
call scanf
mov rax, QWORD PTR [rbp-32]
mov QWORD PTR [rbp-8], rax
.L5:
cmp QWORD PTR [rbp-8], 0
je .L2
mov rax, QWORD PTR [rbp-8]
cqo
shr rdx, 60
add rax, rdx
and eax, 15
sub rax, rdx
mov DWORD PTR [rbp-20], eax
cmp DWORD PTR [rbp-20], 9
jg .L3
add DWORD PTR [rbp-20], 48
jmp .L4
.L3:
add DWORD PTR [rbp-20], 55
.L4:
mov eax, DWORD PTR [rbp-12]
lea edx, [rax+1]
mov DWORD PTR [rbp-12], edx
mov edx, DWORD PTR [rbp-20]
cdqe
mov BYTE PTR [rbp-144+rax], dl
mov rax, QWORD PTR [rbp-8]
lea rdx, [rax+15]
test rax, rax
cmovs rax, rdx
sar rax, 4
mov QWORD PTR [rbp-8], rax
jmp .L5
.L2:
mov rax, QWORD PTR [rbp-32]
mov rsi, rax
mov edi, OFFSET FLAT:.LC2
mov eax, 0
call printf
mov eax, DWORD PTR [rbp-12]
sub eax, 1
mov DWORD PTR [rbp-16], eax
.L7:
cmp DWORD PTR [rbp-16], 0
jle .L6
mov eax, DWORD PTR [rbp-16]
cdqe
movzx eax, BYTE PTR [rbp-144+rax]
movsx eax, al
mov edi, eax
call putchar
sub DWORD PTR [rbp-16], 1
jmp .L7
.L6:
mov eax, 0
leave
ret

MIPS Assembly (.asm) Number Converter: Write a MARS program that can perform conversions between binary, decimal, and hexadecimal representations for positive i
MIPS Assembly (.asm) Number Converter: Write a MARS program that can perform conversions between binary, decimal, and hexadecimal representations for positive i

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site