TITLE Fibonacci Numbers ( Project02. asm)
; Author: Andrew Pierno
; Description: Write a program to calculate Fibonacci numbers.
; • Display the program title and programmer’s name. Then get the user’s name, and greet the user.
; • Prompt the user to enter the number of Fibonacci terms to be displayed. Advise the user to enter an integer
; in the range [1 .. 46].
; • Get and validate the user input (n).
; • Calculate and display all of the Fibonacci numbers up to and including the nth term. The results should be
; displayed 5 terms per line with at least 5 spaces between terms.
; • Display a parting message that includes the user’s name, and terminate the program.
INCLUDE Irvine32. inc
.data
myName BYTE "Andrew Pierno " , 0
programTitle BYTE "Fibonacci Numbers by " , 0
instructions BYTE "Please enter two numbers, and I'll show you the sum, difference, product, quotient, and remainder." , 0
prompt_1 BYTE "What is your name? " , 0
prompt_2 BYTE "Enter the number of Fibonacci terms you would like to see. Please enter a number between [1 - 46]" , 0
ec_prompt BYTE "EC: Doing something awesome: Setting text color to teal-ish" , 0
numFib DWORD ?
prev1 DWORD ?
prev2 DWORD ?
spaces BYTE " " , 0
goodbye BYTE "Goodbye, " , 0
firstTwo BYTE "1 1 " , 0
firstOne BYTE "1" , 0
temp DWORD ?
moduloFive DWORD 5
UPPERLIMIT = 46
LOWERLIMIT = 1
;user's name
buffer BYTE 21 DUP( 0 )
byteCount DWORD ?
;greet user
hi BYTE "Hi, " , 0
;validation
tooHighError BYTE "The number you entered is too high! It must be 46 or below. " , 0
tooLowError BYTE "The number you entered is too low! It must be 1 or above. " , 0
;EC -> Doing something awesome: Setting Background Color and Text Color
val1 DWORD 11
val2 DWORD 16
. code
main PROC
;EC: doing something awesome like setting the text color
; set 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 myName
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
; USER INSTRUCTIONS
topPrompt:
mov edx , OFFSET prompt_2
call WriteString
call CrLf
; GET USER DATA
call ReadInt
mov numFib, eax
; Validate user data
cmp eax , UPPERLIMIT
jg TooHigh
cmp eax , LOWERLIMIT
jl TooLow
je JustOne
cmp eax , 2
je JustTwo
; DISPLAY FIBS
; prepare loop (post-test), do the first two manually
mov ecx , numFib
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 prev2, eax
mov eax , 2
call WriteDec
mov edx , OFFSET spaces
call WriteString
mov prev1, eax
fib:
; add prev 2 to eax
add eax , prev2
call WriteDec
mov edx , OFFSET spaces
call WriteString
mov temp, eax
mov eax , prev1
mov prev2, eax
mov eax , temp
mov prev1, eax
;for spacing (first time it should be % 3, rest %5)
mov edx , ecx
cdq
div moduloFive
cmp edx , 0
jne skip
call CrLf
skip:
; restore what was on eax
mov eax , temp
; if ecx % 3 = 0 call CrLf
loop fib
jmp TheEnd
TooHigh:
mov edx , OFFSET tooHighError
call WriteString
jmp TopPrompt
TooLow:
mov edx , OFFSET tooLowError
call WriteString
jmp TopPrompt
JustOne:
mov edx , OFFSET firstOne
call WriteString
jmp TheEnd
JustTwo:
mov edx , OFFSET firstTwo
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
VElUTEUgRmlib25hY2NpIE51bWJlcnMgICAgKFByb2plY3QwMi5hc20pCgo7IEF1dGhvcjoJCQkJCQkJCQlBbmRyZXcgUGllcm5vCjsgRGVzY3JpcHRpb246IFdyaXRlIGEgcHJvZ3JhbSB0byBjYWxjdWxhdGUgRmlib25hY2NpIG51bWJlcnMuCjsJ4oCiIERpc3BsYXkgdGhlIHByb2dyYW0gdGl0bGUgYW5kIHByb2dyYW1tZXLigJlzIG5hbWUuIFRoZW4gZ2V0IHRoZSB1c2Vy4oCZcyBuYW1lLCBhbmQgZ3JlZXQgdGhlIHVzZXIuCjsJ4oCiIFByb21wdCB0aGUgdXNlciB0byBlbnRlciB0aGUgbnVtYmVyIG9mIEZpYm9uYWNjaSB0ZXJtcyB0byBiZSBkaXNwbGF5ZWQuIEFkdmlzZSB0aGUgdXNlciB0byBlbnRlciBhbiBpbnRlZ2VyCjsJCWluIHRoZSByYW5nZSBbMSAuLiA0Nl0uCjsJ4oCiIEdldCBhbmQgdmFsaWRhdGUgdGhlIHVzZXIgaW5wdXQgKG4pLgo7CeKAoiBDYWxjdWxhdGUgYW5kIGRpc3BsYXkgYWxsIG9mIHRoZSBGaWJvbmFjY2kgbnVtYmVycyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBudGggdGVybS4gVGhlIHJlc3VsdHMgc2hvdWxkIGJlCjsJCWRpc3BsYXllZCA1IHRlcm1zIHBlciBsaW5lIHdpdGggYXQgbGVhc3QgNSBzcGFjZXMgYmV0d2VlbiB0ZXJtcy4KOwnigKIgRGlzcGxheSBhIHBhcnRpbmcgbWVzc2FnZSB0aGF0IGluY2x1ZGVzIHRoZSB1c2Vy4oCZcyBuYW1lLCBhbmQgdGVybWluYXRlIHRoZSBwcm9ncmFtLgoKSU5DTFVERSBJcnZpbmUzMi5pbmMKCi5kYXRhCm15TmFtZQkJCQlCWVRFCSJBbmRyZXcgUGllcm5vICIsIDAKcHJvZ3JhbVRpdGxlCQlCWVRFCSJGaWJvbmFjY2kgTnVtYmVycyBieSAiLCAwCmluc3RydWN0aW9ucwkJQllURQkiUGxlYXNlIGVudGVyIHR3byBudW1iZXJzLCBhbmQgSSdsbCBzaG93IHlvdSB0aGUgc3VtLCBkaWZmZXJlbmNlLCBwcm9kdWN0LCBxdW90aWVudCwgYW5kIHJlbWFpbmRlci4iLCAwCnByb21wdF8xCQkJQllURQkiV2hhdCBpcyB5b3VyIG5hbWU/ICIsIDAKcHJvbXB0XzIJCQlCWVRFCSJFbnRlciB0aGUgbnVtYmVyIG9mIEZpYm9uYWNjaSB0ZXJtcyB5b3Ugd291bGQgbGlrZSB0byBzZWUuIFBsZWFzZSBlbnRlciBhIG51bWJlciBiZXR3ZWVuIFsxIC0gNDZdIiwgMAplY19wcm9tcHQJCQlCWVRFCSJFQzogRG9pbmcgc29tZXRoaW5nIGF3ZXNvbWU6IFNldHRpbmcgdGV4dCBjb2xvciB0byB0ZWFsLWlzaCIsIDAKbnVtRmliCQkJCURXT1JECT8KcHJldjEJCQkJRFdPUkQJPwpwcmV2MgkJCQlEV09SRAk/CnNwYWNlcwkJCQlCWVRFCSIgICAgICIsMApnb29kYnllCQkJCUJZVEUJIkdvb2RieWUsICAiLCAwCmZpcnN0VHdvCQkJQllURQkiMSAgICAgMSAgICAgIiwgMApmaXJzdE9uZQkJCUJZVEUJIjEiLCAwCnRlbXAJCQkJRFdPUkQJPwptb2R1bG9GaXZlCQkJRFdPUkQJNQpVUFBFUkxJTUlUID0gNDYKTE9XRVJMSU1JVCA9IDEKCjt1c2VyJ3MgbmFtZQpidWZmZXIJCQkJQllURSAyMSBEVVAoMCkKYnl0ZUNvdW50CQkJRFdPUkQJPwoKO2dyZWV0IHVzZXIKaGkJCQkJCUJZVEUJIkhpLCAiLDAKCjt2YWxpZGF0aW9uCnRvb0hpZ2hFcnJvcgkJQllURQkiVGhlIG51bWJlciB5b3UgZW50ZXJlZCBpcyB0b28gaGlnaCEgSXQgbXVzdCBiZSA0NiBvciBiZWxvdy4gIiwgMAp0b29Mb3dFcnJvcgkJCUJZVEUJIlRoZSBudW1iZXIgeW91IGVudGVyZWQgaXMgdG9vIGxvdyEgSXQgbXVzdCBiZSAxIG9yIGFib3ZlLiAiLCAwCgo7RUMgLT4gRG9pbmcgc29tZXRoaW5nIGF3ZXNvbWU6IFNldHRpbmcgIEJhY2tncm91bmQgQ29sb3IgYW5kIFRleHQgQ29sb3IKdmFsMSBEV09SRCAxMQp2YWwyIERXT1JEIDE2CgouY29kZQogbWFpbiBQUk9DCgoJO0VDOiBkb2luZyBzb21ldGhpbmcgYXdlc29tZSBsaWtlIHNldHRpbmcgdGhlIHRleHQgY29sb3IKCgk7IHNldCB0ZXh0IGNvbG9yIHRvIHRlYWwKCQltb3YgZWF4LCB2YWwyCgkJaW11bCBlYXgsIDE2CgkJYWRkIGVheCwgdmFsMQoJCWNhbGwgc2V0VGV4dENvbG9yCgoJOyBJTlRST0RVQ1RJT04KCQltb3YJCWVkeCwgT0ZGU0VUIHByb2dyYW1UaXRsZQoJCWNhbGwJV3JpdGVTdHJpbmcKCQltb3YJCWVkeCwgT0ZGU0VUIG15TmFtZQoJCWNhbGwJV3JpdGVTdHJpbmcKCQljYWxsCUNyTGYKCgkJOyBFQyBQcm9tcHQKCQltb3YJCWVkeCwgT0ZGU0VUIGVjX3Byb21wdAoJCWNhbGwJV3JpdGVTdHJpbmcKCQljYWxsCUNyTGYKCgoJCW1vdgkJZWR4LCBPRkZTRVQgcHJvbXB0XzEKCQljYWxsCVdyaXRlU3RyaW5nCgkJY2FsbAlDckxmCgoKCQk7IGdldCB1c2VyJ3MgbmFtZQoJCW1vdgkJZWR4LCBPRkZTRVQgYnVmZmVyCTtwb2ludCB0byB0aGUgYnVmZmVyCgkJbW92CQllY3gsIFNJWkVPRglidWZmZXIJOyBzcGVjaWZ5IG1heCBjaGFyYWN0ZXJzCgkJY2FsbAlSZWFkU3RyaW5nCgkJbW92CQlieXRlQ291bnQsIGVheAoKCQk7IGdyZWV0IHRoZSB1c2VyCgkJbW92CQllZHgsIE9GRlNFVCBoaQoJCWNhbGwJV3JpdGVTdHJpbmcKCQltb3YJCWVkeCwgT0ZGU0VUIGJ1ZmZlcgoJCWNhbGwJV3JpdGVTdHJpbmcKCQljYWxsCUNyTGYKCgk7IFVTRVIgSU5TVFJVQ1RJT05TCnRvcFByb21wdDoKCQkJbW92CQllZHgsIE9GRlNFVCBwcm9tcHRfMgoJCQljYWxsCVdyaXRlU3RyaW5nCgkJCWNhbGwJQ3JMZgoKCTsgR0VUIFVTRVIgREFUQQoJCWNhbGwJUmVhZEludAoJCW1vdgkJbnVtRmliLCBlYXgKCgk7IFZhbGlkYXRlIHVzZXIgZGF0YQoJCWNtcAkJZWF4LCBVUFBFUkxJTUlUCgkJamcJCVRvb0hpZ2gKCQljbXAJCWVheCwgTE9XRVJMSU1JVAoJCWpsCQlUb29Mb3cKCQlqZQkJSnVzdE9uZQoJCWNtcAkJZWF4LCAyCgkJamUJCUp1c3RUd28KCgk7IERJU1BMQVkgRklCUwoKCQk7IHByZXBhcmUgbG9vcCAocG9zdC10ZXN0KSwgZG8gdGhlIGZpcnN0IHR3byBtYW51YWxseQoKCQltb3YJCWVjeCwgbnVtRmliCgkJc3ViCQllY3gsIDMJCQk7IHdlIHN0YXJ0IGF0IGl0ZXJhdGlvbiAzLCB0aGUgZmlyc3QgdHdvIGFyZSB0YWtlbiBjYXJlIG9mIGJ5IEp1c3RPbmUgYW5kIEp1c3RUd28KCQltb3YJCWVheCwgMQoJCWNhbGwJV3JpdGVEZWMKCQltb3YJCWVkeCwgT0ZGU0VUIHNwYWNlcwoJCWNhbGwJV3JpdGVTdHJpbmcKCQljYWxsCVdyaXRlRGVjCgkJbW92CQllZHgsIE9GRlNFVCBzcGFjZXMKCQljYWxsCVdyaXRlU3RyaW5nCgkJbW92CQlwcmV2MiwgZWF4CgkJbW92CQllYXgsIDIKCQljYWxsCVdyaXRlRGVjCgkJbW92CQllZHgsIE9GRlNFVCBzcGFjZXMKCQljYWxsCVdyaXRlU3RyaW5nCgkJbW92CQlwcmV2MSwgZWF4CgoJCWZpYjoKCQkJOyBhZGQgcHJldiAyIHRvIGVheAoJCQlhZGQJCWVheCwgcHJldjIKCQkJY2FsbAlXcml0ZURlYwoKCQkJbW92CQllZHgsIE9GRlNFVCBzcGFjZXMKCQkJY2FsbAlXcml0ZVN0cmluZwoKCQkJbW92CQl0ZW1wLCBlYXgKCQkJbW92CQllYXgsIHByZXYxCgkJCW1vdgkJcHJldjIsIGVheAoJCQltb3YJCWVheCwgdGVtcAoJCQltb3YJCXByZXYxLCBlYXgKCgkJCTtmb3Igc3BhY2luZyAoZmlyc3QgdGltZSBpdCBzaG91bGQgYmUgJSAzLCByZXN0ICU1KQoJCQltb3YJCWVkeCwgZWN4CgkJCWNkcQoJCQlkaXYJCW1vZHVsb0ZpdmUKCQkJY21wCQllZHgsIDAKCQkJam5lCQlza2lwCgkJCWNhbGwJQ3JMZgoKCQlza2lwOgoJCQkJOyByZXN0b3JlIHdoYXQgd2FzIG9uIGVheAoJCQkJbW92CQllYXgsIHRlbXAKCQkJCTsgaWYgZWN4ICUgMyA9IDAgY2FsbCBDckxmCgkJCQlsb29wCWZpYgoJCWptcAkJVGhlRW5kCgpUb29IaWdoOgoJCQltb3YJCWVkeCwgT0ZGU0VUIHRvb0hpZ2hFcnJvcgoJCQljYWxsCVdyaXRlU3RyaW5nCgkJCWptcAkJVG9wUHJvbXB0CgpUb29Mb3c6CgkJCW1vdgkJZWR4LCBPRkZTRVQgdG9vTG93RXJyb3IKCQkJY2FsbAlXcml0ZVN0cmluZwoJCQlqbXAJCVRvcFByb21wdApKdXN0T25lOgoJCQltb3YJCWVkeCwgT0ZGU0VUIGZpcnN0T25lCgkJCWNhbGwJV3JpdGVTdHJpbmcKCQkJam1wCQlUaGVFbmQKCkp1c3RUd286CgkJCW1vdgkJZWR4LCBPRkZTRVQgZmlyc3RUd28KCQkJY2FsbAlXcml0ZVN0cmluZwoJCQlqbXAJCVRoZUVuZAoKCTsgRkFSRVdFTEwKVGhlRW5kOgoJCQljYWxsCUNyTGYKCQkJbW92CQllZHgsIE9GRlNFVCBnb29kYnllCgkJCWNhbGwJV3JpdGVTdHJpbmcKCQkJbW92CQllZHgsIE9GRlNFVCBidWZmZXIKCQkJY2FsbAlXcml0ZVN0cmluZwoJCQljYWxsCUNyTGYKCglleGl0CTsgZXhpdCB0byBvcGVyYXRpbmcgc3lzdGVtCm1haW4gRU5EUAoKRU5EIG1haW4=
compilation info
prog.asm:1: error: parser: instruction expected
prog.asm:13: error: parser: instruction expected
prog.asm:16: error: parser: instruction expected
prog.asm:17: error: parser: instruction expected
prog.asm:18: error: parser: instruction expected
prog.asm:19: error: parser: instruction expected
prog.asm:20: error: parser: instruction expected
prog.asm:21: error: parser: instruction expected
prog.asm:22: error: parser: instruction expected
prog.asm:23: error: parser: instruction expected
prog.asm:24: error: parser: instruction expected
prog.asm:25: error: parser: instruction expected
prog.asm:26: error: parser: instruction expected
prog.asm:27: error: parser: instruction expected
prog.asm:28: error: parser: instruction expected
prog.asm:29: error: parser: instruction expected
prog.asm:30: error: parser: instruction expected
prog.asm:31: error: parser: instruction expected
prog.asm:32: error: parser: instruction expected
prog.asm:35: error: parser: instruction expected
prog.asm:36: error: parser: instruction expected
prog.asm:39: error: parser: instruction expected
prog.asm:42: error: parser: instruction expected
prog.asm:43: error: parser: instruction expected
prog.asm:46: error: parser: instruction expected
prog.asm:47: error: parser: instruction expected
prog.asm:50: error: parser: instruction expected
prog.asm:61: error: comma, colon, decorator or end of line expected after operand
prog.asm:63: error: comma, colon, decorator or end of line expected after operand
prog.asm:68: error: comma, colon, decorator or end of line expected after operand
prog.asm:73: error: comma, colon, decorator or end of line expected after operand
prog.asm:79: error: comma, colon, decorator or end of line expected after operand
prog.asm:80: error: comma, colon, decorator or end of line expected after operand
prog.asm:85: error: comma, colon, decorator or end of line expected after operand
prog.asm:87: error: comma, colon, decorator or end of line expected after operand
prog.asm:93: error: comma, colon, decorator or end of line expected after operand
prog.asm:118: error: comma, colon, decorator or end of line expected after operand
prog.asm:121: error: comma, colon, decorator or end of line expected after operand
prog.asm:126: error: comma, colon, decorator or end of line expected after operand
prog.asm:135: error: comma, colon, decorator or end of line expected after operand
prog.asm:160: error: comma, colon, decorator or end of line expected after operand
prog.asm:165: error: comma, colon, decorator or end of line expected after operand
prog.asm:169: error: comma, colon, decorator or end of line expected after operand
prog.asm:174: error: comma, colon, decorator or end of line expected after operand
prog.asm:181: error: comma, colon, decorator or end of line expected after operand
prog.asm:183: error: comma, colon, decorator or end of line expected after operand
prog.asm:188: error: symbol `main' redefined
prog.asm:188: error: parser: instruction expected
prog.asm:190: error: parser: instruction expected
ld: cannot find prog.o: No such file or directory
stdout