01.05.2013 Views

Estructura de computadores

Estructura de computadores

Estructura de computadores

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CC-BY-SA • PID_00178132 75 Programación en ensamblador (x86-64)<br />

Supongamos que en el ejemplo <strong>de</strong>l factorial queremos pasar como parámetro<br />

el número cuyo factorial queremos calcular y <strong>de</strong>volver como resultado el fac-<br />

torial <strong>de</strong>l número pasado como parámetro, implementando el paso <strong>de</strong> pará-<br />

metros y el retorno <strong>de</strong> resultados por medio <strong>de</strong> la pila.<br />

La llamada <strong>de</strong> la subrutina:<br />

sub rsp,8 ;Reservamos 8 bytes para el resultado que <strong>de</strong>volvemos<br />

mov rbx, 5<br />

push rbx ;Introducimos el parámetro <strong>de</strong> entrada en la pila<br />

call factorial<br />

add rsp,8 ;Liberamos el espacio utilizado por el parámetro <strong>de</strong> entrada<br />

pop rax ;Recuperamos el resultado <strong>de</strong>vuelto sobre el registro rax<br />

Subrutina:<br />

Cabe recordar que la memoria se direcciona byte a byte; cada dirección co-<br />

rrespon<strong>de</strong> a una posición <strong>de</strong> memoria <strong>de</strong> un byte. En este ejemplo, ya que los<br />

elementos que ponemos en la pila son <strong>de</strong> 8 bytes (64 bits), para pasar <strong>de</strong> un<br />

dato al siguiente, tendremos que hacer incrementos <strong>de</strong> 8 bytes.<br />

Evolución <strong>de</strong> la pila al ejecutar este código. La tabla muestra el estado <strong>de</strong> la pila<br />

<strong>de</strong>spués <strong>de</strong> ejecutar cada instrucción o conjunto <strong>de</strong> instrucciones. La dirección<br />

inicial <strong>de</strong> la pila es @.<br />

Dirección<br />

@ - 48<br />

@ - 40<br />

Estado inicial sub rsp,8 push rbx call factorial<br />

apuntadores pila apuntadores pila apuntadores<br />

pila apuntadores<br />

pila

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!