Моя программа должна прочитать набор целых чисел со знаком и отобразить наибольшее и наименьшее введенные значения. Когда после ввода вводится ноль, он печатается, но если первое введенное значение равно 0, программа должна сразу завершиться, ничего не отображая. Застрял на выяснении, как сохранить все числа, которые вводит пользователь, так как это всего лишь 0, когда я тестирую печать, поэтому я предполагаю, что значения уничтожаются. Я еще не разобрался с l oop, чтобы сравнить цифры, потому что я уже давно бьюсь об этом и искал неумелый способ заставить часового работать, но я доберусь до этого. Может кто-нибудь намекнуть мне, что я делаю не так?
Выход:
Enter a series of numbers:
100
250
500
0
Largest: 0
Smallest: 0
Исходный код:
extrn DisplayString: PROTO
extrn DisplayNewline: PROTO
extrn ReadInt: PROTO
extrn DisplayInt: PROTO
extrn ExitProcess: PROTO
.data
msg1 byte 'Enter a series of numbers: ', 0
largestMsg byte 'Largest: ',0
smallestMsg byte 'Smallest: ',0
.data?
input byte ?
smallest word ?
largest word ?
numsEntered byte ?
.code
main PROC
;Prepare for stacks
sub rsp, 32 ;reserve shadow space
push rbp ;save non-volatile base pointer
mov rbp, rsp ;make frame pointer for direct access
mov rcx, 100 ;get address of request
lea rbx, numsEntered ;get address of array
;Print prompt
lea rcx, msg1 ;store in address the prompt
call DisplayString ;print message
call DisplayNewline ;print new line
;Get First input and compare to sentinel
lea rcx, input ;point input to address
call readInt ;read user input
push rcx
mov r12b, input ;store input in register
cmp r12b, 0 ;compare input to sentinal
je Continue ;if input = to sentinal exit code
jg asknum ;if input greater than sentinal jp to loop
asknum: ;Read and compare user input until they enter 0
lea rcx, input ;point input to address
call readInt ;read user input
mov r12b, input ;store input in register
cmp input, 0 ;compare input to sentinal
je PrintLargest ;if user types sentinal after inputs, jp to print largest num
loop asknum ;loop for user input
PrintLargest:
lea rcx, largestMsg ;point to prompt address
call DisplayString ;print prompt largestMsg
lea rcx, largest ;point largest integer to address
call DisplayInt ;print largest integer
call DisplayNewline ;print new line
jp PrintSmallest ;jump to calculate smallest integer
PrintSmallest:
;after printing largest, print the smallest
lea rcx, smallestMsg ;point to prompt address
call DisplayString ;print prompt smallestMsg
lea rcx, smallest ;point smallest integer to address
call DisplayInt ;print smallest integer
jp Continue ;jump to exit code
Continue:
pop rbp ;clear stack
add rsp, 32 ;restore shadow space
call ExitProcess ;exit code
main ENDP
END
Output: