Busca la funcion que necesitas!

martes, 11 de enero de 2011

FASM - Contar una cadena (strlen)

El día de hoy les traigo un ejemplo de como hacer un strlen de una cadena en ensamblador desde FASM codeada por su servidor linkgl.

include 'win32ax.inc'
;*************************
;Longitud de una cadena  *
;Coder: Linkgl           *
;Lenguaje ASM(FASM)      *
;Fecha 28/11/10          *
;Indetectables.net       *
;Corp-51.net             *
;*************************
.data
  cadena db 'linkgl',0 ;Cadena a contar
  titulo db 'La longitud de la cadena es de:',0  ;Esto no es importante
  resultado db ?,0  ;aca almacenamos el contador

.code
  inicio:
    XOR ESI,ESI   ;Seteamos los registros SI EAX Y ECX A 0
    XOR ECX,ECX
    XOR EAX,EAX
    LEA ESI,[cadena] ;Movemos la palabra a esi
    bucle:
    LODSB ;Extraemos el ultimo caracter en AL
    CMP AL,0 ;SI ES IGUAL A 0 SE ACABO LA PALABRA
    JE salir
    INC ECX    ;INCREMENTAMOS EL CONTADOR
    JMP bucle  ;volvemos al bucle

    salir:
    MOV AL,CL ;movemos el contador a AL
    ADD AL,0x30 ;Le sumamos 0x30 para que nos de el valor en ascii
    MOV [resultado],AL ;lo copiamos a resultado
    invoke MessageBoxA,0,resultado,titulo,MB_OK ;mostramos
    invoke ExitProcess,0 ;nos vamos!
  .end inicio

Nota importante:
Cuenta palabras hasta de 9 caracteres si sobrepasan los caracteres también las cuenta pero las cuenta en hexadecimal, no es dificil arreglar eso solo es ir sumando valores en hex para convertirlos a ascii. 

1 comentario:

  1. me podrias ayudar con un programa en ensamblador que cuente cuantos numeros hay en una cadena?gracias.

    ResponderEliminar