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 temapuede ver mi tutorial de [C/C++ + NASM] Paso de funciónes y stack frames - http://indetectables.net/viewtopic.php?f=101&t=49072