5 / 5 / 8
Регистрация: 26.04.2016
Сообщений: 66
1

Замена одного символа на два

20.09.2017, 08:06. Показов 809. Ответов 7

Author24 — интернет-сервис помощи студентам
Нужно заменить в строке все символы # на &&. Нужно применять цепочечные команды. После первой замены исходная строка перестает копироваться в результирующую. При исходной строке 123#12345 в результат копируется только 123&&.

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
 data segment para public "data"
 
source db 127 dup('$')
marker  db 127 dup('#')
result db 256 dup('$')
tmp_cx db ?
 
alt_si db 0
first db 1
iter db 0
 
 
data ends
 
code segment para public "code"
 
start:
assume ds:data,cs:code,es:data
mov ax,data
mov ds,ax
mov es,ax
cld
 
prog:
 
mov si,0
mov cx,127
inp:
mov ah, 01h
int 21h
cmp al,0dh
je inp_end
mov source[si], al
inc si
 
loop inp
 
inp_end:
xor bx,bx
mov bx,0
lea si,source
lea di,marker
 
xor cx,cx
 
 
mov cx,127
n1:
repne cmps source,marker
cmp cx,0
je nxt
 
mov tmp_cx,cl
xor cx,cx
mov cl,126
 
sub cl,tmp_cx
lp:
mov al,source[bx]
add bl,iter
mov result[bx],al
sub bl,iter
inc bx
loop lp
 
 
mov result[bx],'&'
inc bx
mov result[bx],'&'
inc iter
mov cl,tmp_cx
inc si
inc di
loop n1
nxt:
 
mov si,0
mov cx,255
outp:
cmp result[si],'$'
;je stp
mov ah,02h
mov dl, result[si]
 
int 21h
inc si
loop outp
stp:
mov AX,4c00h
int 21h
 
code ends
 
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2017, 08:06
Ответы с готовыми решениями:

Замена одного символа на два других
Задача такая: Дан текст. Заменить в нем все точки на восклицательные знаки с пробелами(« ! »). И...

Замена одного символа
Доброго времени суток! Необходимо из значения убрать все нули и произвести замену на / Пример:...

Замена одного символа на другой
Всем привет! Имеется таблица, нужно в последнем (6м) столбце проверять, если стоит символ ".," то...

Замена одного символа на другой
Продолжаю познания работы с текстовыми файлами. Пытаюсь заменить один символ на другой и вывести...

7
Эксперт Hardware
Эксперт Hardware
6157 / 2396 / 397
Регистрация: 29.07.2014
Сообщений: 3,141
Записей в блоге: 4
20.09.2017, 15:41 2
Цитата Сообщение от BlindFox Посмотреть сообщение
После первой замены исходная строка перестает копироваться
cmpsb сравнивает строки.
если тебе нужен только символ "#", значит поиск символа в строке - scasb.. по окончании которого проверяй СХ, и если он не нуль, то подменив(#) двумя апперсандами(&&) продолжай поиск.
замени cmpsb на scasb..
0
5 / 5 / 8
Регистрация: 26.04.2016
Сообщений: 66
20.09.2017, 17:48  [ТС] 3
Нужно обязательно использовать цепочечную команду.

С выводом, я собственно, разобрался. Нужно просто добавить еще один цикл копирования.

Но теперь заметил проблему с итерацией элементов при замене, плюс не заменяются символы, идущие подряд.

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
 data segment para public "data"
 
source db 127 dup(' ')
marker  db 127 dup('#')
result db 256 dup(' ')
tmp_cx db ?
 
alt_si db 0
first db 1
iter db 0
num db 126
 
akk dw 0
 
data ends
 
code segment para public "code"
 
start:
assume ds:data,cs:code,es:data
mov ax,data
mov ds,ax
mov es,ax
cld
 
prog:
 
mov si,0
mov cx,127
inp:
 
mov ah, 01h
int 21h
 
cmp al,0dh
je inp_end
 
mov source[si], al
inc si
 
loop inp
 
inp_end:
xor bx,bx
mov bx,0
lea si,source
lea di,marker
 
xor cx,cx
xor dx,dx
mov dx,0
 
mov cx,127
n1:
repne cmps source,marker
cmp cx,0
je nxt
 
 
 
mov tmp_cx,cl
xor cx,cx
mov cl,num
 
 
sub cl,tmp_cx
cmp akk,0
je lp
add cx,akk
lp:
 
mov al,source[bx]
 
add bl,iter
 
mov result[bx],al
sub bl,iter
inc bx
 
loop lp
 
cmp akk,0
je neq
sub bx,akk
 
neq:
mov result[bx],'&'
 
inc bx
 
mov result[bx],'&'
inc iter
cmp akk,0
je neq2
;inc bx
sub bx,akk
;dec iter
neq2:
 mov akk,1
 
 
mov cl,tmp_cx
xor ax,ax
mov al,tmp_cx
mov num,al
 
;inc si
;inc di
 
 
loop n1
nxt:
 
mov si,0
mov cx,255
outp:
cmp result[si],'$'
;je stp
mov ah,02h
mov dl, result[si]
 
int 21h
inc si
loop outp
stp:
mov AX,4c00h
int 21h
 
code ends
 
end start
0
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
21.09.2017, 02:53 4
Цитата Сообщение от BlindFox Посмотреть сообщение
xor bx,bx
mov bx,0
Цитата Сообщение от BlindFox Посмотреть сообщение
xor dx,dx
mov dx,0
если ведро дырявое, то сколько воду в него не лей все равно ведро будет пустое..
0
Заблокирован
21.09.2017, 07:15 5
Цитата Сообщение от BlindFox Посмотреть сообщение
обязательно использовать цепочечную команду
видимо
Assembler
1
2
    std
rep movsb
0
Эксперт Hardware
Эксперт Hardware
6157 / 2396 / 397
Регистрация: 29.07.2014
Сообщений: 3,141
Записей в блоге: 4
21.09.2017, 17:16 6
а чё, scasb не цепочечная?
0
Заблокирован
21.09.2017, 17:25 7
я где то это утверждал? или сказано "использовать только одну цепочечную команду"
0
Эксперт Hardware
Эксперт Hardware
6157 / 2396 / 397
Регистрация: 29.07.2014
Сообщений: 3,141
Записей в блоге: 4
21.09.2017, 17:46 8
Цитата Сообщение от BlindFox Посмотреть сообщение
Нужно обязательно использовать цепочечную команду.
....
0
21.09.2017, 17:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2017, 17:46
Помогаю со студенческими работами здесь

Замена одного символа в String
Можно ли в C# воздействовать на отдельные символы строки (string). На следующий код компилятор...

Замена одного символа в формуле
Здравствуйте уважаемые! Скажите как поменять один символ в формулах с > на < в 81 одной таблице...

Замена одного символа на три
Здравствуйте. Есть задача: "Даны две строки. Заменить на символы *** символы из 1-ой строки,...

Замена одного символа другим
Допустим есть у меня текст "12345#6" Нужно заменить # на нужный мне символ как такое сделать? ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru