He mejorado un strlen que había hecho hace un buen rato, se ve extenso por los comentarios jeje:

Código: Seleccionar todo

include 'win32ax.inc'
.data
;variables
cadena          db "linkenOS",0
salida          db ?,0

.code
  inicio:
    ;Limpiamos registros
    XOR ESI,ESI
    XOR EDI,EDI
    XOR ECX,ECX
    ;Movemos la cadena a
    ;el registro ESI
    LEA ESI,[cadena]
    ;Llamamos a la funcion
    CALL strlen
    ;Mostramos con la API
    ;MessageBox de windows
    ;El resultado 'salida'
    invoke MessageBoxA,0,salida,"xD",0
    RET
 .end inicio
 ;-FUNCION STRLEN-;
 ;Coder: Linkgl
 proc strlen
   siguiente:
   ;Cortamos el primer caracter
   LODSB
   ;Comparamos si es el ultimo
   CMP AL,0
   ;Si ya no hay más saltamos a salir
   JE SALIR
   ;Incrementamos el contador
   INC ECX
   ;Entramos en bucle hasta que la
   ;comparacion retorne un flag verdadero
   JMP siguiente
   SALIR:
   ;Movemos el contador al registro AL
   ;Para trabajar con el
   MOV AL,CL
   ;Le sumamos 30(hex)
   ;para devolver valores numericos en ascii
   ADD AL,0x30
   ;Movemos el contenido de AL en la variable de salida
   MOV [salida],AL
   RET
 endp    
//mHmm..
Responder

Volver a “Otros lenguajes”