Это код, который у меня есть, очевидно, он еще не завершен. Я не могу получить строку для чтения для сравнения и ветвления. Я пробовал значения ASCII, десятичные значения и сравнения символов. Кажется, я не могу получить с операторами. Я знаю, что мне нужно сделать преобразование из двоичного в десятичное после команды "parsedecimal32" из библиотеки Irvine32.
SPACE_KEY = 20
PWORD TYPEDEF PTR DWORD
.data
prompt BYTE "Enter desired input:", 13,10,0
errormsg BYTE "Invalid input", 13,10,0
sa BYTE "At stateA", 13,10,0
I BYTE "At addition", 13,10,0
II BYTE "At subtraction", 13,10,0
III BYTE "At multiplication", 13,10,0
IV BYTE "At division", 13,10,0
V BYTE "At Digit", 13,10,0
process dword null
null EQU 0
buffersize EQU 41
buffer BYTE buffersize DUP(0)
ptr1 PWORD process
.code
main PROC
call Clrscr
StateA:
cmp al,SPACE_KEY ; SPACE key pressed?
je Quit ; yes: quit
MOV edx, OFFSET sa
call WriteString
call Getnext ; read next char into AL
L1:
mov edi,ptr1
cmp edi,'+' ; leading + sign?
je addi
cmp edi, '-' ; leading - sign?
je subt
cmp edi, '*'
je multi
cmp edi, '/'
je divi
call parsedecimal32
jmp digit
call DisplayErrorMsg ; invalid input found
jmp Quit
digit:
MOV edx, OFFSET V
call WriteString
inc edi
jmp StateA
addi:
MOV edx, OFFSET I
call WriteString
;call DisplayErrorMsg ; no: invalid input found
jmp StateA
subt:
MOV edx, OFFSET II
call WriteString
jmp StateA
multi:
MOV edx, OFFSET III
call WriteString
jmp StateA
divi:
MOV edx, OFFSET IV
call WriteString
jmp StateA
Quit:
call Crlf
exit
main ENDP
;-----------------------------------------------
Getnext PROC
;
; Reads a character from standard input.
; Receives: nothing
; Returns: AL contains the character
;-----------------------------------------------
MOV edx, OFFSET prompt
call WriteString
MOV edx, OFFSET buffer
MOV ecx, buffersize
call ReadString ; input from keyboard
call WriteString
mov process, eax
ret
Getnext ENDP
;-----------------------------------------------
DisplayErrorMsg PROC
;
; Displays an error message indicating that
; the input stream contains illegal input.
; Receives: nothing.
; Returns: nothing
;-----------------------------------------------
;push edx
mov edx,OFFSET errormsg
call WriteString
pop edx
ret
DisplayErrorMsg ENDP
END main`