Código:
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
.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