Assignment No. 3

Write 64 bit 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.

;x86 ALP for Hex to BCD and BCD to Hex Conversion
;As per the statement we need to write 64-bit ALP.
;Use this code for reference only and not as a final program
;Use syscall and 64-bit registers to convert the code to 64-bit

%macro dispmsg 2
mov eax,04
mov ebx,01
mov ecx,%1
mov edx,%2
int 80h

%macro accept 2
mov eax,03
mov ebx,0
mov ecx,%1
mov edx,%2
int 80h

%macro exit 0
dispmsg thankmsg,thankmsg_len
mov eax,01        ;Exit
mov ebx,00
int 80h
%endm exit

section .data
menumsg db 10,10,’###### Menu for Code Conversion ######’
db 10,13,’1: Hex to BCD’
db 10,13,’2: BCD to Hex’
db 10,13,’3: Exit’
db 10,10,’Please Enter Choice::’
menumsg_len equ $-menumsg
wrchmsg db 10,10,’Wrong Choice Entered….Please try again!!!’,10,10
wrchmsg_len equ $-wrchmsg

hexinmsg db 10,10,’Please enter 4 digit hex number::’
hexinmsg_len equ $-hexinmsg

bcdopmsg db 10,10,’BCD Equivalent::’
bcdopmsg_len equ $-bcdopmsg

bcdinmsg db 10,10,’Please enter 5 digit BCD number::’
bcdinmsg_len equ $-bcdinmsg

hexopmsg db 10,10,’Hex Equivalent::’
hexopmsg_len equ $-hexopmsg

thankmsg db 10,13,’Thank you for using Program by Prof. Dhokane Rahul’
thankmsg_len equ $-thankmsg

section .bss
numascii resb 06        ;common buffer for choice, hex and bcd input
opbuff resb 05
dnumbuff resb 08

section .text
global _start

dispmsg menumsg,menumsg_len
accept numascii,2

cmp byte [numascii],’1′
jne case2
call hex2bcd_proc

jmp _start

case2:    cmp byte [numascii],’2′
jne case3
call bcd2hex_proc
jmp _start

case3:    cmp byte [numascii],’3′
je exit
dispmsg wrchmsg,wrchmsg_len
jmp _start


dispmsg hexinmsg,hexinmsg_len
accept numascii,5
call packnum
mov ecx,5
mov ax,bx
mov bx,10
h2bup1:    mov dx,0
div bx
push edx
loop h2bup1
mov edi,opbuff
mov ecx,5
h2bup2:    pop edx
add dl,30h
mov [edi],dl
inc edi
loop h2bup2

dispmsg bcdopmsg,bcdopmsg_len
dispmsg opbuff,5

dispmsg bcdinmsg,bcdinmsg_len
accept numascii,6

dispmsg hexopmsg,hexopmsg_len

mov esi,numascii
mov ecx,05
mov eax,0
mov ebx,0ah

b2hup1:    mov edx,0
mul ebx
mov dl,[esi]
sub dl,30h
add eax,edx
inc esi
loop b2hup1
mov ebx,eax
call disp32_num

mov bx,0
mov ecx,04
mov esi,numascii
rol bx,04
mov al,[esi]
cmp al,’9′
jbe sub30
cmp al,’F’
jbe sub37
cmp al,’f’
jbe sub57
sub57:    sub al,20h
sub37:    sub al,07h
sub30:    sub al,30h
add bl,al
inc esi
loop up1

mov edi,dnumbuff    ;point esi to buffer

mov ecx,08        ;load number of digits to display

rol ebx,4        ;rotate number left by four bits
mov dl,bl        ;move lower byte in dl
and dl,0fh        ;mask upper digit of byte in dl
add dl,30h        ;add 30h to calculate ASCII code
cmp dl,39h        ;compare with 39h
jbe dispskip1        ;if less than 39h akip adding 07 more
add dl,07h        ;else add 07

mov [edi],dl        ;store ASCII code in buffer
inc edi            ;point to next byte
loop dispup1        ;decrement the count of digits to display
;if not zero jump to repeat

dispmsg dnumbuff+3,5

Steps to run the above program is as follows:

dhokane@dhokane-ThinkCentre-A70:~$ nasm -f elf p3.asm
dhokane@dhokane-ThinkCentre-A70:~$ ld -m elf_i386 -s -o p3  p3.o
dhokane@dhokane-ThinkCentre-A70:~$ ./p3

###### Menu for Code Conversion ######
1: Hex to BCD
2: BCD to Hex
3: Exit

Please Enter Choice::1

Please enter 4 digit hex number::ffff

BCD Equivalent::65535

###### Menu for Code Conversion ######
1: Hex to BCD
2: BCD to Hex
3: Exit

Please Enter Choice::2

Please enter 5 digit BCD number::65535

Hex Equivalent::0FFFF

###### Menu for Code Conversion ######
1: Hex to BCD
2: BCD to Hex
3: Exit

Please Enter Choice::3
Thank you for using Program by Prof. Dhokane Rahul

Share Button

Leave a Reply

Your email address will not be published. Required fields are marked *