Can anyone help me see what i am doing wrong?
I basically am trying to ask y/n questions to add ingredients for ordering a hamburger.
The code asks the first question then runs through the loop until the end.
I need to ask each question and enter y or n
thanks,
%include "/usr/local/share/csc314/asm_io.inc"
;10 newline \n
;32 space
;0 \0 null
segment .data
welcome db "Welcome to Burger Shack!",10,"Please choose your toppings: answer y for Yes, n for No",10,0
lettuceprompt db "Lettuce? :",0
cheeseprompt db "Cheese? :",0
tomatoeprompt db "Tomatoe? :",0
onionprompt db "Onion? :",0
pickleprompt db "Pickle? :",0
ketchupprompt db "Ketchup? :",0
mayoprompt db "Mayonnaise? :",0
mustardprompt db "Mustard? :",0
segment .bss
;8 ingredients
; 0 1 2 3 4 5 6 7 null
;lettuce, cheese, tomatoe, onion, pickle, ketchup, mayo, mustard \0
order resd 9
segment .text
global asm_main
asm_main:
push ebp
mov ebp, esp
;********** CODE STARTS HERE **********
;;;;;;;;;;;;;;;;
;INIT
;;;;;;;;;;;;;;;;
mov eax, 0
mov ecx, 0
topinit:
cmp ecx, 8
jge endinit
mov DWORD [order + ecx * 4], eax
inc ecx
jmp topinit
endinit:
;;;;;;;;;;;;;;;;
;ORDER
;;;;;;;;;;;;;;;;
mov eax, welcome ;display welcome message
call print_string
mov eax, 0
mov ecx, 0 ;loop counter
toploop1:
cmp ecx, 8
jge endloop1
cmp ecx, 0
je lettuce
cmp ecx, 1
je cheese
cmp ecx, 2
je tomatoe
cmp ecx, 3
je onion
cmp ecx, 4
je pickle
cmp ecx, 5
je ketchup
cmp ecx, 6
je mayo
cmp ecx, 7
je mustard
next:
inc ecx
jmp toploop1
endloop1:
jmp endorder
lettuce:
mov eax, lettuceprompt ;set lettuce prompt
jmp readinput
cheese:
mov eax, cheeseprompt ;set cheese prompt
jmp readinput
tomatoe:
mov eax, tomatoeprompt ;set tomatoe prompt
jmp readinput
onion:
mov eax, onionprompt ;set onion prompt
jmp readinput
pickle:
mov eax, pickleprompt ;set pickle prompt
jmp readinput
ketchup:
mov eax, ketchupprompt ;set ketchup prompt
jmp readinput
mayo:
mov eax, mayoprompt ;set mayo prompt
jmp readinput
mustard:
mov eax, mustardprompt ;set mustard prompt
jmp readinput
readinput:
call print_string ;display prompt to screen
call read_char ;enter y/n
mov cl, al ;save input
call read_char ;\n
call print_nl
call print_char
cmp cl, 'y' ;add ingredient?
je addtopping
jmp next
addtopping:
mov eax, ecx
call print_int
call print_nl
mov DWORD [order + ecx * 4], 1 ;set 1 for yes
mov eax, 0
jmp next
endorder:
;;;;;;;;;;;;;;;;
;PRINT
;;;;;;;;;;;;;;;;
call print_nl ;newline
mov ecx, 0
toploop2:
cmp ecx, 8
jge endloop2
mov eax, DWORD [order + ecx * 4]
call print_int
call print_nl
inc ecx
jmp toploop2
endloop2:
; *********** CODE ENDS HERE ***********
mov eax, 0
mov esp, ebp
pop ebp
ret