Advertisement
Guest User

Untitled

a guest
Jun 12th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. data segment
  3.     buffer db 254,254 dup ('$') ;Создаём и заполняем строку символами $
  4.     str1 db 'Enter string:', 0Dh, 0Ah, '$'
  5.     str3 db 0Dh, 0Ah, '$'
  6.     str_correct db 'Correct', 0Dh, 0Ah, '$'
  7.     str_incorrect db 'Incorrect', 0Dh, 0Ah, '$'
  8.     counter_brackets dw 0h
  9.     counter_sign dw 0h
  10. data ends
  11. code segment
  12. assume cs:code,ds:data
  13. start:  ;Ввод выражения
  14.     mov ax, data
  15.     mov ds, ax
  16.     mov ah,09h
  17.     mov dx, offset str1
  18.     int 21h
  19.     mov ah,0ah
  20.     mov dx, offset buffer
  21.     int 21h
  22.    
  23.     mov ah,09h
  24.     mov dx, offset str3
  25.     int 21h
  26.     lea si, buffer+2
  27. main_loop: ;Цикл, где выражение проверяется на соответствие условию
  28.     lodsb
  29.     cmp al, '$' ;Заканчиваем работу программы, как только встретили символ $
  30.     je print_correct
  31.     cmp al, '+' ;Проверка на 2 знака подряд
  32.     je inc_sign
  33.     cmp al, '-'
  34.     je inc_sign
  35.     cmp al, '*'
  36.     je inc_sign
  37.     cmp al, '^'
  38.     je inc_sign
  39.     cmp al, '/'
  40.     je inc_sign
  41.     cmp al, ')' ;Подсчёт правильности расстановки скобок
  42.     je dec_brackets
  43.     cmp al, '('
  44.     je inc_brackets  
  45.     mov counter_sign, 0  
  46.     cmp al, '0'  ;Если это цифра, то пропускаем
  47.     je main_loop
  48.     cmp al, '1'  
  49.     je main_loop
  50.     cmp al, '2'  
  51.     je main_loop
  52.     cmp al, '3'  
  53.     je main_loop
  54.     cmp al, '4'  
  55.     je main_loop
  56.     cmp al, '5'  
  57.     je main_loop
  58.     cmp al, '6'  
  59.     je main_loop
  60.     cmp al, '7'  
  61.     je main_loop
  62.     cmp al, '8'  
  63.     je main_loop
  64.     cmp al, '9'  
  65.     je main_loop
  66.     cmp al, 'z'  ;jl не работает почему-то
  67.     jg print_incorrect
  68.     test al, 'A' ;Поэтому эта строчка такая странная
  69.     jng print_incorrect
  70.     cmp al, '.' ;Защита от посторонних символов(кодировка сбита, по символам не посчитать)
  71.     je print_incorrect
  72.     cmp al, ','
  73.     je print_incorrect
  74.     cmp al, '"'
  75.     je print_incorrect
  76.     cmp al, "'"
  77.     je print_incorrect
  78.     jmp main_loop
  79.    
  80. inc_sign: ;Проверка, чтобы не было 2 подряд знака
  81.     inc counter_sign
  82.     cmp counter_sign, 2
  83.     je print_incorrect
  84.     jmp main_loop
  85.    
  86. inc_brackets:   ;Уменьшаем счётчик скобок
  87.     inc counter_brackets
  88.     jmp main_loop
  89. dec_brackets:   ;Увеличиваем счётчик скобок
  90.     dec counter_brackets
  91.     jmp main_loop
  92. print_correct:  ;Финальная проверка на корректность выражения и вывод на экран сообщения, что выражение корректно
  93.     cmp counter_brackets, 0
  94.     jne print_incorrect
  95.     mov ah,09h
  96.     mov dx, offset str_correct
  97.     int 21h
  98.     jmp quit
  99. print_incorrect:    ;Вывод на экран сообщения о том, что выражение некорректно
  100.     mov ah, 09h
  101.     mov dx, offset str_incorrect
  102.     int 21h
  103.     jmp quit
  104. quit:
  105.     mov ax, 4c00h
  106.     int 21h
  107. code ends
  108. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement