Ensamblador - Eliminar un carácter de una cadena

 
Vista:

Eliminar un carácter de una cadena

Publicado por marcos (1 intervención) el 02/11/2019 20:29:02
Buenos dias, ando empezando con este lenguaje y quisiera saber de un ejercicio que no me esta saliendo
si por ejemplo tengo la el texto "hola"
y tengo el caracter "o"
quisiera que el programa me elimine ese caracter de la cadena y me debuelva "hla"
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 7
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Eliminar un carácter de una cadena

Publicado por Daniel (4 intervenciones) el 07/04/2020 19:51:44
Tal vez no sea la forma más óptima pero funciona. Deberás usar tus propias librerías para imprimir la cadena
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
segment .data
    cadena db    "Hola", 0
    longitud_cadena db 4
    tamanio_elemento db 1
    caracter db  "o"
segment .bss
    nueva_cadena resb 5;nueva cadena con un tamaño máximo (en caso que no haya caracteres por eliminar) +1 para el caracter de fin de linea
segment .text
        global  _asm_main
_asm_main:
        enter   0,0
        pusha
 
        ;imprimimos la cadena original
        mov     eax, cadena
        call    print_string
 
        ;establecemos en cero los registros ya que trabajaremos con bl y al
        mov     eax,0h;almacenará cada caracter
        mov     ebx,0h;contador de indice de la nueva cadena(se incrementará)
        mov     ecx,0h;contador de indice de la cadena original(se decrementará)
        mov     edx,0h;contador de indice de la cadena original(se incrementará)
 
 
        mov     cl, byte[longitud_cadena];contador
 
bucle:
        mov     dl, byte[longitud_cadena];contador
        sub     dl,cl
        mov     al, byte[cadena+edx]
        cmp     al, byte[caracter]
        jz      fin_copiar_caracter;si el caracter es igual al buscado no copia el caracter en la nueva cadena
        mov     byte[nueva_cadena+ebx],al
        inc     ebx
fin_copiar_caracter:
 
        loop    bucle
 
        mov     byte[nueva_cadena+ebx],0h;caracter de fin de cadena
 
        ;imprime la nueva cadena
        mov     eax, nueva_cadena
        call    print_string
 
        popa
        mov     eax, 0
        leave
        ret
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar