#include <iostream>
using namespace std;
char* chStr = "mixHello,mix worldmix!!!mix";
char* chSub = "mix";
void main(){
bool comp;
char pchRes[250];
char* chRes = pchRes;
int r=0, j;
for(int i=0; *(chStr+i)!=0; i++){
comp=true;
for(j=0; *(chSub+j)!=0; j++){
if(*(chSub+j)!=*(chStr+i+j)){
comp=false;
break;
}
}
if(comp==true) i+=j-1;
else{
*(chRes+r)=*(chStr+i);
r++;
}
}
*(chRes+r)=0;
cout << chRes;
cin.get();
}
Удаление заданной подстроки в строке
Всего-то навсего нужно перевести код с си++(который я уже написал) на ассемблер:
Код:
И вот вопрос:
- Как в регистр al записать допустим 6-й символ строки?
Начало программы по ходу должно выглядить так:
Код:
ideal
p586
model flat
extrn ExitProcess:proc
extrn MessageBoxA:proc
dataseg
chStr db "mixHello,mix worldmix!!!mix", 0
chSub db "mix", 0
chRes db 0
sTitle db "SPIOS.012",0
sText db 0
i db 0
j db 0
codeseg
p586
model flat
extrn ExitProcess:proc
extrn MessageBoxA:proc
dataseg
chStr db "mixHello,mix worldmix!!!mix", 0
chSub db "mix", 0
chRes db 0
sTitle db "SPIOS.012",0
sText db 0
i db 0
j db 0
codeseg
Код:
mov al, [chStr+6]
либо с помощью таблицы
Код:
mov ebx, offset chStr ; адрес строки
...
mov al, 6 ; 6й символ
...
xlat ; собссно ds:[ebx+al] -> AL
...
mov al, 6 ; 6й символ
...
xlat ; собссно ds:[ebx+al] -> AL
ну эт я писал.... эээ....
скажем есть
Код:
str db "Hello world",0
i dd 6
i dd 6
Как в al записать i-й символ строки?
Код:
mov ebx, offset chStr ; адрес строки
...
mov al,
xlat
...
mov al,
xlat
или я чего то не понял?
вроде получилось. вроди понял. ну тут следущая загвоздка...
Давай - 390-326-779
Код:
ideal
p586
model flat
extrn ExitProcess:proc
extrn MessageBoxA:proc
dataseg
chStr db "mixHello,mix worldmix!!!mix", 0
chSub db "mix", 0
chRes db 0
sTitle db "SPIOS.012", 0
sText db "Equal", 0
i db 0
j db 0
codeseg
main:
fori:
mov , 0
mov ebx, offset chStr
mov al,
xlat
forj:
mov ecx, offset chSub
mov ah, [j]
xlat
cmp al, 0
inc
je fori
push 0 offset sTitle offset sText 0
call MessageBoxA
fin:
call ExitProcess
end main
p586
model flat
extrn ExitProcess:proc
extrn MessageBoxA:proc
dataseg
chStr db "mixHello,mix worldmix!!!mix", 0
chSub db "mix", 0
chRes db 0
sTitle db "SPIOS.012", 0
sText db "Equal", 0
i db 0
j db 0
codeseg
main:
fori:
mov , 0
mov ebx, offset chStr
mov al,
xlat
forj:
mov ecx, offset chSub
mov ah, [j]
xlat
cmp al, 0
inc
je fori
push 0 offset sTitle offset sText 0
call MessageBoxA
fin:
call ExitProcess
end main
Код:
ideal
p586
model flat
extrn ExitProcess:proc
extrn MessageBoxA:proc
dataseg
chStr db "mixHello,mix worldmix!!!mix", 0
chSub db "mix", 0
chRes db 100 dup(0)
sTitle db "SPIOS.012", 0
i db 0
j db 0
r db 0
comp db 0
codeseg
main:
mov [r], 0
mov , 0
fori:
mov [j], 0
mov [comp],1
forj:
mov ebx, offset chStr
mov al,
xlat
add al, [j]
mov ecx, offset chSub
mov ah, [j]
xlat
cmp al, ah
jz jcmp
mov [comp],0
jmp forj_
jcmp:
inc [j]
test ah,ah
jz forj
forj_:
cmp [comp],0
jz cmpf
cmpt: mov bl,
add bl, [j]
dec bl
mov , bl
jmp cmpe
cmpf:
mov ebx, offset chStr
add ah,
xlat
mov al, ah
mov ebx, offset chRes
add ah, [r]
xlat
mov ah, al
inc [r]
cmpe:
inc
test al,al
jz fori
mov ebx, offset chRes
add ah, [r]
xlat
mov ah, 0
push 0 offset sTitle offset chRes 0
call MessageBoxA
fin:
call ExitProcess
end main
p586
model flat
extrn ExitProcess:proc
extrn MessageBoxA:proc
dataseg
chStr db "mixHello,mix worldmix!!!mix", 0
chSub db "mix", 0
chRes db 100 dup(0)
sTitle db "SPIOS.012", 0
i db 0
j db 0
r db 0
comp db 0
codeseg
main:
mov [r], 0
mov , 0
fori:
mov [j], 0
mov [comp],1
forj:
mov ebx, offset chStr
mov al,
xlat
add al, [j]
mov ecx, offset chSub
mov ah, [j]
xlat
cmp al, ah
jz jcmp
mov [comp],0
jmp forj_
jcmp:
inc [j]
test ah,ah
jz forj
forj_:
cmp [comp],0
jz cmpf
cmpt: mov bl,
add bl, [j]
dec bl
mov , bl
jmp cmpe
cmpf:
mov ebx, offset chStr
add ah,
xlat
mov al, ah
mov ebx, offset chRes
add ah, [r]
xlat
mov ah, al
inc [r]
cmpe:
inc
test al,al
jz fori
mov ebx, offset chRes
add ah, [r]
xlat
mov ah, 0
push 0 offset sTitle offset chRes 0
call MessageBoxA
fin:
call ExitProcess
end main