Untitled
unknown
plain_text
3 years ago
1.2 kB
8
Indexable
section .data
prompt: db "Enter a binary number (period to end): "
hex_digits: db "0123456789ABCDEF"
section .bss
input: resb 16
section .text
global _start
_start:
; Print the prompt
mov edi, prompt
xor eax, eax
call printf
; Read the input from the user
mov esi, input
mov edx, 16
xor eax, eax
call scanf
; Convert the binary number to hexadecimal
xor eax, eax
mov esi, input
mov ecx, 0
mov bl, 2
convert_loop:
; Shift the current value of eax left by 4 bits
shl eax, 4
; Get the next digit from the input string
mov dl, [esi + ecx]
inc ecx
; Convert the digit to its hexadecimal value
sub dl, '0'
cmp dl, 10
ja convert_digit
jmp convert_next
convert_digit:
; The digit is a letter, so subtract 'A'-'9'-1 to get the correct value
sub dl, 'A'-'9'-1
convert_next:
; Add the hexadecimal value of the digit to eax
add eax, edx
; Check if we have reached the end of the input string
cmp [esi + ecx], '.'
jne convert_loop
; Print the result
xor edx, edx
mov edi, hex_digits
call puthex
; Exit the program
xor eax, eax
call exitEditor is loading...