Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data segment
- buffer db 254,254 dup ('$') ;Создаём и заполняем строку символами $
- str1 db 'Enter string:', 0Dh, 0Ah, '$'
- str3 db 0Dh, 0Ah, '$'
- str_correct db 'Correct', 0Dh, 0Ah, '$'
- str_incorrect db 'Incorrect', 0Dh, 0Ah, '$'
- counter_brackets dw 0h
- counter_sign dw 0h
- data ends
- code segment
- assume cs:code,ds:data
- start: ;Ввод выражения
- mov ax, data
- mov ds, ax
- mov ah,09h
- mov dx, offset str1
- int 21h
- mov ah,0ah
- mov dx, offset buffer
- int 21h
- mov ah,09h
- mov dx, offset str3
- int 21h
- lea si, buffer+2
- main_loop: ;Цикл, где выражение проверяется на соответствие условию
- lodsb
- cmp al, '$' ;Заканчиваем работу программы, как только встретили символ $
- je print_correct
- cmp al, '+' ;Проверка на 2 знака подряд
- je inc_sign
- cmp al, '-'
- je inc_sign
- cmp al, '*'
- je inc_sign
- cmp al, '^'
- je inc_sign
- cmp al, '/'
- je inc_sign
- cmp al, ')' ;Подсчёт правильности расстановки скобок
- je dec_brackets
- cmp al, '('
- je inc_brackets
- mov counter_sign, 0
- cmp al, '0' ;Если это цифра, то пропускаем
- je main_loop
- cmp al, '1'
- je main_loop
- cmp al, '2'
- je main_loop
- cmp al, '3'
- je main_loop
- cmp al, '4'
- je main_loop
- cmp al, '5'
- je main_loop
- cmp al, '6'
- je main_loop
- cmp al, '7'
- je main_loop
- cmp al, '8'
- je main_loop
- cmp al, '9'
- je main_loop
- cmp al, 'z' ;jl не работает почему-то
- jg print_incorrect
- test al, 'A' ;Поэтому эта строчка такая странная
- jng print_incorrect
- cmp al, '.' ;Защита от посторонних символов(кодировка сбита, по символам не посчитать)
- je print_incorrect
- cmp al, ','
- je print_incorrect
- cmp al, '"'
- je print_incorrect
- cmp al, "'"
- je print_incorrect
- jmp main_loop
- inc_sign: ;Проверка, чтобы не было 2 подряд знака
- inc counter_sign
- cmp counter_sign, 2
- je print_incorrect
- jmp main_loop
- inc_brackets: ;Уменьшаем счётчик скобок
- inc counter_brackets
- jmp main_loop
- dec_brackets: ;Увеличиваем счётчик скобок
- dec counter_brackets
- jmp main_loop
- print_correct: ;Финальная проверка на корректность выражения и вывод на экран сообщения, что выражение корректно
- cmp counter_brackets, 0
- jne print_incorrect
- mov ah,09h
- mov dx, offset str_correct
- int 21h
- jmp quit
- print_incorrect: ;Вывод на экран сообщения о том, что выражение некорректно
- mov ah, 09h
- mov dx, offset str_incorrect
- int 21h
- jmp quit
- quit:
- mov ax, 4c00h
- int 21h
- code ends
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement