Paso de parámetros en aplib.h

Chit chat general. Habla con los MojonTwins y con los amigos de los MojonTwins. Reza a Vah-ka. Delinque. Aviso: está PROHIBIDO tirarse peos fuerte. Si les cortas el pescuezo, vale.

Moderador: na_th_an

antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Paso de parámetros en aplib.h

Mensajepor antoniovillena » Dom, 10 Nov 2013, 22:26

Pues eso, que he visto una cosa rara y me he puesto a investigar. La forma más eficiente (sin contar con __FASTCALL__) de pasar parámetros a funciones en ensamblador es por la pila. Así es como está ahora:

$this->bbcode_second_pass_code('', '
extern unsigned int ram_address [];
extern unsigned int ram_destination [];

#asm
._ram_address
defw 0
._ram_destination
defw 0
#endasm

void unpack (unsigned int address, unsigned int destination) {
if (address != 0) {
ram_address [0] = address;
ram_destination [0] = destination;

#asm
ld hl, (_ram_address)
ld de, (_ram_destination)
...
#endasm
}
}
')

Lo he cambiado por esto:
$this->bbcode_second_pass_code('', '
void unpack (unsigned int address, unsigned int destination) {
#asm
ld hl,2
add hl,sp
ld e, (hl)
inc hl
ld d, (hl)
inc hl
ld a, (hl)
inc hl
ld h, (hl)
ld l, a
...
#endasm
}
')

Y he comparado el tamaño del TAP en los dos casos, en el primero me da 37620 bytes y en el segundo 37583, una diferencia de 37 bytes.
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Paso de parámetros en aplib.h

Mensajepor na_th_an » Lun, 11 Nov 2013, 07:40

¿Qué clase de magia es esta? :D
Como diría Rorshach: "Urm..."

Volver a “General”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 20 invitados