;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; WRITTEN BY: JEFFREY VALLE					  ;
; WRITTEN ON: JUNE 16, 2023					  ;
; WRITTEN TO: RECEIVE AND PRINT THE USER'S INPUT ONTO THE SCREEN. ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

format		ELF64		executable			3		; TELL THE ASSEMBLER TO BUILD THIS PROGRAM INTO AN ELF64 EXECUTABLE BINARY.

segment 	readable 	executable					; TELL THE ASSEMBLER THAT THIS IS WHERE THE PROGRAM INSTRUCTIONS WILL RESIDE WITHIN.

entry $										; TELL THE ASSEMBLER THAT THIS IS WHERE THE PROGRAM INSTRUCTIONS BEGIN.


		mov		rax,				1		; COPY THE FILE DESCRIPTOR: STANDARD OUTPUT CODE INTO THE RAX REGISTER.
		mov		rdi,				1		; COPY THE WRITE SYSTEM KERNEL CALL CODE INTO THE RDI REGISTER.
		mov		rsi,				greet		; LOAD THE CONTENTS OF THE VARIABLE NAMED 'text_1' INTO THE RSI REGISTER.
		mov		rdx,				19		; LOAD THE NUBMBER OF BYTES THAT ARE CONTAINED IN 'text_1' INTO THE RDX REGISTER.
		syscall								; PERFORM THE SYSTEM CALL TO WRITE THE CONTENTS OF 'text_1' TO THE SCREEN.


		mov		rax,				0		; COPY THE FILE DESCRIPTOR: STANDARD INPUT CODE INTO THE RAX REGISTER.
		mov		rdi,				0		; COPY THE READ SYSTEM CALL CODE INTO THE RDI REGISTER.
		mov		rsi,				name		; RECORD THE USER'S INPUT AND CONTAIN IT IN THE VARIABLE 'name' IN THE RDX REGISTER.
		mov		rdx,				12		; LOAD THE NUMBER OF BYTES RESERVED TO CONTAIN THE USER'S INPUT.
		syscall								; PERFORM THE SYSTEM CALL TO RECEIVE THE USER'S INPUT FROM THE KEYBOARD.


		mov		rax,				1		; COPY THE FILE DESCRIPTOR: STANDARD OUTPUT CODE INTO THE RAX REGISTER.
		mov		rdi,				1		; COPY THE WRITE SYSTEM KERNEL CALL CODE INTO THE RDI REGISTER.
		mov		rsi,				hello		; LOAD THE CONTENTS CONTAINED IN THE VARIABLE NAMED 'text_2' INTO THE RSI REGISTER.
		mov		rdx,				7		; LOAD THE NUMBER OF BYTES THAT ARE CONTAINED IN 'text_1' INTO THE RDX REGISTER.
		syscall								; PERFORM THE SYSTEM CALL TO WRITE THE CONTENTS OF 'text_1' ONTO THE SCREEN.


		mov		rax,				1		; COPY THE FILE DESCRIPTOR: STANDARD OUTPUT CODE INTO THE RAX REGISTER.
		mov		rdi,				1		; COPY THE WRITE SYSTEM KERNEL CALL CODE INTO THE RDI REGISTER.
		mov		rsi,				name		; LOAD THE CONTENTS CONTAINED IN THE VARIABLE NAMED 'name' INTO THE RSI REGISTER.
		mov		rdx,				12		; LOAD THE NUMBER OF BYTES RESERVED TO CONTAIN THE USER'S INPUT.
		syscall								; PERFORM THE SYSTEM CALL TO WRITE THE CONTENTS OF 'name' ONTO THE SCREEN.

		mov		rax,				1
		mov		rdi,				1
		mov		rsi,				period
		mov		rdx,				2		
		syscall


		mov		rax,				1
		mov		rdi,				1
		mov		rsi,				bye
		mov		rdx,				45
		syscall


		mov		rax,				60		; COPY THE EXIT SYSTEM KERNEL CALL CODE INTO THE RAX REGISTER.
		mov		rdi,				0		; COPY THE VALUE OF ZERO INTO THE RDI REGISTER TO SIGNIFY A SUCCESSFUL PROGRAM EXIT.
		syscall								; PERFORM THE SYSTEM CALL TO TERMINATE AND EXIT THE PROGRAM.

segment		readable 	writable					; DECLARE AND INITIALIZE VARIABLES:
greet		db		"What is your name? "				; CREATE A VARIABLE NAMED 'text_1' AND CONTAIN THE STRING TO BE OUTPUTTED TO THE SCREEN.
hello		db		"Hello, " 					; CREATE A VARIABLE NAMED 'text_2' AND CONTAIN THE STRING TO BE OUTPUTTED TO THE SCREEN.
period		db		".",10
bye		db		"It was nice to meet you, I must go now. Bye!", 10
name		rb		12						; CREATE A VARIABLE NAMED 'name' AND RESERVE 16 BYTES FOR COLLECTING THE USER'S INPUT.

