Ésta función copia una palabra desde una longitud dada hasta otra.
Si se acorta la longitud inicial la última se hara proporcional al valor actual.
; ---------------------------------------------------------
; Author : NvK
; Función : acopy
; Descripción : copia una cadena de texto de una longitud a otra
; Fecha: 08-02-2014
; ---------------------------------------------------------
[bits 32]
global _acopy

section .bss
	astring: resb 12 ; reservar 12 bytes
	
section .text
	_acopy:
		push ebp
		mov ebp, esp
		mov ecx, [ebp+8]
		mov eax, [ebp+12]
		mov ebx, [ebp+16]
		
		add ecx, eax
		mov dword edx, ecx
		xor ecx, ecx
		xor eax, eax
		.find:
			movzx ecx, byte[edx]
			mov [astring+eax], ecx ; guarda en la matriz celda por celda
			inc edx
			inc eax ; desplaza el puntero para la matriz
			
			cmp ebx, eax
			jnz .find
		lea eax, [astring]
		
		pop ebp
	ret
Exportación en C/C++ y código.
#include <stdio.h>
extern acopy(char *cpy, int *, int *);

int main()
{
    // copia de 1 hasta 4
    printf("1º CASO: %s\n", acopy("PALABRA", 1, 4));
    // copia de 2 hasta 4
    printf("2º CASO: %s\n", acopy("PALABRA", 2, 4));

    return 0;
}
1º caso devuelve:
"ALAB"
2º caso devuelve:
"LABR"
NOTA: Si no entendiste como hice lo de las exportaciónes de nasm a C/C++ o te interesa más del tema
puede ver mi tutorial de [C/C++ + NASM] Paso de funciónes y stack frames - http://indetectables.net/viewtopic.php?f=101&t=49072

flipo con tu talento, recuerdo que hice algo a si en c basicamente hacia lo mismo usando un puntero al que se le asignaba memoria dinamica a igual cantidad que la cantidad de chars a extraer (indicados en el segundo parametro) se le copiaban los chars dados desde la cadena pasada como primer parametro empezando por el caracter que corresponda al segundo parametro y despues con un while extraia tal cantidad de caracteres indicados en el tercer parametro para asignarlos a las direcciones del puntero, lo que viene a ser un mid en visualbasic y un slice en ruby etc etc, un saludo grande maquina
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
El talento no existe, nunca existio y jamas va a existir, es otra de las tantas ilusiones de éste mundo.
Solo la incansable dedicatoria al estudio y la perseverancia.
Gracias por comentar amigo
Responder

Volver a “Fuentes”