Programa en Ensamblador para Calcular z=(a+2b)^3-(a*b) | Física Computacional
Programa en Ensamblador para Calcular z = [(a+b+b)^3] - (a*b)
A continuación se presenta el código corregido de un programa en lenguaje ensamblador para el procesador 8086, que calcula la fórmula z = [(a+b+b)^3] - (a*b), muestra el resultado en pantalla y lo envía a la impresora.
Código corregido
.model small
.stack
.data
TITULO db 'Fórmula z=[(a+b+b)^3]-(a*b)$'
resultado db 'El resultado z es $'
resul db 'El resultado z es $'
a db 0
b db 0
z db 0
pd db 0
pd1 db 0
pd2 db 0
suma db 0
r db 0,0,'$'
NOMBRE DB 14,'Muñoz Ortiz Christian Alexander',14,'$'
PedirA DB 'Ingrese el valor de A: $'
PedirB DB 'Ingrese el valor de B: $'
Numero DB 01011011B
DB 01111101B
.code
Inicio del programa
INICIO:
MOV AX, @DATA
MOV DS, AX
MOV ES, AX
MOV AH, 19
LEA BP, TITULO
MOV CX, 27
MOV DH, 5
MOV DL, 20
MOV BH, 0
MOV AL, 0
MOV BL, 4FH
INT 10H
MOV AH, 19
LEA BP, NOMBRE
MOV CX, 33
MOV DH, 24
MOV DL, 14
MOV BH, 0
MOV AL, 0
MOV BL, 5FH
INT 10H
Solicitud de valores
PEDIR:
MOV AH, 19
LEA BP, PEDIRA
MOV CX, 24
MOV DH, 8
MOV DL, 20
MOV BH, 0
MOV AL, 0
MOV BL, 5FH
INT 10H
MOV AH, 19
LEA BP, PEDIRB
MOV CX, 24
MOV DH, 10
MOV DL, 20
MOV BH, 0
MOV AL, 0
MOV BL, 5FH
INT 10H
MOV AH, 2
MOV DH, 8
MOV DL, 43
MOV BH, 0
INT 10H
MOV AH, 1
INT 21H
SUB AL, 30H
MOV a, AL
MOV AH, 2
MOV DH, 10
MOV DL, 43
MOV BH, 0
INT 10H
MOV AH, 1
INT 21H
SUB AL, 30H
MOV b, AL
Cálculo de la fórmula
CALCULAR:
MOV AL, a
MOV BL, b
ADD AL, BL
ADD AL, BL
MOV pd, AL
;POTENCIACIÓN (a+b+b)^2
MOV AX, 0
MOV BL, 0
MOV AL, pd
MOV BL, pd
MUL BL ;BL * AL
MOV pd2, AL
;POTENCIACIÓN (a+b+b)^3
MOV AX, 0
MOV BL, 0
MOV AL, pd
MOV BL, pd2
MUL BL ;BL * AL
MOV z, AL
;MULTIPLICAR a*b
MOV AX, 0
MOV BL, 0
MOV AL, a ;Operando1
MOV BL, b ;Operando2
MUL BL ;BL * AL
MOV suma, AL
;RESTA
MOV AL, z
MOV BL, suma
SUB AL, BL
AAM ;DECENAS Y UNIDADES
ADD AX, 3030H ;AJUSTE
MOV r[0], AH ;DECENAS
MOV r[1], AL ;UNIDADES
Visualización en pantalla
MOV AH, 19
LEA BP, RESULTADO
MOV CX, 20 ;LONGITUD
MOV DH, 14 ;FILA
MOV DL, 22 ;COLUMNA
MOV BH, 0 ;PÁGINA
MOV AL, 0 ;MODO
MOV BL, 1FH
INT 10H
MOV AH, 2
MOV DH, 14
MOV DL, 40
MOV BH, 0
INT 10H
MOV AH, 2
MOV DL, r[0] ;DECENAS
INT 21H
;----UNIDADES
MOV AH, 2
MOV DH, 14
MOV DL, 41
MOV BH, 0
INT 10H
MOV AH, 2
MOV DL, r[1] ;UNIDADES
INT 21H
Envío a impresora
IMPRESORA:
;Acceso impresora
MOV AH, 5
MOV DL, 12 ;NUEVA HOJA
INT 21H
MOV CX, 18
MOV SI, 0
ENCABEZADO:
MOV AH, 5
MOV DL, resul[SI]
INT 21H
INC SI
LOOP ENCABEZADO
MOV CX, 2
MOV SI, 0
RESULTD:
MOV AH, 5
MOV DL, r[SI]
INT 21H
INC SI
LOOP RESULTD
MOV DX, 2040H ;PUERTO
MOV CX, 2 ;ENVIAMOS LOS CARACTERES
MOV SI, 0 ;ÍNDICE
Transmisión por puerto
CICLO:
PUSH CX
MOV AL, r[SI]
OUT DX, AL
INC SI
INC DX
POP CX
LOOP CICLO
MOV CX, 2 ;TOTAL DE NÚMEROS
MOV SI, 0 ;ÍNDICE
MOV DX, 2030H
ENVIAR_DATO:
PUSH CX
MOV AL, NUMERO[SI] ;ACCEDER A NÚMEROS
OUT DX, AL
INC DX ;INCREMENTAR AL SIGUIENTE PUERTO
INC SI ;INCREMENTAR ÍNDICE
POP CX