Codigo Multiplicacion y Potencia
Codigo Multiplicacion y Potencia
Codigo Multiplicacion y Potencia
;Fecha: 117/07/2021
;sucesivas
include 'emu8086.inc'
.data
; base db 0
; exponente db 0
; en la función PRINT_NUM_UNS
.code ; programa
Inicio:
xor ax, ax ; Es donde se guardan los valores de los operandos ingresados por el teclado
xor bx , bx ; y los grupos de caracteres para mostrar en pantalla (cada mesj1, msj2 etc)
xor cx , cx
mov var1,0
mov var2,0
mov ah, 09h ;se despliegan usando la funcion 9 (el cual es el valor cargado en AH de la interrupcion 21h
lea dx, msj1 ;el mensaje1 'Ingrese el primer numero' envia los caracteres uno por uno a la pantalla
mov ah, 01h ;se carga en AH el valor 1 (numero de la funcion )de la interrupcion 21h del mi que obtiene.
int 21h
sub al , 30h
mov var1 , al
lea dx, msj2 ;'Ingrese el segundo numero' escribiendo todos los caracteres hasta que encuentre '$'
int 21h
mov ah , 01h ;en esta parte obtiene de nuevo el numero de 1 digito con la funcion 1 de interrupcion21h
sub al , 30h
cmp var2,0 ;en este punto ya tenemos los dos numeros y vamos a operar
jz sr
Multi:
Loop Multi
Sr:
lea dx , msj3
int 21h
mov ax, bx
call PRINT_NUM
int 21h
xor ax, ax
xor bx,bx
xor cx,cx
cmp var2,0
jz sh
Pot:
mul var1
loop Pot
sh:
call PRINT_NUM
jmp inicio
PUSH DX
PUSH AX
CMP AX, 0
JNZ not_zero
PUTC '0'
JMP printed
Not_zero:
CMP AX, 0
JNS positive
NEG AX
PUTC '-'
Positive:
CALL PRINT_NUM_UNS
Printed:
POP AX
POP DX
RET
PRINT_NUM ENDP
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX, 1
; AX = 0?
CMP AX, 0
JZ print_zero ; si AX vale
Begin_print:
CMP BX , 0
JZ end_print
CMP CX , 0
JE calc
CMP AX, BX
JB skip
Calc:
MOV DX, 0
DIV BX
; AH = 0 siempre porque
PUTC AL
MOV AX, DX
Skip:
;1000 a 100 a 10
PUSH AX
MOV DX, 0
MOV AX, BX
DIV diez
MOV BX, AX
POP AX
JMP begin_print
Print_zero:
end_print:
POP DX
POP CX
POP BX
POP AX
RET
PRINT_NUM_UNS ENDP
End