OneCompiler

Assignment 8

232

global _start
;###### MACRO AREA ######
%macro display 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro read 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
;###### DATA SECTION ######
section .data
welmsg db 10,"Welcome to Code conversion program by Neeraj Kumar Yadav "
wmsglen equ welmsgthxmsgdb10,"ThankyouforusingcodebyNeerajKumarYadav",10thxmsglenequ-welmsg thxmsg db 10,"Thank you for using code by Neeraj Kumar Yadav ",10 thxmsglen equ -thxmsg
menumsg db 10,10,"####### MENU OPTIONS #######"
db 10,"1. HEX to BCD"
db 10,"2. BCD to HEX"
db 10,"3. EXIT"
db 10,10,"Please enter your choice:: "
menumsglen equ menumsginvmsgdb10,10,"Youhaveenteredwrongchoice...Pleasetryagain...",10imsglenequ-menumsg invmsg db 10,10,"You have entered wrong choice... Please try again...",10 imsglen equ -invmsg
h2bwmsg db 10,"Welcome to Hex to BCD Code conversion"
hmsglen equ h2bwmsgb2hwmsgdb10,"WelcometoBCDtoHexCodeconversion"bmsglenequ-h2bwmsg b2hwmsg db 10,"Welcome to BCD to Hex Code conversion" bmsglen equ -b2hwmsg
hinmsg db 10,"Please Enter 4 digit HEX Number(In CAPITAL):: "
hinmsglen equ hinmsgboutmsgdb10,10,"EquivalentBCD::"boutmsglenequ-hinmsg boutmsg db 10,10,"Equivalent BCD:: " boutmsglen equ -boutmsg
binmsg db 10,"Please Enter 5 digit BCD Number:: "
binmsglen equ binmsghoutmsgdb10,10,"EquivalentHEX::"houtmsglenequ-binmsg houtmsg db 10,10,"Equivalent HEX:: " houtmsglen equ -houtmsg
;###### BSS SECTION ######
section .bss
chbuff resb 2
hexinbuff resb 5
boutcnt resb 1
boutbuff resb 5
binbuff resb 6
d8buff resb 8
;####### CODE SECTION
section .text
_start:
display welmsg,wmsglen ;Display welcome message
menu:
display menumsg,menumsglen ;Display menu message
read chbuff,2 ;Accept choice
mov al,[chbuff]
cmp al,'1'
jne case2
call h2b
jmp menu
case2: cmp al,'2'
jne case3
call b2h
jmp menu
case3: cmp al,'3'
je exit
display invmsg,imsglen
jmp menu
exit:
display thxmsg,thxmsglen
mov rax,60
mov rdi,0
syscall
;######## PROCEDURE AREA ########
;##### Procedure to convert 4 digit hex number to BCD
h2b:
display h2bwmsg, hmsglen
display hinmsg,hinmsglen
read hexinbuff,5
call convert4
mov ax,bx ;moving accepted number in AX
mov bx,0ah ;divisor (base of decimal number system)
mov byte [boutcnt],0
h2bup1:
mov dx,0
div bx ; DX:AX / BX = Q-> AX, R-> DX
push rdx
inc byte [boutcnt]
cmp ax,0
jne h2bup1
mov rdi,boutbuff ;Initialize pointer in RDI
xor rcx,rcx
mov cl,[boutcnt] ;load digit count
h2bup2:
pop rdx
add dl,30h ;calculate ASCII value of BCD digit
mov [rdi],dl
inc rdi
loop h2bup2
display boutmsg,boutmsglen
xor rcx,rcx
mov cl,[boutcnt] ;load digit count
display boutbuff,rcx
ret
;##### Procedure to convert 5 digit BCD number to Hex
b2h: display b2hwmsg, bmsglen
display binmsg,binmsglen
read binbuff,6
mov rcx,5
mov rsi,binbuff
xor eax,eax
mov ebx,10 ;Multiplier
b2hup1:
mul ebx ;eax X ebx = edx:eax
mov dl,[rsi]
sub dl,30h
add eax,edx
inc rsi
loop b2hup1
mov ebx,eax
display houtmsg,houtmsglen
call disp8
ret
;#####Procedure to convert 4 byte ASCII values to 4 digit Hex number
; and return the Hex number in BX
convert4:
MOV BX,0
MOV RSI,hexinbuff ;Pointing to buffer containing ASCII values
MOV RCX,4 ;NUmber of Digits
c4up:
rol bx,4
mov al,[rsi]
sub al,30h
cmp al,9
jbe c4skip
sub al,7
c4skip: add bl,al
inc rsi
loop c4up
ret
;##### Procedure to display 8 digit number from EBX
disp8:
mov rdi,d8buff
mov rcx,8
d8up:
rol ebx,4
mov al,bl
and al,0fh
add al,30h
cmp al,39h
jbe d8skip
add al,07h
d8skip: mov [rdi],al
inc rdi
loop d8up
display d8buff,8
ret