;Assignment No.	: 2
;Assignment Name: Write X86/64 ALP to accept a string and to display its length.
;---------------------------------------------------------------------
section    .data
 
	msg		db	10,10,"Enter the string:	"
	msg_len	equ	$-msg
 
	smsg		db	10,10,"The length of string is:	"
	smsg_len	equ	$-smsg
 
;---------------------------------------------------------------------
Section   .bss
 
    string resb 50
    stringl equ $-string
    count resb 1
	char_ans	resb	2
;---------------------------------------------------------------------
%macro  Print   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
 
%macro	Exit	0
	mov  rax, 60
	mov  rdi, 0
	syscall
%endmacro
 
;---------------------------------------------------------------------
section    .text
	global   _start
_start:
	Print	msg, msg_len
	Read string, stringl
	mov [count], rax
 
    Print smsg, smsg_len
    mov rax, [count]
    call Display
	Exit
;--------------------------------------------------------------------	
Display:
	mov 		rbx,16			; divisor=16 for hex
	mov 		rcx,2			; number of digits 
	mov 		rsi,char_ans+1		; load last byte address of char_ans buffer in rsi
 
cnt
:	mov 		rdx
,0			; make rdx
=0 (as in 
div instruction rdx
:rax
/rbx
) 
	cmp 		dl, 09h			; check for remainder in rdx
	jbe  	add30
	add  	dl, 07h 
add30:
	add 		dl,30h			; calculate ASCII code
	mov 		[rsi],dl			; store it in buffer
	dec 		rsi				; point to one byte back
 
	dec 		rcx				; decrement count
	jnz 		cnt				; if not zero repeat
 
	Print 	char_ans,2		; display result on screen
ret
;----------------------------------------------------------------
				O0Fzc2lnbm1lbnQgTm8uCTogMgo7QXNzaWdubWVudCBOYW1lOiBXcml0ZSBYODYvNjQgQUxQIHRvIGFjY2VwdCBhIHN0cmluZyBhbmQgdG8gZGlzcGxheSBpdHMgbGVuZ3RoLgo7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnNlY3Rpb24gICAgLmRhdGEKCgltc2cJCWRiCTEwLDEwLCJFbnRlciB0aGUgc3RyaW5nOgkiCgltc2dfbGVuCWVxdQkkLW1zZwoKCXNtc2cJCWRiCTEwLDEwLCJUaGUgbGVuZ3RoIG9mIHN0cmluZyBpczoJIgoJc21zZ19sZW4JZXF1CSQtc21zZwoKOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTZWN0aW9uICAgLmJzcwoJCiAgICBzdHJpbmcgcmVzYiA1MAogICAgc3RyaW5nbCBlcXUgJC1zdHJpbmcKICAgIGNvdW50IHJlc2IgMQoJY2hhcl9hbnMJcmVzYgkyCjstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJW1hY3JvICBQcmludCAgIDIKCW1vdiAgIHJheCwgMQoJbW92ICAgcmRpLCAxCgltb3YgICByc2ksICUxCgltb3YgICByZHgsICUyCglzeXNjYWxsCiVlbmRtYWNybwoKJW1hY3JvICBSZWFkICAgMgoJbW92ICAgcmF4LCAwCgltb3YgICByZGksIDAKCW1vdiAgIHJzaSwgJTEKCW1vdiAgIHJkeCwgJTIKCXN5c2NhbGwKJWVuZG1hY3JvCgolbWFjcm8JRXhpdAkwCgltb3YgIHJheCwgNjAKCW1vdiAgcmRpLCAwCglzeXNjYWxsCiVlbmRtYWNybwoKOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzZWN0aW9uICAgIC50ZXh0CglnbG9iYWwgICBfc3RhcnQKX3N0YXJ0OgoJUHJpbnQJbXNnLCBtc2dfbGVuCglSZWFkIHN0cmluZywgc3RyaW5nbAoJbW92IFtjb3VudF0sIHJheAoKICAgIFByaW50IHNtc2csIHNtc2dfbGVuCiAgICBtb3YgcmF4LCBbY291bnRdCiAgICBjYWxsIERpc3BsYXkKCUV4aXQKOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQpEaXNwbGF5OgoJbW92IAkJcmJ4LDE2CQkJOyBkaXZpc29yPTE2IGZvciBoZXgKCW1vdiAJCXJjeCwyCQkJOyBudW1iZXIgb2YgZGlnaXRzIAoJbW92IAkJcnNpLGNoYXJfYW5zKzEJCTsgbG9hZCBsYXN0IGJ5dGUgYWRkcmVzcyBvZiBjaGFyX2FucyBidWZmZXIgaW4gcnNpCgpjbnQ6CW1vdiAJCXJkeCwwCQkJOyBtYWtlIHJkeD0wIChhcyBpbiBkaXYgaW5zdHJ1Y3Rpb24gcmR4OnJheC9yYngpCglkaXYgCQlyYngKCgljbXAgCQlkbCwgMDloCQkJOyBjaGVjayBmb3IgcmVtYWluZGVyIGluIHJkeAoJamJlICAJYWRkMzAKCWFkZCAgCWRsLCAwN2ggCmFkZDMwOgoJYWRkIAkJZGwsMzBoCQkJOyBjYWxjdWxhdGUgQVNDSUkgY29kZQoJbW92IAkJW3JzaV0sZGwJCQk7IHN0b3JlIGl0IGluIGJ1ZmZlcgoJZGVjIAkJcnNpCQkJCTsgcG9pbnQgdG8gb25lIGJ5dGUgYmFjawoKCWRlYyAJCXJjeAkJCQk7IGRlY3JlbWVudCBjb3VudAoJam56IAkJY250CQkJCTsgaWYgbm90IHplcm8gcmVwZWF0CgkKCVByaW50IAljaGFyX2FucywyCQk7IGRpc3BsYXkgcmVzdWx0IG9uIHNjcmVlbgpyZXQKOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0=