Página 1 de 1

Paso de parámetros en aplib.h

Publicado: Dom, 10 Nov 2013, 22:26
por antoniovillena
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.

Re: Paso de parámetros en aplib.h

Publicado: Lun, 11 Nov 2013, 07:40
por na_th_an
¿Qué clase de magia es esta? :D