| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- WORD HEXADECIMAL to ASCII conversion
- section .data
- message db "Stored value in array : " ;simple message declartion
- length equ $-message ; this statement stores value of length of message
- nl db "",10
- nll equ $-nl
- reference_table : db "0123456789ABCDEF" ;reference table is needed for XLAT instruction
- array : dw 0xFACD,0x0E12,0x5432 ;This is the array we wish to print
- ;=======================================================================
- section .bss
- converted_value resw 1 ;this will store the ASCII content of array
- counter resb 1 ;this will store numbers to be converted
- counter_word resb 1 ;to specify that we are converting a word
- %macro PRINT 2 ;macro decalration for print vaule on screen
- mov rax,1
- mov rdi,1
- mov rsi,%1
- mov rdx,%2
- syscall
- %endmacro
- ;=======================================================================
- section .text
- global _start
- _start:
- PRINT message,length ;Print the message
- mov byte[counter],3 ;initialize counter (number of words to print)
- mov r8,array ;Give the source address by storing in RSI register
- loop_number:
- mov byte[counter_word],2 ;as word contains 2 bytes (for double word 4 bytes)
- ;this loop is for word conversion
- loop_word:
- rol word[r8],8 ;To take values from MSB to LSB
- mov r9,converted_value ;Give the Destination address by storing in RDI register
- CALL HEX_ASCII ;Call the conversion Routine
- PRINT converted_value,2
- dec byte[counter_word]
- jnz loop_word
-
- PRINT nl,nll
- add r8,2 ;point to next word to convert
-
- dec byte[counter]
- jnz loop_number
- ;=======================================================================
- ;exit ;EXITING the program
- mov rax,60
- mov rbx,0
- syscall
- ;=======================================================================
- HEX_ASCII:
- mov al,byte[r8] ;Get the byte content pointed by RSI
- mov ah,al ;Make another copy of same byte
- shr al,4 ;Shift by 4 bits to right to get the MSB
- mov ebx,reference_table ;This is necessary for XLAT to work
- XLAT ;This will perform conversion
- mov byte[r9],al ;Move the result(ASCII of MSB) in Destination
- inc r9 ;Point to next byte of destination
- mov al,ah ;Retrive the copy of byte to be converted
- and al,0Fh ;Mask the MSB (We consider only LSB nibble now)
- mov ebx,reference_table ;This is necessary for XLAT to work
- XLAT ;This will perform conversion
- mov byte[r9],al ;Move the result(ASCII of LSB) in Destination
-
- RET
|