SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: oskii en Miércoles 12 de Mayo de 2010, 18:49

Título: Error strcmp
Publicado por: oskii en Miércoles 12 de Mayo de 2010, 18:49
Hola!, de antemano dar las gracias por el hecho de mirar las dudas. Yo estoy haciendo un pequeño codigo en ensamblador donde desde c le paso una cadena y un vector de cadenas. Mi funcion en ensamblador busca la cadena dentro del vector y devuelve la posicion (indice) del vector donde se encuentra. Recojo los 2 parametros, realizo un bucle donde almaceno el valor en cada momento del vector y con (strcmp) lo comparo con la cadena. Si el resultado es 0 (son iguales) salto a "escero" y devuelvo la posicion.  El problema lo tengo en el strcmp que da error y llevo ya tiempo loco buscando la razón. Graciass!!!

-----------------------------------------------------------------------------------------------------------------------
global buscaretiqueta

SECTION .data ;datos inicializados
SECTION .bss ;datos sin inicializar
SECTION .text ;codigo ensamblador
extern strcmp
   buscaretiqueta:
            push esp ;puntero pila (coge parametros externos NO TOCAR)
            push ebp
            mov ebp, esp  ;puntero baso pila (con el que me muevo en ella)
            push esi
            push edi
            push ebx                      
            mov ebx, [ebp + 8]  ;en ebx esta la etiqueta
            mov esi, [ebp + 12] ;en esi esta el vestor de etiquetas
            xor edi, edi ;pongo a 0 el contador
            push ecx
            mov ecx, ebx ;meto la etiqueta (porque despues volvere a usar ebx)
                                                       
            bucle:
                 push edx   ;para usar strcmp, los registros tienen que estar en la pila                
                 mov edx, [esi + edi * 8] ;metes en registro edx el valor del vector etiquetas de la posicion cx                                
                 call strcmp   ;llama a strcmp con los 2 ultimos registros en pila (ecx, edx)                      
                 pop edx
                 cmp eax, 0
                 je escero
                   add edi, 1
                   jmp bucle
          escero:
                 mov eax, edi
                 pop ecx
                             
            pop ebx
            pop edi
            pop esi
            pop ebp
            pop esp
ret
-------------------------------------------------------------------------------------