Vistas de página en total

martes, 28 de mayo de 2013

POTENCIA

  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.


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.