Мне трудно понять, как сравнивать входные данные с отрицательными в MASM. Обычно для положительных целых чисел я бы просто использовал cmp
, но, похоже, это не работает для меня в этой программе.
Мне также не хватает одной или двух строк в моем calcLoop
, я думаю, потому что программа просто завершается сразу после того, как пользователь вводит положительное значение, после ввода всех отрицательных значений. Эта программа должна просто суммировать и усреднять все введенные значения, все, кроме одного, должны быть отрицательными между [-100,-1]. Также, когда я ввожу -100 или -1, это должно быть разрешено, но не разрешено.
Любая помощь будет принята с благодарностью, так как я все еще пытаюсь понять некоторые основы ассемблера. Спасибо!
Код:
TITLE Program3 (program3.asm)
INCLUDE Irvine32.inc
LENGTHLIMIT = 20
.data
intro BYTE "Program 3: Accumulator by ", 13,10
BYTE "What is your name: ",0
prompt1 BYTE "Oh hello, ",0
enterNumPrompt BYTE "Enter numbers between -100 and -1.",13,10
BYTE "Enter a non-negative now: ",13,10,0
prompt2 BYTE "Enter #: ",0
prompt3 BYTE "Okay, ",0
prompt4 BYTE " numbers.",0
addPrompt BYTE "The sum of the numbers entered is, ",0
roundPrompt BYTE "The rounded average is: "
errorPrompt BYTE "Whoops! Only numbers less than or equal to -1, please",13,10,0
nameInputLimit BYTE 24 DUP(0)
seeya BYTE "Thanks for using the accumulator, "
seeyaName BYTE "!"
numEntered DWORD ?
amountOfNums DWORD ?
result DWORD ?
sumResult DWORD ?
avgResult DWORD ?
.code
main PROC
mov edx, OFFSET intro
call Crlf
call WriteString
mov edx, OFFSET nameInputLimit
mov ecx, SIZEOF nameInputLimit
call ReadString
mov edx, OFFSET prompt1
call WriteString
mov edx, OFFSET nameInputLimit
call WriteString
call Crlf
mov edx, 0000000h
mov edx, OFFSET enterNumPrompt
call WriteString
call Crlf
call Crlf
getLoop:
mov edx, OFFSET prompt2
call WriteString
call ReadInt
cmp eax, -100
jg errorLoop
cmp eax, -1
jl complete
jmp calcLoop
errorLoop:
mov edx, OFFSET errorPrompt
call WriteString
jmp getLoop
calcLoop: ;missing a line or two here I think
mov numEntered, eax
mov eax, result
add eax, numEntered
mov result, eax
jmp getLoop
complete:
call Crlf
mov numEntered, eax
goodbye:
mov edx, OFFSET seeya
call WriteString
exit
; (insert executable instructions here)
exit
main ENDP
; (insert additional procedures here)
END main
cmp eax, -100; jg errorLoop
- это должно вызвать переход кerrorLoop
, если значение больше -100 - это не похоже на то, что вы хотите. - person 500 - Internal Server Error   schedule 03.02.2016