Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
59 / 58 / 39
Регистрация: 16.03.2012
Сообщений: 165
1

Подсчитать, сколько раз встречается в данной строке указанный символ

12.09.2018, 20:02. Показов 2565. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При построении выводится Warning: No stack

При запуске программы выводит только единицы.
В чем ошибка? запускал в TASM.

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
.model tiny
.code
.386
org 100h
start:
    mov ah,10   ;ввод строки
    lea dx,strBig
    int 21h
 
    mov ah,2    ;перевод строки
    mov dl,10
    int 21h
 
    xor bx,bx   ;очистить счетчик
    xor cx,cx
    mov cl,[len]    ;длина строки
    lea di,str  ;на строку
    mov al,'c'  ;символ, который надо подсчитать
m1:
    repne scasb ;искать символ в строке
    jnz short exit  ;символ не найден, выход
m2:         ;найден
    inc bl      ;увеличить счетчик на 1
    test cx,cx  ;если СХ не 0, в строке есть символы,
    jnz short m1    ; продолжить поиск
 
exit:
;----------Вывод на экран---------
    mov ax,bx
;вывод на экран
    xor     cx, cx
    mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
    xor     dx,dx
    div     bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
    push    dx
    inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
    test    ax, ax
    jnz     oi2
; Теперь приступим к выводу.
    mov     ah, 02h
oi3:
    pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
    add     dl, '0'
    int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
    loop    oi3
;-----------------------------------------
    xor ax,ax   ;ждать нажатия клавиши
    int 16h
 
    ret     ;выход из программы
 
;--------Строка-----------
strBig db 41    ;40 символов
len db ?    ;длина
str:        ;строка
 
    end start
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2018, 20:02
Ответы с готовыми решениями:

Строка: Подсчитать, сколько раз встречается в данной строке указанный символ
Здравствуйте, у меня тут такие задачи надо решить. Я новичок, и не очень понимаю всю суть...

Сколько раз заданный символ встречается в строке
Помогите написать подпрограмму, которая подсчитывает, сколько раз заданный символ встречается в...

Написать и протестировать функцию, которая подсчитывает, сколько раз в заданной строке встретился указанный символ
мне нужно решить задачу, помогите плз Написать и протестировать функцию, которая подсчитывает,...

Подсчитать, сколько раз в строке встречается символы x, y, z
В памяти дана строка символов находящаяся по адресу A1 и длиной N. Подсчитать сколько раз...

3
3408 / 1827 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
12.09.2018, 20:38 2
Tasm\tasm %1
Tasm\tlink %1 /t
Командная строка: %1- имя файла, без .asm, /t - ключ компилятору, создать файл, модель - tiny, т.е. .сом

Цитата Сообщение от Vadik1993 Посмотреть сообщение
Warning: No stack
Это сообщение, когда Вы пытаетесь создать файл как .ЕХЕ-файл, с кода, который, для этого не предназначенный
0
165 / 114 / 59
Регистрация: 12.07.2018
Сообщений: 277
12.09.2018, 21:09 3
Не отведена память для ввода строки, должно быть:

Assembler
1
2
3
strBig db 40    ;40 символов
len db ?    ;длина
str: db 40 dup(?)       ;строка
Добавлено через 3 минуты
Забыл стереть двоеточие после str, оно не нужно.
0
Модератор
Эксперт по электронике
8564 / 4412 / 1655
Регистрация: 01.02.2015
Сообщений: 13,704
Записей в блоге: 9
13.09.2018, 08:44 4
Бард, это DOS com программа. В отличие от DOS exe таким программам ОС выделяет всю доступную память и отдельно резервировать её не нужно. В старых книжках иной раз даже можно встретить перечисления констант - адресов переменных за пределами com программы - вместо резервирования этой памяти в теле образа программы.
Таким нехитрым образом уменьшается размер итогового файла.
Пример из книги по программированию VGA
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    mov ax, 4C00h
    int 21h
EndCode LABEL   FAR
Data_Offs   EQU OFFSET EndCode - 5D6h
Curr_VM     EQU 5DAh + Data_Offs
 
Area_DAC_0  EQU 5EEh + Data_Offs
Area_DAC_1  EQU     5F1h + Data_Offs
Area_DAC_2  EQU 6ADh + Data_Offs
Area_DAC_3  EQU 6B0h + Data_Offs
 
Area_DAC1_0 EQU 6B1h + Data_Offs
Area_DAC1_1 EQU 752h + Data_Offs
Area_DAC1_2 EQU 755h + Data_Offs

Vadik1993, я только изменил под структуру строки, а всё остальное оставил без изменения. Программа корректна.
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
.model tiny
.code
;.386
org 100h
start:
    mov ah,10   ;ввод строки
    lea dx,strBig
    int 21h
 
    mov ah,2    ;перевод строки
    mov dl,10
    int 21h
 
    xor bx,bx   ;очистить счетчик
    xor cx,cx
    mov cl,byte ptr[len]    ;длина строки
    mov di,str  ;на строку
    mov al,'c'  ;символ, который надо подсчитать
m1:
    repne scasb ;искать символ в строке
    jnz short exit  ;символ не найден, выход
m2:         ;найден
    inc bl      ;увеличить счетчик на 1
    test cx,cx  ;если СХ не 0, в строке есть символы,
    jnz short m1    ; продолжить поиск
 
exit:
;----------Вывод на экран---------
    mov ax,bx
;вывод на экран
    xor     cx, cx
    mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
    xor     dx,dx
    div     bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
    push    dx
    inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
    test    ax, ax
    jnz     oi2
; Теперь приступим к выводу.
    mov     ah, 02h
oi3:
    pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
    add     dl, '0'
    int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
    loop    oi3
;-----------------------------------------
    xor ax,ax   ;ждать нажатия клавиши
    int 16h
 
    ret     ;выход из программы
 
;--------Строка-----------
strBig  db      41    ;40 символов
EndCode label   near
len     equ     offset EndCode
str     equ     len+1     ;строка
 
    end start
0
13.09.2018, 08:44
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2018, 08:44
Помогаю со студенческими работами здесь

Указать сколько раз в строке встречается указанный символ
uses CRT; var S: String; C: Char; Cnt, I: Byte; begin Write('Vvedite stroky: '); ...

Строка: В заданной строке подсчитать, сколько раз встречается символ “*” и сколько раз символ ”+”.
Помогите описать данную программу так же как на скриншоте Условие:В заданной строке подсчитать,...

Сколько раз в данной строке встречается символ + и сколько раз символ *
1. Дана строка символов. Подсчитать: a) сколько раз в данной строке встречается символ + и сколько...

Подсчитать, сколько раз в заданной строке встретился указанный символ
1)Написать и протестировать функцию, которая подсчитывает, сколько раз в заданной строке встретился...

Подсчитать, сколько раз в заданной строке встретился указанный символ
Помогите пожалуйста:help: Написать и протестировать функцию, которая подсчитывает, сколько раз в...

Определить сколько раз в данной строке встречается символ, введенный с клавиатуры
Определить сколько раз в данной строке встречается символ, введенный с клавиатуры. Поиск символа в...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
В чем отличие между INNER JOIN и OUTER JOIN
bytestream 22.01.2025
В современных базах данных информация часто распределена между множеством взаимосвязанных таблиц, что делает операции объединения JOIN неотъемлемой частью работы с SQL. Эти операции позволяют. . .
Как сделать первую букву заглавной в JavaScript
bytestream 22.01.2025
JavaScript предоставляет разработчикам множество инструментов для эффективной работы с текстовыми данными. Одной из часто встречающихся задач при обработке строк является преобразование первой буквы. . .
Что такое Big O нотация и алгоритмическая сложность
bytestream 22.01.2025
Введение в алгоритмическую сложность В мире разработки программного обеспечения эффективность алгоритмов играет crucial роль в создании качественных приложений. Алгоритмическая сложность. . .
Как решать конфликты слияния (merge) в Git
bytestream 22.01.2025
Конфликты слияния в системе контроля версий Git возникают в ситуациях, когда две или более ветки разработки содержат несовместимые изменения в одних и тех же участках кода. Эти конфликты представляют. . .
Как использовать регулярные выражения
bytestream 22.01.2025
Регулярные выражения представляют собой мощный инструмент для работы с текстовыми данными, который позволяет осуществлять поиск, проверку и манипуляцию строками на основе определенных шаблонов. Этот. . .
Как выйти из Vim
bytestream 22.01.2025
Vim (Vi IMproved) представляет собой один из самых влиятельных текстовых редакторов в истории компьютерной индустрии, эволюционировавший из своего предшественника Vi, созданного Биллом Джоем в 1976. . .
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. ) Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru