Answer:
.data 
programmerName BYTE "PROGRAMMER NAME", 0 
programTitle BYTE "PRINT FIBONACCI NUMBERS WITHIN RANGE", 0 
prompt_1 BYTE "WHAT IS YOUR NAME? ", 0 
prompt_2 BYTE "Enter the number of Fibonacci terms you want to display between [1 - 46]", 0 
num_fibo DWORD ? 
previous1 DWORD ? 
previous2 DWORD ? 
spaces BYTE " ",0 
goodbye BYTE "Goodbye, ", 0 
first2 BYTE "1 1 ", 0 
first1 BYTE "1", 0 
temp DWORD ? 
moduloFive DWORD 5 
UPPERLIMIT = 46 
LOWERLIMIT = 1 
 
;user's name 
buffer BYTE 21 DUP(0) 
byteCount DWORD ? 
 
;greet the user 
hi BYTE "Hi, ",0 
 
;validate 
highError BYTE "The number you entered is too high! Please enter number below 46", 0 
lowError BYTE "The number you entered is too low! Please eneter number above 1", 0 
 
;EC -> Setting Background Color and Text Color 
val1 DWORD 11 
val2 DWORD 16 
 
.code 
main PROC 
 ; setting text color to teal 
 mov eax, val2 
 imul eax, 16 
 add eax, val1 
 call setTextColor 
 
 ; introduction 
 mov edx, OFFSET programTitle 
 call WriteString 
 mov edx, OFFSET programmerName 
 call WriteString 
 call CrLf 
 
 ; EC Prompt 
 mov edx, OFFSET ec_prompt 
 call WriteString 
 call CrLf 
 
 
 mov edx, OFFSET prompt_1 
 call WriteString 
 call CrLf 
 
 
 ; get user's name 
 mov edx, OFFSET buffer ;point to the buffer 
 mov ecx, SIZEOF buffer ; specify max characters 
 call ReadString 
 mov byteCount, eax 
 
 ; greet the user 
 mov edx, OFFSET hi 
 call WriteString 
 mov edx, OFFSET buffer 
 call WriteString 
 call CrLf 
 
 ;userInstructions 
topPrompt: 
 mov edx, OFFSET prompt_2 
 call WriteString 
 call CrLf 
 
 ;getUserData 
 call ReadInt 
 mov num_fibo, eax 
 
 ; Validate user data 
 cmp eax, UPPERLIMIT 
 jg TooHigh 
 cmp eax, LOWERLIMIT 
 jl TooLow 
 je JustOne 
 cmp eax, 2 
 je JustTwo 
 
 ; displayFibs 
 mov ecx, num_fibo 
 sub ecx, 3 ; we start at iteration 3, the first two are taken care of by JustOne and JustTwo 
 mov eax, 1 
 call WriteDec 
 mov edx, OFFSET spaces 
 call WriteString 
 call WriteDec 
 mov edx, OFFSET spaces 
 call WriteString 
 mov previous2, eax 
 mov eax, 2 
 call WriteDec 
 mov edx, OFFSET spaces 
 call WriteString 
 mov previous1, eax 
 
 fib: 
 add eax, previous2 
 call WriteDec 
 mov edx, OFFSET spaces 
 call WriteString 
 mov temp, eax 
 mov eax, previous1 
 mov previous2, eax 
 mov eax, temp 
 mov previous1, eax 
 mov edx, ecx 
 cdq 
 div moduloFive 
 cmp edx, 0 
 jne skip 
 call CrLf 
 skip: 
 mov eax, temp 
 loop fib 
 jmp TheEnd 
TooHigh: 
 mov edx, OFFSET highError 
 call WriteString 
 jmp TopPrompt 
 
TooLow: 
 mov edx, OFFSET lowError 
 call WriteString 
 jmp TopPrompt 
JustOne: 
 mov edx, OFFSET first1 
 call WriteString 
 jmp TheEnd 
 
JustTwo: 
 mov edx, OFFSET first2 
 call WriteString 
 jmp TheEnd 
;farewell 
TheEnd: 
 call CrLf 
 mov edx, OFFSET goodbye 
 call WriteString 
 mov edx, OFFSET buffer 
 call WriteString 
 call CrLf 
 
 exit ; exit to operating system 
main ENDP 
 
END main