Я конвертирую строку из чисел в целое число. Пользователь вводит 10 строк (по одной строке за раз), а строка хранится как число. Когда пользователь вводит не номер в строку, программа улавливает ошибку и просит пользователя повторно ввести строку. Но когда программа ловит ошибку, она переходит к тому, чтобы пользователь вводил другую строку, но затем он сбой. Любые идеи почему?Сбой программы при проверке ввода пользователя, что происходит?
;getString Macro
getString MACRO buffer, buffer1, buffer2
mov edx, OFFSET buffer
call WriteString
mov edx, OFFSET buffer1
mov ecx, (SIZEOF buffer1) - 1
call ReadString
mov buffer2, eax
ENDM
;---------------------------------------------------------------
;ReadVal Procedure -
;Receives: No parameters
;Returns: None
;Preconditions: None
;---------------------------------------------------------------
ReadVal PROC
push ebp
mov ebp, esp
mov ecx, 10 ;set the outer loop
L1:
pushad
getString EntNum, Numstr, [ebp + 8]
mov ecx, [ebp + 8]
mov esi, [ebp + 12] ; points to the user's number
mov edi, [ebp + 24] ; will store the user's string as a number
cld
counter:
lodsb
cmp ecx, 0
je continue
cmp al, 48
jl badnum
cmp al, 57
jg badnum
jmp store
badnum:
mov edx, [ebp + 20]
call WriteString
call CrLf
jmp L1
store:
sub al, 48
stosb
loop counter
popad
cmp ecx, 0 ;stop the outer loop
je continue
loop L1
continue:
pop ebp
RET 20
ReadVal ENDP
Например, вы переходите к L1, который снова выполняет pushad, чтобы вы могли разбалансировать стек. Научитесь использовать отладчик. – Jester
Спасибо, что была проблема – user2466886