; THIS CODE HAS NOT BEEN TESTED AND IS NOT FULLY OPERATIONAL. ; Problem Statement: Write X86/64 ALP to convert 4-digit Hex number into its equivalent BCD number and 5-digit BCD number into its equivalent HEX number. ; Make your program user friendly to accept the choice from user for: (a) HEX to BCD b) BCD to HEX (c) EXIT. ; Display proper strings to prompt the user while accepting the input and displaying the result. (wherever necessary, use 64-bit registers.) ; Code from Microprocessor (SPPU - Second Year - Computer Engineering - Content) repository on KSKA Git: https://git.kska.io/sppu-se-comp-content/Microprocessor/ ; BEGINNING OF CODE %macro print 2 mov rax,1 mov rdi,1 mov rsi,%1 mov rdx,%2 syscall %endmacro %macro accept 2 mov rax,0 mov rdi,0 mov rsi,%1 mov rdx,%2 syscall %endmacro section .data title db 10,"An ALP to convert BCD to HEX and vise-versa.",10 title_len equ $-title menu db 10,"------ Select an option ------",10,"1 -> HEX to BCD",10,"2 -> BCD to HEX",10,"3 -> Exit",10 menu_len equ $-menu hex_in db 10,"Enter your 4 digit HEX number: ",10 hex_inlen equ $-hex_in bcd_out db 10,"The equivalent BCD number is: ",10 bcd_out_len equ $-bcd_out bcd_in db 10,"Enter your BCD number: ",10 bcd_inlen equ $-bcd_in hex_out db 10,"The equivalent HEX number is: ",10 hex_out_len equ $-hex_out section .bss numascii resb 6 ;for input opbuff resb 5 ;to dnumbuff resb 08 section .txt global _start: _start: print title,title_len print menu,menu_len accept numascii,2 ;input user choice using accept macro(2 bytes-1 for choice and 1 for enter) cmp byte[numascii],'1' ;ascii of 1 is 31 jne case2 call hextobcd case2: cmp byte[numascii],'2' jne case3 call bcdtohex case3: cmp byte[numascii],'3' je exit exit: mov rax,60 mov rdx,0 syscall hextobcd: print hex_in,hex_inlen accept numascii,5 call packnum mov rcx,0 mov ax,bx mov bx,0Ah h2bup1: mov rax, 0 ; Clear rax before each division div bx push rdx inc rcx cmp ax,0 jne h2bup1 h2bup2: pop rdx add dl,30h mov [rdi],dl inc rdi dec rcx jnz h2bup2 packnum: mov bx,0 mov rcx,4 mov rsi,numascii up1: rol bx,04 mov al,[rsi] cmp al,39h jbe skip1 sub al,07h skip1: sub al,30h add bl,al inc rsi loop up1 ret bcdtohex: print bcd_in,bcd_inlen accept numascii ,6 print hex_out,hex_out_len mov rcx,05 mov rsi,numascii mov rax,0 mov rbx,0Ah again1: mov rdx,0 mul rbx mov dl,[rsi] sub dl,30h add rax,rdx inc rsi loop again1 mov rbx,rax call dispnum_32 ret dispnum_32: mov rdi,dnumbuff mov rcx,16 up2: rol rbx,04 mov dl,bl and dl,0Fh add dl,30h cmp dl,39h jbe dskip1 add dl,07h dskip1: mov [rdi],dl inc rdi loop up2 print dnumbuff,16 ret ; END OF CODE