Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
4 / 3 / 4
Регистрация: 06.12.2011
Сообщений: 63

Подсчёт количества букв "a" в файле и вывод на экран [tasm]

26.05.2012, 17:55. Показов 3277. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот что-то написал. Не запускается.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
.486
model small
Data SEGMENT use16
    ASSUME ds: Data
mess1 db 'Source file name: ','$'
mess3 db 0dh, 0ah, 'Error open source file!$'
mess5 db 0dh, 0ah, 'Read file error!$'
mess db 'Hello world!',0    ;Описание строки
file1 db 100, 100 dup(0)
 
hand1 dw 0
buff db 1 dup(?)
num db 0
Strk db 7 dup(0),0
 
Data ENDS
Stk  SEGMENT use16 STACK
    ASSUME ss: Stk
    db 256 dup(0)
Stk  ENDS
Code SEGMENT use16
    ASSUME cs: Code
start:
    mov ax, data                ;В AX адрес сегмента данных
    mov ds, ax                  ;DS устанавливаем на AX
                ;------ Ввод имени и открытие исходного файла -------
    mov ah, 09h                 ;Вывод приглашения ввода имени
    mov dx, offset mess1        ;исходного файла
    int 21h
    mov ah, 0ah                 ;Ввод имени файла
    mov dx, offset file1
    mov si, dx
    inc si
    int 21h
    xor ax, ax                  ;Запись вместо 0dh значения 0
    mov al, ds:[si]
    add si, ax
    mov byte ptr ds:[si+1], 0
    mov ah, 3dh                 ;Открытие файла для чтения
    add dx, 2
    xor al, al
    int 21h
    jnc next0
    mov ah, 09h                 ;Если файл открыть не удалось
    mov dx, offset mess3
    int 21h
    jmp exit0
next0:                          ;Успешное открытие файла
    mov word ptr hand1, ax
                
                ;------ Цикл чтения -----------
loop0: 
    mov ah, 3fh             ;Чтение из исходного файла
    mov bx, hand1
    mov dx, offset buff
    mov cx, 1
    int 21h
    jnc next2
    mov ah, 09h                 ;Вывод сообщения, если ошибка
    mov dx, offset mess5
    int 21h
    jmp next4
 
next2:  
    
    cmp buff,'.'
    jmp num0
    
    
    
    jmp next3
num0: inc num   
 
next3: 
    cmp ax, 1               ;Проверка на конец файла
    jne next4
    jmp loop0                   ;Переход к следующей итерации
next4:                          ;Закрытие файла
    mov ah, 3eh
    mov bx, hand1
    int 21h
    
    
    
    
    mov ax,num
      ;вывод на экран
next5:
    lea si, Strk        ;Загружаем в SI смещение Strk
    add si, 6       ;Переходим в конец строки
    mov cx, 10      ;Заносим в CX значение 10
next6:
    xor dx, dx      ;Очистка DX
    div cx          ;Деление DX:AX / CX
    add dl, 48      ;Суммируем остаток с кодом ‘0’
    mov ds:[si], dl     ;Записываем в строку
    or ax, ax       ;Проверка AX на ноль
    jz next6        ;Если ноль, то переходим на next6
    dec si          ;Уменьшаем SI на 1
    jmp next5       ;Переход на next5
next7:
    mov ax, 0b800h      ;Заносим в AX адрес сегмента видеобуфера
    mov es, ax      ;Устанавливаем ES на видеобуфер
    xor di, di      ;Очистка DI
    mov ah, 0Fh         ;В AH записываем код цвета
    
next8:
    lodsb           ;Загрузка в AL из DS:[SI]
    or al, al       ;Проверка AL на ноль
    jz next7        ;Если ноль, то переход на next7
    stosw           ;Запись AX в ES:[DI]
    jmp next8       ;Переход на next8    
        
exit0:                          ;Завершение программы
    mov ax, 4c00h
    int 21h
Code ENDS
end start
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2012, 17:55
Ответы с готовыми решениями:

Подсчет количества десятичных дробей в файле и вывод их количества
Есть код на открытие файла и считывания чисел из него. Данные файла: 16.75 56.43 32.34 -5.00 76.35 87.34 25.46 12.45 43.63 58.53 35.67...

Подсчет количества повторяющихся букв в файле
Всем привет. Существует следующая проблема. Дан символьный файл f: подсчитать число повторений в файле каждой из букв 'a','b','c','d',...

Подсчет количества букв в файле, их кодирование и расшифровка
Здравствуйте. Мне нужно составить программу, которая подсчитает количество каждой буквы в файле input.txt (в этом файле находится некоторый...

33
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
26.05.2012, 18:55
В смысле, не запускается, что выдает?
0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
26.05.2012, 19:03
Скажи, где глохнет в отладчике (на какой команде).
0
4 / 3 / 4
Регистрация: 06.12.2011
Сообщений: 63
26.05.2012, 19:44  [ТС]
Вывод на экран должен осуществляться путём перевода числа(регистр Аx) в строку и вывод её на экран, т.к. сразу нельзя вывести строку. Мне нужно записать число(num) в ax.

Добавлено через 22 секунды
программа не компилится
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
26.05.2012, 19:56
Напишите в начале программы не .486, а .286
В стр.13 num db 0 – переменная размером байт, а в стр.86 mov ax,num ах-размером в слово. Или переменную надо сделать DW, или mov al,num.
Преобразование числа с стр.92, выполняет бесконечный цикл (прога зависает). Преобразовывает первую цифру правильно, а записывает на одну позицию левее, чем надо, вторую цифру делает тоже правильно и записывает правильно. С этого места повторяется деление, запись и так в бесконечном цикле.
Кстати, переменная num db 0 только для файлов размером не более 256 символов.
1
4 / 3 / 4
Регистрация: 06.12.2011
Сообщений: 63
27.05.2012, 14:01  [ТС]
Подправил.. на экран выводит число. Но не то, что нужно. Вроде как выводит кол-во символов в файле...
содержимое файла ... "gfvf v/f.gf.d "
вывело... 15

Assembler
1
2
3
4
5
 cmp buff,'.'
    jmp num0
    
    jmp next3
num0: inc num
Что не так?
И как проверять не только точки а и другие знаки препинания? Каждый раз писать эту проверку, только менять знак? или есть команда типа or, and...?
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
27.05.2012, 19:50
Выкладывайте весь новый код.
0
4 / 3 / 4
Регистрация: 06.12.2011
Сообщений: 63
27.05.2012, 21:07  [ТС]
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
.486
model small
Data SEGMENT use16
    ASSUME ds: Data
mess1 db 'Source file name: ','$'
mess3 db 0dh, 0ah, 'Error open source file!$'
mess5 db 0dh, 0ah, 'Read file error!$'
mess db 'Hello world!',0    ;Описание строки
file1 db 100, 100 dup(0)
 
hand1 dw 0
buff db 1 dup(?)
num dw 0
Strk db 7 dup(0),0
 
Data ENDS
Stk  SEGMENT use16 STACK
    ASSUME ss: Stk
    db 256 dup(0)
Stk  ENDS
Code SEGMENT use16
    ASSUME cs: Code
start:
    mov ax, data                ;В AX адрес сегмента данных
    mov ds, ax                  ;DS устанавливаем на AX
                ;------ Ввод имени и открытие исходного файла -------
    mov ah, 09h                 ;Вывод приглашения ввода имени
    mov dx, offset mess1        ;исходного файла
    int 21h
    mov ah, 0ah                 ;Ввод имени файла
    mov dx, offset file1
    mov si, dx
    inc si
    int 21h
    xor ax, ax                  ;Запись вместо 0dh значения 0
    mov al, ds:[si]
    add si, ax
    mov byte ptr ds:[si+1], 0
    mov ah, 3dh                 ;Открытие файла для чтения
    add dx, 2
    xor al, al
    int 21h
    jnc next0
    mov ah, 09h                 ;Если файл открыть не удалось
    mov dx, offset mess3
    int 21h
    jmp exit0
next0:                          ;Успешное открытие файла
    mov word ptr hand1, ax
                
                ;------ Цикл чтения -----------
loop0: 
    mov ah, 3fh             ;Чтение из исходного файла
    mov bx, hand1
    mov dx, offset buff
    mov cx, 1
    int 21h
    jnc next2
    mov ah, 09h                 ;Вывод сообщения, если ошибка
    mov dx, offset mess5
    int 21h
    jmp next4
 
next2:  
    cmp buff,'.'
    jmp num0
    
    
    
    jmp next3
num0: inc num   
 
next3: 
    cmp ax, 1               ;Проверка на конец файла
    jne next4
    jmp loop0                   ;Переход к следующей итерации
next4:                          ;Закрытие файла
    mov ah, 3eh
    mov bx, hand1
    int 21h
    
    
    mov ax,num
      ;вывод на экран
next5:
    lea si, Strk        ;Загружаем в SI смещение Strk
    add si, 6       ;Переходим в конец строки
    mov cx, 10      ;Заносим в CX значение 10
next6:
    xor dx, dx      ;Очистка DX
    div cx          ;Деление DX:AX / CX
    add dl, 48      ;Суммируем остаток с кодом ‘0’
    mov ds:[si], dl     ;Записываем в строку
    or ax, ax       ;Проверка AX на ноль
    jz next7        ;Если ноль, то переходим на next6
    dec si          ;Уменьшаем SI на 1
    jmp next6       ;Переход на next5
next7:
    mov ax, 0b880h      ;Заносим в AX адрес сегмента видеобуфера
    mov es, ax      ;Устанавливаем ES на видеобуфер
    xor di, di      ;Очистка DI
    mov ah, 0Fh         ;В AH записываем код цвета
next8:
    lodsb           ;Загрузка в AL из DS:[SI]
    or al, al       ;Проверка AL на ноль
    jz exit0        ;Если ноль, то переход на next7
    stosw           ;Запись AX в ES:[DI]
    jmp next8       ;Переход на next8    
        
exit0:                          ;Завершение программы
    mov ax, 4c00h
    int 21h
Code ENDS
end start
Добавлено через 2 минуты
Считывание из файла происходит по одному символу, потом проверяется является ли он "."... здесь где-то и есть ошибка.
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
28.05.2012, 14:07
Assembler
1
2
3
next2:  
    cmp buff,'.'
    jmp num0
Нет здесь проверки, а только безусловный переход на метку jmp num0 независимо от результата.
1
4 / 3 / 4
Регистрация: 06.12.2011
Сообщений: 63
28.05.2012, 15:38  [ТС]
Цитата Сообщение от AFP Посмотреть сообщение
Assembler
1
2
3
next2:  
    cmp buff,'.'
    jmp num0
Нет здесь проверки, а только безусловный переход на метку jmp num0 независимо от результата.
А как проверить???
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
28.05.2012, 15:40
nicklifs, заменить jmp num0 на условный переход
0
4 / 3 / 4
Регистрация: 06.12.2011
Сообщений: 63
28.05.2012, 15:41  [ТС]
Цитата Сообщение от Mikl___ Посмотреть сообщение
nicklifs, заменить jmp num0 на условный переход
Я особо не разбираюсь, подскажите... одна строчка ведь.
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
28.05.2012, 15:44
jz имя метки (если да (точка), то переход на метку)
jnz имя метки (если нет (не точка), то переход на метку)
1
4 / 3 / 4
Регистрация: 06.12.2011
Сообщений: 63
28.05.2012, 15:53  [ТС]
Мне нужно проверить все знаки препинания, как это сделать?
писать для каждого симвроа такую проверку, или как-то можно объединить?
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
28.05.2012, 16:00
nicklifs, поищите по форуму.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
28.05.2012, 16:00
nicklifs, оформить проверку точки в процедуру, а вместо точки подставить переменную chr и перед вызовом процедуры будешь присваивать chr значение '.', ',', ':', ';' и т.д.
0
4 / 3 / 4
Регистрация: 06.12.2011
Сообщений: 63
28.05.2012, 16:04  [ТС]
Цитата Сообщение от Mikl___ Посмотреть сообщение
nicklifs, оформить проверку точки в процедуру, а вместо точки подставить переменную chr и перед вызовом процедуры будешь присваивать chr значение '.', ',', ':', ';' и т.д.
А может можно использовать такие вспомаг. слова как.... and, or, ??
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
28.05.2012, 16:05
Цитата Сообщение от nicklifs Посмотреть сообщение
А может можно использовать такие вспомаг. слова как.... and, or, ??
Для чего?
0
4 / 3 / 4
Регистрация: 06.12.2011
Сообщений: 63
28.05.2012, 16:07  [ТС]
Например я пишу cmp buf,'.' or ','
ну и так далее... таких конструкций нету?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
28.05.2012, 16:22
nicklifs, такой конструкции в ассемблере нет, я же тебе написал, оформляй процедуру или тупо проверяй на оставшиеся знаки препинания как проверил на "точку"
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2012, 16:22
Помогаю со студенческими работами здесь

Подсчет и сравнение количества букв ‘А’ и ‘О’ в текстовом файле
Составить программу подсчета и сравнения количества букв ‘А’ и букв ‘О’ в заданном текстовом файле произвольной длины. Результат оформить...

Подсчет количества прописных букв в текстовом файле. Pascal ABC
Напишите программу, подсчитывающую количество прописных букв (каких конкретно не указано) в текстовом файле.

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

Подсчет количества полей в таблице и вывод значения на экран( Access)
Добрый день! Вот пришлось написать маленький модуль для accessa, все не могу разобраться,как в переменную занести поля таблици, как...

Подсчет заглавных русских букв в файле и вывод их в виде сообщения. Несоответствие типов
Программа подсчитывает заглавные русские буквы в файле и выводит их в виде сообщения. В конце говорит про несоответствие типов, но как?...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru