• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Использование стека. Проверка баланса расстановки скобок в строке

KinG Maguire

New member
24.12.2023
1
0
BIT
22
Написать программу на языке ассемблера, которая использует стек для проверки баланса расстановки скобок в строке символов.1.1. В сегменте стека определить стек из 20 двухбайтовых ячеек с начальным значением в виде символа «$».1.2. В сегменте данных определить строку не более 20 символов, содержащую произвольное арифметическое выражение, в котором используются три вида скобок «( )», «[ ]» и «{ }». Последовательность и вложенность скобок может быть любая.1.3. Также в сегменте данных определить байтовую ячейку для сохранения результата проверки.1.4. В сегменте кода, используя стек, проверить, все ли скобки закрыты, соответствует ли каждая закрывающаяся скобка открывающейся и нет ли лишних закрывающихся скобок.1.5. В соответствующую ячейку памяти поместить код результата проверки (0 – скобки расставлены правильно, 1 - несоответствие скобок, 2 – не все скобки закрыты, 3 – лишние закрывающиеся скобки).1.6. Если возникла ошибка несоответствия скобок, то в регистр DL поместить код скобки, которая ожидается, иначе – 0.


проверьте правильно ли я написал код для данной задачи:



Код:
s_s segment stack           
dw 100 dup (0)           
s_s ends
d_s segment
s1 db '(((())){{{}}}}[[qz]]','$'       
r1 db 0
d_s ends           
c_s segment
assume ss:s_s, ds:d_s, cs:c_s
begin:
mov ax, d_s
mov ds,ax
xor ax,ax
lea si, s1           
k1: lodsb           
cmp si,21                           
cmp al, '('           
je a1       
cmp al, '['
je a1
cmp al, '{'
je a1
cmp al, ')'           
je b1       
cmp al, ']'
je b1
cmp al, '}'
je b1
jmp k1           
a1:           
inc cx           
push ax           
jmp k1
b1:           
cmp cx,0           
jne q1           
mov r1,3           
q1: dec cx           
pop bx               
cmp bl,'('           
jne q2           
cmp al, ')'           
je k1           
q2: cmp bl,'['
jne q3
cmp al,']'
je k1
q3: cmp bl,'{'
jne q4
cmp al,'}'
je k1
q4: mov r1,1       
cmp cx,0           
je f2               
jmp f3           
cmp cx,0       
je f2               
mov r1,2           
f3: pop ax           
loop f3
cmp r1,1           
je z1           
jmp f2           
z1: cmp bl, '('           
je z2           
cmp bl, '['
je z3
cmp bl, '{'
je z4
cmp al, ')'
je z5
cmp al, ']'
je z6
cmp al, '}'
je z7
jmp f2
z2: mov dl, ')'       
jmp f2
z3: mov dl, ']'
jmp f2
z4: mov dl, '}'
jmp f2
z5: mov dl, '('
jmp f2
z6: mov dl, '['
jmp f2
z7: mov dl, '{'
f2: mov ah,4ch
int 21h
c_s ends
end begin
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!