Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
Kobe_kobe
2 / 2 / 0
Регистрация: 14.10.2011
Сообщений: 89
0

Заменить в тексте каждый символ "+" на символ "-", а символ "-" на символ "+". Подсчитать количество замен

27.11.2012, 20:50. Просмотров 618. Ответов 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
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
;                      Макроопределения
;       Вызов функции DOS,  вызывается функция с номером f.
;       Внимание! Изменяется содержимое регистра ah.
_f      macro   f
        mov     ah,f
        int     21h
        endm
 
;--------------------------------------------------------------------------
;                   Вывод текста на экран
;   Текст  находится  в памяти  по  адресу  adr  и завершается символом "$".
_puts   macro   adr_str
        push    ax
        push    dx
        lea      dx, adr_str
        _f       9
        pop     dx
        pop     ax
        endm
;------------------------------------------------------------------------
        assume  cs:code, ds:data    ; назначение регистров 
                                    ; сегмента команд и сегмента данных
;------------------------------------------------------------------------
; Сегмент данных
data    segment para public 'data'
soob1       db      13,10,'Error open input file',13,10,'$'
soob2       db      13,10,'Error create output file',13,10,'$'
soob3       db      13,10,'Error read file',13,10,'$'
soob4       db      13,10,'Error write file',13,10,'$'
soob5   db      13,10,'Error close input file',13,10,'$'
soob6       db      13,10,'Error close output file',13,10,'$'
name_in db  'input.txt',0
name_out    db  'output.txt',0
nom_in  dw  ?
nom_out dw  ?
in_buf  db  80 dup(?)
out_buf db  'Max dlina slova = '
maxdl       db  62 dup( ' ')
data        ends
;-------------------------------------------------------------
; Сегмент кода
code        segment para public 'code'
main        proc
            mov ax,data             ; инициализация pегистpа
        mov ds,ax               ; сегмента данных
b1:         lea dx,name_in          ; Открытие входного файла
            mov al,0                    
            _f  3Dh                     
            jnc b2                  ; Файл открылся
            _puts   soob1               ; Файл не открылся
            jmp v                   
b2:         mov nom_in,ax           ; N вх.файла
            lea dx, name_out            ; Открытие выходного файла
            mov al,1                    
            _f  3Dh                 
            jnc b3                  ; Файл открылся
            lea dx,name_out         ; Создание выходного файла
         mov    cx,0                
            _f  3Ch                 
            jnc b3                  ; Создание успешное
            _puts   soob2               ; Файл не создался
            jmp v2                  
b3:         mov nom_out,ax          ; N вых.файла
        xor ax,ax
        push    ax          ; выходной параметр - к-во введ-х байтов в стек
            call    vvod                ; Ввод записи
            jnc b4                  ; Ввод успешный
            _puts   soob3               ; Файл не читается
            jmp v1                  
b4:         ;pop    ax          ; результат - к-во введ-х байтов в ах
        ;push   ax          ; входной параметр - к-во введ-х байтов
        lea dx,maxdl        ; входной параметр – адрес результата
        push    dx
call    obrab               ; Обработка данных
            call    vivod               ; Вывод записи
            jnc v1                  ; Вывод успешный
            _puts   soob4               ; Файл не записывается
v1:     mov bx,nom_out          ; Закрытие выходного файла
            _f  3Eh                 
            jnc v2                  ; Закрытие успешное
            _puts   soob6               ; Файл не закрылся
v2:     mov bx,nom_in               ; Закрытие входного файла
            _f  3Eh                 
            jnc v
            _puts   soob5               ; Файл не закрылся
v:
            _f  4Ch                 ; Выход в DOS
main        endp
 
vvod        proc                        ; Ввод записи
        push    bp
        mov bp,sp
        push    ax
        push    bx
        push    cx
        push    dx
            mov     bx,nom_in           ; N входного файла
            mov cx,80               ; К-во вводимых байтов max
            lea     dx,in_buf           ; Адрес входного буфера
            _f  3Fh                 ; Факт. к-во введ-х байтов -> ax
        mov     4[bp], ax       ; Параметр - факт. к-во введ-х байтов в стек
        pop dx
        pop cx
        pop bx
        pop     ax
        pop bp
            ret                         
vvod        endp
 
vivod       proc                        ; Вывод записи
push    bp
        mov bp,sp
        push    ax
        push    bx
        push    cx
        push    dx
            mov     bx,nom_out          ; N входного файла
            mov cx,80               ; К-во выводимых байтов
        lea     dx,out_buf          ; Адрес выходного буфера
            _f  40h   
            pop dx
        pop cx
        pop bx
        pop     ax
        pop bp
            ret
vivod       endp
 
obrab       proc                            ; Обработка записи
;  Распределение регистров:
;    cx - счетчик цикла
;    si - адрес (смещение) текущего входного символа
;    al - максимальная длина слова
;    ah - текущая длина слова
push    bp
        mov bp,sp
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
            mov     cx,6[bp]        ; Параметр – факт. кол-во введенных символов
            lea     si,in_buf           ; Адрес входного буфера
            mov     al,0
            mov ah,0
;                     Цикл чтения входного буфера: c1-c5
c1:         cmp byte ptr [si],' '
            jne c3                  ; Не пробел
;   Пробел - конец слова
            cmp ah,al
            jbe c2                  ; Слово не длиннее максимального
            mov al,ah
c2:     mov ah,0
            jmp c5
c3:     inc ah                  ; Не пробел - символ в слове
c5:     inc si                  ; К следующему символу
            loop    c1
            cmp ah,al               ; Проверка последнего слова
            jbe c6
            mov al,ah               ; Слово длиннее максимального
;                   Преобразование результата в текст: получение цифр рез-та
c6:         cbw                         
            mov bl, 10          ;
            div bl                  ; al, ah - ст. и мл. цифpы
            add al,'0'              ; Значения цифр - в символы
            add ah,'0'              ;
        mov     di, 4[bp]       ; Параметр - адрес результата
        mov [di],ax             ; Запись цифр результата
        pop si
pop dx
        pop cx
        pop bx
        pop     ax
        pop bp
            ret
obrab       endp
code        ends
                end main


Вернуться к обсуждению:
Заменить в тексте каждый символ "+" на символ "-", а символ "-" на символ "+". Подсчитать количество замен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 20:50
Готовые ответы и решения:

Заменить во вводимом тексте каждое слово "ЭВМ" словом "машина"
Здравствуйте. Поможете разобраться с ниже приведенной задачей: Заменить во вводимом тексте...

Найти символ " А " и определить его номер
MOV AH,3Dh MOV AL,2 MOV DX,offset fname INT 21h MOV handle,AX ; определить длину файла...

Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***".
Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***". Data Segment para 'Data'...

Модуль драйвера клавиатуры, cтирающий предыдущий символ при нажатии клавиш "win"
Курсовая работа, задание следующее: Разработать модуль драйвера клавиатуры, работающий в...

Сформировать новую строку так, чтобы после символа ":" был вставлен первый символ строки
Вводится строка с клавиатуры с отображением на экране. Количество вводимых символов определяется...

0
Другие темы раздела
Assembler Напишите программу умножения трех чисел размером в 1 байт, без учета знака http://www.cyberforum.ru/assembler/thread711071.html
1.Напишите программу умножения трех чисел размером в 1 байт, без учета знака, с выводом результата на экран. Слагаемые вводит пользователь с клавиатуры 2.Напишите программу ввода символа с...
Assembler Ассемблерные вставки в Delphi: шифрование ASCII символов сообщения с каждым символом ключа Прошу помочь. Задание: написать программу на ассемблере в среде Delphi. Программа шифрует каждый ASCII символ сообщения с каждым символом ключа (загруженным из файла или рандомным) с помощью операции... http://www.cyberforum.ru/assembler/thread711030.html
Как функцию C++ вызвать в masm Assembler
Собственно есть функция на с++,нужно ее вызвать в аsm. использую masm(который встроенный в visual studio),как это примерно осуществляется? все пишется в .cpp или и в .cpp ,и в .asm? вот код на...
Assembler Тестирование ОЗУ: каким образом обращаться к ячейке памяти
Тема – тест ОЗУ микропроцессорной системы (на х88). Алгоритм теста – попарное считывание по диагонали. Алгоритм приведен ниже. По алгоритму: ASR –адрес контролируемая ячейка памяти, AIJ –...
Assembler Почему срабатывает только одна итерация цикла http://www.cyberforum.ru/assembler/thread710157.html
Только начал изучать язык, и хотел бы разобраться с Loop ' ми. писал и так и эдак, гуглил тоже по разному, не могу реализовать его сам. Подскажите, почему цикл пробегается только 1 раз? Что не так я...
Assembler Найти сумму абсолютных величин, меньших 6 Помогите написать код Найти сумму абсолютных величин, меньших 6. Массив байт. нужно сделать вот по такому примеру data segment max dw ? mass dw 10,24,76,479,-347,281,-24,70,124,97 data ends... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru