MPL 10
MPL 10
data
m1 db 10,"Enter 4-digit Hex number: "
l1 equ $- m1
m2 db 10,"Equivalent BCD number is: "
l2 equ $- m2
emsg db 10,"You entered Invalid Data!!!",
l3 equ $-emsg
;---------------------------------------------------------------------
section .bss
buf resb 6
buf_len: equ $-buf
digitcount resb 1
ans resw 1
char_ans resb 4
;---------------------------------------------------------------------
;macros as per 64-bit convensions
%macro print 2
mov rax,1 ; Function 1 - write
mov rdi,1 ; To stdout
mov rsi,%1 ; String address
mov rdx,%2 ; String size
syscall ; invoke operating system to WRITE
%endmacro
%macro read 2
mov rax,0 ; Function 0 - Read
mov rdi,0 ; from stdin
mov rsi,%1 ; buffer address
mov rdx,%2 ; buffer size
syscall ; invoke operating system to READ
%endmacro
%macro exit 0
mov rax, 60 ; system call 60 is exit
mov rdi,0 ; we want return code 0
syscall ; invoke operating system to exit
%endmacro
;---------------------------------------------------------------
section .text
global _start
_start:
print m1,l1
call accept_num
mov ax,bx
mov rbx,10
back:
xor rdx,rdx
div rbx
push dx ;Remainder
inc byte[digitcount]
print m2, l2
print_bcd:
pop dx
add dl,30h ; possible digits are 0-9 so add 30H only
mov [char_ans],dl ; store character in char_ans
dec byte[digitcount]
jnz print_bcd
exit
;------------------------------------------------------------------
accept_num:
read buf,5 ; buflen = 4 + 1
xor bx,bx
mov rcx,4
mov rsi,buf
next_digit:
shl bx,04
mov al,[rsi]