%macro scall 4 ;macro declaration with 4 parameters
mov eax,%1 ;1st parameter has been moved to eax
mov ebx,%2 ;2nd parameter has been moved to ebx
mov ecx,%3 ;3rd parameter has been moved to ecx
mov edx,%4 ;4th parameter has been moved to edx
int 80h ;Call the Kernal
%endmacro ;end of macro
section .data ;.data begins here
m1 db 10d,13d,"Enter a string: " ;m1 variable initialised with string
l1 equ $-m1 ;l1 stores length of string m1
m2 db 10d,13d,"Entered String: " ;m2 variable initialised with string
l2 equ $-m2 ;l2 stores length of string m2
m3 db 10d,13d,"Length: " ;m3 variable initialised with string
l3 equ $-m3 ;l3 stores length of string m3
section .bss ;.bss begins here
buffer resb 50 ;buffer array of size 50
size equ $-buffer ;size variable to have input
count resd 1 ;to store size of buffer
dispnum resb 8 ;to display 8 digit length
section .text ;.text begins here
global _start ;moving to _start label
_start: ;_start label
scall 4,1,m1,l1 ;macro call to display m1
scall 3,0,buffer,size ;macro call to input buffer
mov [count],eax ;length of buffer gets stored in count
scall 4,1,m2,l2 ;macro call to display m2
scall 4,1,buffer,[count] ;macro call to display buffer
scall 4,1,m3,l3 ;macro call to display m3
mov esi,dispnum+7 ;esi points to 8th location of dispnum
mov eax,[count] ;eax now stores value of count
mov ecx,8 ;ecx gets initiaised with 8
dec eax ;decrement the value of eax
UP1: ;UP1 label
mov edx,0 ;edx gets initiaised with 0
mov ebx,10 ;ebx gets initialised with 10
div ebx ;divide the contents of eax by ebx
add dl,30h ;add 30 to the remainder
mov [esi],dl ;dl content gets copied at esi
dec esi ;decrement esi
loop UP1 ;jump to UP1 till ecx becomes 0
scall 4,1,dispnum,8 ;macro call to display dispnum array
mov eax,1 ;sys_exit function
mov ebx,0 ;Sucessful Termination
int 80h ;Call the Kernel
JW1hY3JvIHNjYWxsIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7bWFjcm8gZGVjbGFyYXRpb24gd2l0aCA0IHBhcmFtZXRlcnMKbW92IGVheCwlMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7MXN0IHBhcmFtZXRlciBoYXMgYmVlbiBtb3ZlZCB0byBlYXgKbW92IGVieCwlMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Mm5kIHBhcmFtZXRlciBoYXMgYmVlbiBtb3ZlZCB0byBlYngKbW92IGVjeCwlMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7M3JkIHBhcmFtZXRlciBoYXMgYmVlbiBtb3ZlZCB0byBlY3gKbW92IGVkeCwlNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7NHRoIHBhcmFtZXRlciBoYXMgYmVlbiBtb3ZlZCB0byBlZHgKaW50IDgwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Q2FsbCB0aGUgS2VybmFsCiVlbmRtYWNybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO2VuZCBvZiBtYWNybwoKc2VjdGlvbiAuZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7LmRhdGEgYmVnaW5zIGhlcmUKICAgICAgICBtMSBkYiAxMGQsMTNkLCJFbnRlciBhIHN0cmluZzogIiAgICA7bTEgdmFyaWFibGUgaW5pdGlhbGlzZWQgd2l0aCBzdHJpbmcKICAgICAgICBsMSBlcXUgJC1tMSAgICAgICAgICAgICAgICAgICAgICAgICA7bDEgc3RvcmVzIGxlbmd0aCBvZiBzdHJpbmcgbTEKICAgICAgICBtMiBkYiAxMGQsMTNkLCJFbnRlcmVkIFN0cmluZzogIiAgICA7bTIgdmFyaWFibGUgaW5pdGlhbGlzZWQgd2l0aCBzdHJpbmcKICAgICAgICBsMiBlcXUgJC1tMiAgICAgICAgICAgICAgICAgICAgICAgICA7bDIgc3RvcmVzIGxlbmd0aCBvZiBzdHJpbmcgbTIKICAgICAgICBtMyBkYiAxMGQsMTNkLCJMZW5ndGg6ICIgICAgICAgICAgICA7bTMgdmFyaWFibGUgaW5pdGlhbGlzZWQgd2l0aCBzdHJpbmcKICAgICAgICBsMyBlcXUgJC1tMyAgICAgICAgICAgICAgICAgICAgICAgICA7bDMgc3RvcmVzIGxlbmd0aCBvZiBzdHJpbmcgbTMKICAgICAgICAKc2VjdGlvbiAuYnNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7LmJzcyBiZWdpbnMgaGVyZQogICAgICAgIGJ1ZmZlciByZXNiIDUwICAgICAgICAgICAgICAgICAgICAgIDtidWZmZXIgYXJyYXkgb2Ygc2l6ZSA1MAogICAgICAgIHNpemUgZXF1ICQtYnVmZmVyICAgICAgICAgICAgICAgICAgIDtzaXplIHZhcmlhYmxlIHRvIGhhdmUgaW5wdXQKICAgICAgICBjb3VudCByZXNkIDEgICAgICAgICAgICAgICAgICAgICAgICA7dG8gc3RvcmUgc2l6ZSBvZiBidWZmZXIKICAgICAgICBkaXNwbnVtIHJlc2IgOCAgICAgICAgICAgICAgICAgICAgICA7dG8gZGlzcGxheSA4IGRpZ2l0IGxlbmd0aAogICAgICAgIApzZWN0aW9uIC50ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsudGV4dCBiZWdpbnMgaGVyZQogICAgICAgIGdsb2JhbCBfc3RhcnQgICAgICAgICAgICAgICAgICAgICAgIDttb3ZpbmcgdG8gX3N0YXJ0IGxhYmVsCiAgICAgICAgX3N0YXJ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO19zdGFydCBsYWJlbAogICAgICAgICAgICAgICAgc2NhbGwgNCwxLG0xLGwxICAgICAgICAgICAgIDttYWNybyBjYWxsIHRvIGRpc3BsYXkgbTEKICAgICAgICAgICAgICAgIHNjYWxsIDMsMCxidWZmZXIsc2l6ZSAgICAgICA7bWFjcm8gY2FsbCB0byBpbnB1dCBidWZmZXIKICAgICAgICAgICAgICAgIG1vdiBbY291bnRdLGVheCAgICAgICAgICAgICA7bGVuZ3RoIG9mIGJ1ZmZlciBnZXRzIHN0b3JlZCBpbiBjb3VudAogICAgICAgICAgICAgICAgc2NhbGwgNCwxLG0yLGwyICAgICAgICAgICAgIDttYWNybyBjYWxsIHRvIGRpc3BsYXkgbTIKICAgICAgICAgICAgICAgIHNjYWxsIDQsMSxidWZmZXIsW2NvdW50XSAgICA7bWFjcm8gY2FsbCB0byBkaXNwbGF5IGJ1ZmZlcgogICAgICAgICAgICAgICAgc2NhbGwgNCwxLG0zLGwzICAgICAgICAgICAgIDttYWNybyBjYWxsIHRvIGRpc3BsYXkgbTMKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgbW92IGVzaSxkaXNwbnVtKzcgICAgICAgICAgIDtlc2kgcG9pbnRzIHRvIDh0aCBsb2NhdGlvbiBvZiBkaXNwbnVtCiAgICAgICAgICAgICAgICBtb3YgZWF4LFtjb3VudF0gICAgICAgICAgICAgO2VheCBub3cgc3RvcmVzIHZhbHVlIG9mIGNvdW50CiAgICAgICAgICAgICAgICBtb3YgZWN4LDggICAgICAgICAgICAgICAgICAgO2VjeCBnZXRzIGluaXRpYWlzZWQgd2l0aCA4CiAgICAgICAgICAgICAgICBkZWMgZWF4ICAgICAgICAgICAgICAgICAgICAgO2RlY3JlbWVudCB0aGUgdmFsdWUgb2YgZWF4CiAgICAgICAgVVAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1VQMSBsYWJlbAogICAgICAgICAgICAgICAgbW92IGVkeCwwICAgICAgICAgICAgICAgICAgIDtlZHggZ2V0cyBpbml0aWFpc2VkIHdpdGggMAogICAgICAgICAgICAgICAgbW92IGVieCwxMCAgICAgICAgICAgICAgICAgIDtlYnggZ2V0cyBpbml0aWFsaXNlZCB3aXRoIDEwCiAgICAgICAgICAgICAgICBkaXYgZWJ4ICAgICAgICAgICAgICAgICAgICAgO2RpdmlkZSB0aGUgY29udGVudHMgb2YgZWF4IGJ5IGVieAogICAgICAgICAgICAgICAgYWRkIGRsLDMwaCAgICAgICAgICAgICAgICAgIDthZGQgMzAgdG8gdGhlIHJlbWFpbmRlcgogICAgICAgICAgICAgICAgbW92IFtlc2ldLGRsICAgICAgICAgICAgICAgIDtkbCBjb250ZW50IGdldHMgY29waWVkIGF0IGVzaSAKICAgICAgICAgICAgICAgIGRlYyBlc2kgICAgICAgICAgICAgICAgICAgICA7ZGVjcmVtZW50IGVzaQogICAgICAgICAgICAgICAgbG9vcCBVUDEgICAgICAgICAgICAgICAgICAgIDtqdW1wIHRvIFVQMSB0aWxsIGVjeCBiZWNvbWVzIDAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc2NhbGwgNCwxLGRpc3BudW0sOCAgICAgICAgIDttYWNybyBjYWxsIHRvIGRpc3BsYXkgZGlzcG51bSBhcnJheQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBtb3YgZWF4LDEgICAgICAgICAgICAgICAgICAgO3N5c19leGl0IGZ1bmN0aW9uCiAgICAgICAgICAgICAgICBtb3YgZWJ4LDAgICAgICAgICAgICAgICAgICAgO1N1Y2Vzc2Z1bCBUZXJtaW5hdGlvbgogICAgICAgICAgICAgICAgaW50IDgwaCAgICAgICAgICAgICAgICAgICAgIDtDYWxsIHRoZSBLZXJuZWw=