Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 18.02.2020
Сообщений: 95
TASM

Проверить сбалансированность скобок в математическом выражении с помощью цепочечных команд

18.02.2021, 18:16. Показов 2416. Ответов 4

Студворк — интернет-сервис помощи студентам
Добрый вечер! Помогите, пожалуйста, с кодом. Есть наметки, но как его реализовать, чтобы всё правильно выводило на экран, даже не представляю. Я поняла, что в моем задании нужны в основном две команды lodsb и stosb, но куда точно их вставить и как использовать не знаю. Помогите, пожалуйста!

Задание. Проверить сбалансированность скобок в математическом выражении с помощью цепочечных команд.

Подпрограмма:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Skob proc near
 mov ax, dates
 mov ds, ax
 mov es, ax
 cld
 xor cx, cx
m1: lodsb 
      cmp al, '('
      je m2
      stosb
      cmp al, ')'
      je m3
      loop m1
m2: inc cx
      xor ah, ah
      push ax
      jmp m1
m3: or cx, cx
       jne m4
       
       jmp finish
m4: dec cx
       pop bx
       cmp al, '('
       jne m4
       stosb
       cmp al, ')'
       je m1  
finish: or cx, cx
         jz m5
        
         
clear: pop ax
         loop clear
m5: pop es
      pop cx
      mov sp, bp
      pop bp
 
ret
Skob endp
 
Главная программа:
 
start:
  
   mov ax, dates;
   mov ds, ax 
 
   call InputInt 
  
  
 
   call Skob    
 
  mov ax, 4c00h
  int 21h
 
  begin ends
 dates segment
  
   szOK    db 'OK',13,10,'$'
   szEr1   db 'Invalid pair',13,10,'$'
   szEr2   db 'Close bracket without open bracket',13,10,'$'
   szEr3   db 'Open bracket without close bracket',13,10,'$'
   strdsc db 6,0 
   strbuf db 6 dup (?)
dates ends
komod segment stack;
dw 128 dup (?);
komod ends
    end Start
Вложения
Тип файла: txt laba.txt (2.3 Кб, 7 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.02.2021, 18:16
Ответы с готовыми решениями:

Проверить,одинакого ли в математическом выражении число открывающих и закрывающих скобок
Проверить,одинакого ли в математическом выражении число открывающихся и закрывающихся скобок.

Проверить в математическом выражении, заданном строкой, соответствие открывающих и закрывающих скобок
Дорогие, посетители форума! Помогите пожалуйста решить задачу Проверить в математическом выражении, заданном строкой, соответствие...

Позиции скобок в математическом выражении
Дана строка с математическим выражением, необходимо посчитать количество строк, а также записать по парно позиции открытых и закрытых...

4
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8657 / 4493 / 1669
Регистрация: 01.02.2015
Сообщений: 13,902
Записей в блоге: 12
18.02.2021, 18:31
Вы бы определились с алгоритмом, а потом и за решение на любом языке можно браться.

Добавлено через 1 минуту
Из всего множества цепочечных команд вам понадобится только lodsb - чтение.
0
0 / 0 / 0
Регистрация: 18.02.2020
Сообщений: 95
01.03.2021, 17:44  [ТС]
Уважаемые форумчане, подскажите, пожалуйста, что не так с кодом?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
begin segment            ; Сегмент кода программы
assume cs:begin, ds:dates, ss: komod, es:dates
 
 
 Skob proc near
 mov dx,offset cout
mov ah,10
int 21h
mov si,offset cout+2
mov di,si
xor cx,cx
mov cl, cout[1]
m1: lodsb 
      cmp al, '('
      stosb
      je m2
      cmp al, ')'
      stosb
      je m3
      loop m1
m2: inc cx
      xor ah, ah
      mov al,')'
      stosb
      jmp m1
m3: or cx, cx
       jne m4
       mov al,'('
      stosb
      mov ah,9
      mov dx,offset szEr2
      int 21h
      jmp finish
m4: dec cx
       pop bx
       cmp al, '('
       stosb
       jne m4
       cmp al, ')'
       stosb
       je m1  
finish: or cx, cx
mov ah,9
      mov dx,offset szEr3
      int 21h     
jz m5
clear: pop ax
         loop clear
m5: pop es
      pop cx
      mov sp, bp
      pop bp
 
ret
Skob endp
 
 start:
  
   mov ax, dates;
   mov ds, ax 
   mov es,ax
  mov ah,09h
  mov dx,offset cout
   int 21h   
mov ah,09h
    call Skob
    int 16h
 
 
  mov ax, 4c00h
  int 21h
 
  begin ends
 dates segment
   cout   db   13,"vvedite stroky: ",'$'
   szOK    db 'OK',13,10,'$'
   szEr2   db 'Close bracket',13,10,'$'
   szEr3   db 'Open bracket',13,10,'$'
dates ends
komod segment stack;
dw 128 dup (?);
komod ends
    end Start
Вложения
Тип файла: txt laba.txt (1.3 Кб, 0 просмотров)
0
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
01.03.2021, 20:57
Лучший ответ Сообщение было отмечено Programmia как решение

Решение

Тестировалась на tasm 4.0

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
    .model tiny
    .code
    org 100h
 
; ввод строки в переменную buf длиной buflen
input   macro buf,buflen
     local m1
     jmp short m1
buf  db buflen+1
     db 0
     db buflen+1 dup (0)
m1:  mov dx,offset buf ; ввод строки
     mov ah,0Ah
     int 21h
     endm
 
start:  jmp beg
prompt  db "vvedite stroky: ",13,10,"$"
szOK    db "OK"
crlf    db 13,10,"$"
; szEr1   db "Invalid pair",13,10,"$" ; не используется
szEr2   db "Close bracket without open bracket",13,10,"$"
szEr3   db "Open bracket without close bracket",13,10,"$"
szEr4   db "Empty line",13,10,"$"
 
beg:    push cs
    pop  ds
    push cs
    pop  es
    mov dx,offset prompt
    mov ah,9
    int 21h
    input strbuf,70 ; ввод строки макс длиной 70 в переменную strbuf
    mov dx,offset crlf
    mov ah,9
    int 21h
    mov si,offset strbuf
    inc si
    lodsb  ; cx=длина введенной строки
    mov cl,al
    mov ch,0
    jcxz er4 ; cx=0 ? - пустая строка
    mov bx,0 ; уровень скобок=0
main:   lodsb    ; основной цикл - загрузить в al следующий символ
    call testchar ; проверить на скобки
    cmp bx,0 ; есть ) больше чем (
    jl er2
    loop main ; конец основного цикла
    cmp bx,0 ; есть ( больше чем )
    jg er3
    mov dx,offset szOk
exdos:  mov ah,9
    int 21h
    mov ah,0
    int 16h
    mov ax,4C00h
    int 21h
er2:    mov dx,offset szEr2
    jmp exdos
er3:    mov dx,offset szEr3
    jmp exdos
er4:    mov dx,offset szEr4
    jmp exdos
 
testchar:cmp al,"(" ; это ( - увеличить bx
    jnz m1
    inc bx
    ret
m1: cmp al,")" ; это ) - уменьшить bx
    jnz m2
    dec bx
m2: ret
 
    end start
2
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
01.03.2021, 23:05
Лучший ответ Сообщение было отмечено ФедосеевПавел как решение

Решение

Цитата Сообщение от qbfan Посмотреть сообщение
Тестировалась на tasm 4.0
Ещё ниже TASM 2.0:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
model tiny
.code
szMax   equ 200
org 100h
begin:  mov ah,9
    lea dx,dbInp
    int 21h
.data
dbInp   db  10,13,'Enter string:$'
.code
    mov ah,10
    lea dx,dbMax
    int 21h
.data
dbMax   db  szmax
dbLen   db  ?
dbStr   db  szMax dup(?)
.code
    lea si,dbStr
    xor cx,cx
    xor bx,bx
    mov cl,dbLen
    cld
@@01:   lodsb
    cmp al,'('
    jnz @@02
    inc bx
@@02:   cmp al,')'
    jnz @@03
    dec bx
    jns @@03
    lea dx,dbErr
    jmp @@04
.data
dbErr   db  10,13,'wrong string$'
.code
@@03:   loop    @@01
    or  bx,bx
    lea dx,dbOK
.data
dbOk    db  10,13,'Good strring$'
.code
    jz  @@04
    lea dx,dbErr
@@04:   mov ah,9
    int 21h
    ret
    end begin
Вложение 1231087
В свое время TASM 2.0 делал такие чудеса, до которых только MASM 6.14 додумался.
Не позорьте TASM.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2021, 23:05
Помогаю со студенческими работами здесь

Баланс скобок в математическом выражении
В математическом выражении встречаются скобки трех типов: круглые, квадратные и фигурные Дана строка, задающая математическое выражение....

Проверить сбалансированность скобок
дано математическое выражение содержащий только круглые дужки.Використовуючы стек проверить сбалансированность скобок.:scratch:

Проверить сбалансированность скобок в строке
• Дана строка S. проверить сбалансированность скобок.

Проверить сбалансированность скобок в тексте
Помогите плиз. Нужно сдать зачёт 24 июня((( 1) Из текстового файла А сформировать текстовый файл В, в который включать только нечётные...

Проверить сбалансированность скобок в тексте
Проверить сбалансированность скобок в тексте(скобки сбалансированы,если закрывающая скобка расположена после соответствующей открывающей и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru