Rutina _pot, perteneciente a la librería MATH. Esta rutina realiza la función potencia apoyándose en la función _mult que hicimos antes.
En este caso, como se ve, para realizar la multiplicación no llamamos a la macro mult, ya que las macros están hecha para ser usadas con variables, y generaría en este caso una instrucción lea extra por cada operando. por lo tanto si introducimos los parámetros en pila directamente hemos ahorrado tres instrucciones lea en este caso.
Es por eso por lo que en el caso de crear funciones en las librerías a partir de otras funciones prefiero implementar la llamada directamente sin usar las macros.
Más adelante realizaré las opciones con el coprocesador, y crearemos una cabecera para su uso.
Más adelante realizaré las opciones con el coprocesador, y crearemos una cabecera para su uso.
POT.ASM
; Copyright (C) 2013 José Ángel Moneo Fernández ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; along with this program. If not, see <http://www.gnu.org/licenses/>.
; codigo
; eleva un úmero de 16 bits a otro número dando el resultado en un número de 32 bits
;op2 puntero a varialbe de 16 bits
;op1 numero de 16 bits
;res puntero a variable de 16 bits
include main.mac
_modelo exe
_code
rutina _pot op1,op2,res
extrn _mult:near
push bx
push di
push cx
mov cx,[bp].op1
mov bx,[bp].op2
mov di,[bp].res
mov word ptr [di],1
mov word ptr [di+2],0
otro:
cmp cx,0
jz fin
push di ; llamada a la función mult, almacenando sus datos directamente en pila
push bx ; sin uso de la macro mult
push bx
call _mult
add sp,6
dec cx
jmp otro
fin:
pop cx
pop di
pop bx
pop bp
ret
_pot endp
_data
_end
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.