Programa en Ensamblador para Calcular z=(a+2b)^3-(a*b) | Física Computacional

Física3,81 KB

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

Descargar

PDF Word HTML