SlideShare una empresa de Scribd logo
1 de 18
nombre " Calculadora"
; símbolodel sistemabasadosimple calculadora( +, - , *, /) para 8086 .
; ejemplode cálculo:
; entrada1 < - Número:10
; entrada2 <- operador: -
; entrada3 < - Número:5
; -------------------
; 10-5 = 5
; de salida- > Número:5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; este maro se copiade emu8086.inc;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; esta macro imprime uncharen AL y losavances
; la posiciónactual del cursor:
Putc carbón MACRO
AX EMPUJE
MOV AL , char
MOV AH , 0Eh
INT10h
AXPOP
ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 100h
iniciojmp
; definirlasvariables:
db msg0 "*** por RealizadoProgramaAngélicaGarcía y SebastiánGonzález ***",0Dh, 0Ah
db"*** Esta calculadoraFuncionaExclusivamente connúmerosEnteros***",0Dh, 0Ah, '$'
msg1 db 0Dh, 0Ah, 0Dh, 0Ah,'Digite El Primernúmero:$'
db msg2 "Digite laoperaciónlógicaDESEA Que Realizar:+ - * /: $"
msg3 db "SegundonumeroDigite el:$"
msg4 0DH db,0AH, 'El resutadoAproximadoDe Suoperaciónes:$'
msg5 db 0DH, 0AH, 'Gracias por USAR Nuestracalculadora!Digite cualquierTeclapárrafosalir...',
0Dh, 0Ah,' $ '
ERR1 db "Operaciónnoadmitida",0Dh,0Ah,'$'
smthdb "y algo....$"
; operadorpuede ser:'+', '-', '*', '/' o 'q' para salirenel medio.
db opr '?'
; primery segundonúmero:
dw num1?
dw num2?
Empezar:
dx mov,msg0 desplazamiento
movah, 9
int21h
leadx,msg1
movah, 09h; cadenade salidaends:dx
int21h
; obtenerel númerode variosdígitosfirmado
; desde el teclado,ylatienda
; el resultadoenel registrocx:
scan_numllamada
; almacenarprimernúmero:
num1 mov,cx
; nuevalínea:
putc 0Dh
putc 0Ah
leadx,msg2
movah, 09h; cadenade salidaends:dx
int21h
; obteneroperador:
movah, 1; solaentradachar a AL.
int21h
opr mov,al
; nuevalínea:
putc 0Dh
putc 0Ah
cmp opr,'q'; q - salidaenel medio.
salidaje
cmp opr,'*'
jb wrong_opr
cmp opr,'/'
ja wrong_opr
; salidade una cadenaen ds:dx
leadx,msg3
movah, 09h
int21h
; obtenerel númerode variosdígitosfirmado
; desde el teclado,ylatienda
; el resultadoenel registrocx:
scan_numllamada
; almacenarsegundonúmero:
num2 mov,cx
leadx,msg4
movah, 09h; cadenade salidaends:dx
int21h
; calcular:
cmp opr,'+'
je do_plus
opr cmp,'-'
je do_minus
cmp opr,'*'
je do_mult
cmp opr,'/'
je do_div
; Ningunade lasanteriores....
wrong_opr:
leadx,ERR1
movah, 09h; cadenade salidaends:dx
int21h
Salida:
; salidade una cadenaen ds:dx
leadx,msg5
movah, 09h
int21h
; esperara que cualquiertecla...
movah, 0
int16h
retirado ; volvera os.
o_plus:
movax , num1
añadirax, num2
llamanprint_num;valor ax de impresión.
salidajmp
do_minus:
movax , num1
subhacha, num2
llamanprint_num;valor ax de impresión.
salidajmp
do_mult:
movax , num1
num2 IMUL ; (ax dx ) = ax * num2.
llamanprint_num;valor ax de impresión.
; dx se ignora(CALCfuncionaconsólonúmerospequeños) .
salidajmp
do_div:
; dx se ignora(CALCfuncionaconsólonúmerosenterospequeños) .
dx mov,0
movax , num1
idivnum2; ax = (ax dx ) / num2 .
cmp dx , 0
jnzaprox
llamanprint_num;valor ax de impresión.
salidajmp
aprox :
llamanprint_num;valor ax de impresión.
leadx , smth
movah, 09h ; cadena de salidaends : dx
int21h
salidajmp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; estasfuncionesse copiande emu8086.inc;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; obtiene el númerode variosdígitosFIRMADOdesde el teclado,
; y almacenael resultadoenel registroCX:
SCAN_NUMPROCCERCA
EMPUJE DX
AXEMPUJE
EMPUJE SI
MOV CX, 0
; restablecerlabandera:
MOV CS: make_minus,0
next_digit:
; obtenercarbóndesde el teclado
; enAL:
MOV AH, 00h
INT16h
; e imprimirlo:
MOV AH, 0Eh
INT10h
; comprobarMENOS:
CMP AL,'-'
JE set_minus
; comprobarteclaENTER:
CMP AL,0Dh; retornode carro?
JNEnot_cr
JMP stop_input
not_cr:
CMP AL,8; 'RETROCESO' presionado?
JNEbackspace_checked
MOV DX, 0; eliminarel últimodígitopor
MOV AX, CX;división:
DIV CS: diez;AX= DX: AX/ 10 (DX-rem).
MOV CX, AX
Putc''; posiciónclara.
Putc8; retrocesode nuevo.
JMP next_digit
backspace_checked:
; permitirque sólolosdígitos:
CMP AL,'0'
JAEok_AE_0
JMP remove_not_digit
ok_AE_0:
CMP AL,'9'
JBE ok_digit
remove_not_digit:
Putc8; retroceso.
Putc''; clara pasada noentrarondígitos.
Putc8; retrocesode nuevo.
Next_digitJMP;esperarparala próximaentrada.
ok_digit:
; CX se multiplicanpor10 (primeravezel resultadoescero)
AXEMPUJE
MOV AX, CX
MUL CS: diez;DX:AX = AX * 10
MOV CX, AX
AXPOP
; comprobarsi el númeroesdemasiadogrande
; (resultadodebe serde 16 bits)
CMP DX,0
JNEtoo_big
; convertirde códigoASCII:
SUB AL, 30h
; añadirAL a CX:
MOV AH, 0
MOV DX, CX; copiade seguridad,encasode que el resultadoserádemasiadogrande.
AÑADIRCX,AX
Too_big2JC; saltarsi el númeroesdemasiadogrande.
JMP next_digit
set_minus:
MOV CS: make_minus,1
JMP next_digit
too_big2:
MOV CX , DX; restaurarel valor backupedantesde añadir.
MOV DX, 0 ; DX era ceroantesde copiade seguridad!
demasiadogrande:
MOV AX , CX
DIV CS: diez;revertirúltimaDX: AX= AX* 10 , que AX = DX : AX/ 10
MOV CX , AX
Putc8 ; retroceso.
Putc' ' ; claroentraronúltimodígito.
Putc8 ; retrocesode nuevo.
Next_digitJMP; esperara Enter/ Retroceso.
stop_input:
; comprobarla bandera:
CMP CS: make_minus,0
JE not_minus
NEG CX
not_minus:
POPSI
AXPOP
POPDX
RETIRADO
make_minusDB? ; utilizadocomounabandera.
SCAN_NUMENDP
; este procedimientoimprime númeroenAX,
; se utilizaconPRINT_NUM_UNSpara imprimirnúmerosconsigno:
PRINT_NUMPROCCERCA
EMPUJE DX
AXEMPUJE
CMP AX, 0
JNZnot_zero
Putc' 0 '
JMP impresa
not_zero:
; el signode verificaciónde AX,
; hacerabsolutasi es negativo:
CMP AX, 0
JNSpositivo
NEG AX
Putc'- '
positivo:
LLAME PRINT_NUM_UNS
impreso:
AXPOP
POPDX
RETIRADO
PRINT_NUMENDP
; este procedimientoimprime unsinfirmar
; númeroenAX (nosólounsolodígito)
; valorespermitidosvande 0 a 65535 (FFFF)
PRINT_NUM_UNS PROCCERCA
AXEMPUJE
PUSH BX
EMPUJE CX
EMPUJE DX
; banderapara evitarlaimpresiónde cerosantesdel número:
MOV CX, 1
; (resultadode "/10000" essiempre menoroigual a 9).
MOV BX, 10.000; 2710h - divisor.
; AXes cero?
CMP AX,0
JZprint_zero
begin_print:
; comprobardivisor(si ceroir a END_PRINT):
CMP BX,0
JZEND_PRINT
; evitarlaimpresiónde cerosantesdel número:
CMP CX,0
JE calc
; si AX <BX continuación,resultadode DIV serácero:
CMP AX,BX
JB salto
Calc:
MOV CX, 0; banderaconjunto.
MOV DX, 0
DIV BX; AX= DX: AX/ BX (DX= resto).
; imprimirúltimodígito
; AH essiempre cero,porloque se ignora
AÑADIRAL,30h; convertirencódigoASCII.
PutcAL
MOV AX, DX;conseguirrestode últimadiv.
omitir:
; calcularBX = BX / 10
AXEMPUJE
MOV DX , 0
MOV AX , BX
DIV CS: diez;AX= DX : AX / 10 ( DX = resto) .
MOV BX , AX
AXPOP
JMP begin_print
print_zero:
Putc' 0 '
END_PRINT:
POPDX
POPCX
POPBX
AXPOP
RETIRADO
PRINT_NUM_UNS ENDP
de diezDW 10 ; utilizadocomomultiplicador/divisorporSCAN_NUMy PRINT_NUM_UNS .
Get_stringPROCCERCA
AXEMPUJE
EMPUJE CX
DI EMPUJE
EMPUJE DX
MOV CX,0; contadorde carbón.
CMP DX, 1; búferdemasiadopequeño?
Empty_bufferJBE;
DX diciembre;espaciode reservaparael últimocero.
; ============================
; Bucle eternollegar
; y procesalas pulsacionesde teclas:
wait_for_key:
MOV AH, 0; obtenerteclapulsada.
INT 16h
CMP AL, 0Dh; 'RETURN' presionado?
JZ exit_GET_STRING
CMP AL, 8; 'RETROCESO' presionado?
JNE add_to_buffer
Wait_for_keyJCXZ;nadapara eliminar!
Diciembre CX
Diciembre DI
Putc 8; retroceso.
Putc ''; posiciónclara.
Putc 8; retrocesode nuevo.
JMP wait_for_key
add_to_buffer:
CMP CX,DX; bufferestálleno?
Wait_for_keyJAE;de serasí esperara que 'RETROCESO' o 'RETURN' ...
MOV [DI],AL
INCDI
INCCX
; imprimirlaclave:
MOV AH, 0Eh
INT10h
JMP wait_for_key
; ============================
exit_GET_STRING:
; terminarápor nula:
MOV [DI],0
empty_buffer:
POPDX
POPDI
POPCX
AXPOP
RETIRADO
Get_stringENDP
POPDX
POPDI
POPCX
AXPOP
RETIRADO
Get_stringENDPCodigodel programa.
Pruebacon lasuma con flags.
Este es el cambio pasoa pasode lasbanderas,podemosobservarcuandose iniciael programaya
medidaque introducimoslosdígitosvanvariandolasbanderas.
Este procesoocurre de la mismamanery variasegúnel tipode operaciónque se este realizando,
siempre cambiarade 1 a 0 ya que es unsistemabinario,al igual que losejerciciosque
desarrollamosenel emuladorde circuitos,siempre el lenguaje de lasmaquinasesenbinario.
Tambienpodemosobservarque entodasexiste uncambioporpequeñoque seayde la misma
formafuncionacon laresta,multiplicaciónydivisión.

Más contenido relacionado

La actualidad más candente

Programacion Avanzada JavaScript
Programacion Avanzada JavaScriptProgramacion Avanzada JavaScript
Programacion Avanzada JavaScripttovi27
 
Quasi - Lenguaje C Mostrando Datos
Quasi - Lenguaje C Mostrando DatosQuasi - Lenguaje C Mostrando Datos
Quasi - Lenguaje C Mostrando Datosdegarden
 
ESTRUCTURAS DE CONTROL: BUCLES EN C++
ESTRUCTURAS DE CONTROL: BUCLES EN C++ESTRUCTURAS DE CONTROL: BUCLES EN C++
ESTRUCTURAS DE CONTROL: BUCLES EN C++die_dex
 
Scjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow ControlScjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow ControlJose Selman
 
Instrucciones de control repetitivas
Instrucciones de control repetitivasInstrucciones de control repetitivas
Instrucciones de control repetitivasAbrirllave
 
Estructuras de control C++
Estructuras de control C++Estructuras de control C++
Estructuras de control C++LOANNELMARIN
 
Chuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesChuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesAbrirllave
 
Soluciones examen y ejercicios 1.0 numerico jose rivera
Soluciones examen y ejercicios 1.0   numerico jose riveraSoluciones examen y ejercicios 1.0   numerico jose rivera
Soluciones examen y ejercicios 1.0 numerico jose riveraJ R7
 
5.5 instruccion for
5.5 instruccion for5.5 instruccion for
5.5 instruccion forSNPP
 
Ejemplo C++
Ejemplo C++Ejemplo C++
Ejemplo C++David
 

La actualidad más candente (19)

Programacion Avanzada JavaScript
Programacion Avanzada JavaScriptProgramacion Avanzada JavaScript
Programacion Avanzada JavaScript
 
Funciones de programacion
Funciones de programacionFunciones de programacion
Funciones de programacion
 
Quasi - Lenguaje C Mostrando Datos
Quasi - Lenguaje C Mostrando DatosQuasi - Lenguaje C Mostrando Datos
Quasi - Lenguaje C Mostrando Datos
 
Strcat
StrcatStrcat
Strcat
 
ESTRUCTURAS DE CONTROL: BUCLES EN C++
ESTRUCTURAS DE CONTROL: BUCLES EN C++ESTRUCTURAS DE CONTROL: BUCLES EN C++
ESTRUCTURAS DE CONTROL: BUCLES EN C++
 
Funciones en programación
Funciones en programaciónFunciones en programación
Funciones en programación
 
manual-batch-desde-0
manual-batch-desde-0manual-batch-desde-0
manual-batch-desde-0
 
Scjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow ControlScjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow Control
 
Instrucciones de control repetitivas
Instrucciones de control repetitivasInstrucciones de control repetitivas
Instrucciones de control repetitivas
 
Estructuras de control C++
Estructuras de control C++Estructuras de control C++
Estructuras de control C++
 
Aprende a usar GDB, el depurador de C
Aprende a usar GDB, el depurador de CAprende a usar GDB, el depurador de C
Aprende a usar GDB, el depurador de C
 
Chuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesChuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantes
 
Manual
ManualManual
Manual
 
CICLO FOR
CICLO FORCICLO FOR
CICLO FOR
 
Soluciones examen y ejercicios 1.0 numerico jose rivera
Soluciones examen y ejercicios 1.0   numerico jose riveraSoluciones examen y ejercicios 1.0   numerico jose rivera
Soluciones examen y ejercicios 1.0 numerico jose rivera
 
Clase 6
Clase 6Clase 6
Clase 6
 
5.5 instruccion for
5.5 instruccion for5.5 instruccion for
5.5 instruccion for
 
Ejemplo C++
Ejemplo C++Ejemplo C++
Ejemplo C++
 
41 Php. Bucles For
41 Php. Bucles For41 Php. Bucles For
41 Php. Bucles For
 

Similar a Calculadora 8086

Codigos rapidos 3.0 inf-153- jose rivera
Codigos rapidos   3.0  inf-153- jose riveraCodigos rapidos   3.0  inf-153- jose rivera
Codigos rapidos 3.0 inf-153- jose riveraJ R7
 
Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...
Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...
Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...SANTIAGO PABLO ALBERTO
 
Algoritmos 50 ejemplos
Algoritmos 50 ejemplosAlgoritmos 50 ejemplos
Algoritmos 50 ejemplosenyol
 
Algoritmos 50 ejemplos (1)
Algoritmos 50 ejemplos (1)Algoritmos 50 ejemplos (1)
Algoritmos 50 ejemplos (1)Andres Rivero
 
Comandos de Raptor,C# y Java
Comandos de Raptor,C# y JavaComandos de Raptor,C# y Java
Comandos de Raptor,C# y JavaAna Ruth G H
 
Micc mej feb18_2010
Micc mej feb18_2010Micc mej feb18_2010
Micc mej feb18_2010Jair BG
 
Controlando el tiempo
Controlando el tiempoControlando el tiempo
Controlando el tiempoguest02693a
 
Leccion3 y4 agosto25_2011solucion
Leccion3 y4 agosto25_2011solucionLeccion3 y4 agosto25_2011solucion
Leccion3 y4 agosto25_2011solucionJair BG
 
Presentación programacion
Presentación programacionPresentación programacion
Presentación programacionMiguel Cajiga
 
Base datos mysql y visual basic
Base datos mysql y visual basicBase datos mysql y visual basic
Base datos mysql y visual basicRafael Tobar Jame
 
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Agile Spain
 

Similar a Calculadora 8086 (20)

Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 
Algoritmos 50 ejemplos
Algoritmos 50 ejemplosAlgoritmos 50 ejemplos
Algoritmos 50 ejemplos
 
Codigos rapidos 3.0 inf-153- jose rivera
Codigos rapidos   3.0  inf-153- jose riveraCodigos rapidos   3.0  inf-153- jose rivera
Codigos rapidos 3.0 inf-153- jose rivera
 
Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...
Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...
Microcontroladores AVR y Arduino: Programación del microatmega328p en ensambl...
 
Tabla de instrucciones asembler
Tabla de instrucciones asemblerTabla de instrucciones asembler
Tabla de instrucciones asembler
 
Algoritmos 50 ejemplos
Algoritmos 50 ejemplosAlgoritmos 50 ejemplos
Algoritmos 50 ejemplos
 
Algoritmos 50 ejemplos (1)
Algoritmos 50 ejemplos (1)Algoritmos 50 ejemplos (1)
Algoritmos 50 ejemplos (1)
 
Algoritmos 50 ejemplos
Algoritmos 50 ejemplosAlgoritmos 50 ejemplos
Algoritmos 50 ejemplos
 
Algoritmos 50 ejemplos
Algoritmos 50 ejemplosAlgoritmos 50 ejemplos
Algoritmos 50 ejemplos
 
Emu 8086
Emu 8086Emu 8086
Emu 8086
 
Matrices
MatricesMatrices
Matrices
 
Ejercicios resueltos de_pl-sql
Ejercicios resueltos de_pl-sqlEjercicios resueltos de_pl-sql
Ejercicios resueltos de_pl-sql
 
Comandos de Raptor,C# y Java
Comandos de Raptor,C# y JavaComandos de Raptor,C# y Java
Comandos de Raptor,C# y Java
 
Micc mej feb18_2010
Micc mej feb18_2010Micc mej feb18_2010
Micc mej feb18_2010
 
Controlando el tiempo
Controlando el tiempoControlando el tiempo
Controlando el tiempo
 
Leccion3 y4 agosto25_2011solucion
Leccion3 y4 agosto25_2011solucionLeccion3 y4 agosto25_2011solucion
Leccion3 y4 agosto25_2011solucion
 
Presentación programacion
Presentación programacionPresentación programacion
Presentación programacion
 
Base datos mysql y visual basic
Base datos mysql y visual basicBase datos mysql y visual basic
Base datos mysql y visual basic
 
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
 
Assembler 1er laboratorio
Assembler 1er laboratorioAssembler 1er laboratorio
Assembler 1er laboratorio
 

Más de Sebastian Gonzalez

Tercer blog arquitectura de hardware tercer corte
Tercer blog arquitectura de hardware tercer corteTercer blog arquitectura de hardware tercer corte
Tercer blog arquitectura de hardware tercer corteSebastian Gonzalez
 
Segundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corteSegundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corteSebastian Gonzalez
 
Cuarto blog de arquitectura de hardware tercer corte
Cuarto blog de arquitectura de hardware tercer corteCuarto blog de arquitectura de hardware tercer corte
Cuarto blog de arquitectura de hardware tercer corteSebastian Gonzalez
 
Primer blog arquitectura de hardware 3 corte
Primer blog arquitectura de hardware 3 cortePrimer blog arquitectura de hardware 3 corte
Primer blog arquitectura de hardware 3 corteSebastian Gonzalez
 
2.segundo taller/segundo corte
2.segundo taller/segundo corte2.segundo taller/segundo corte
2.segundo taller/segundo corteSebastian Gonzalez
 
7.septimo taller/segundo corte
7.septimo taller/segundo corte7.septimo taller/segundo corte
7.septimo taller/segundo corteSebastian Gonzalez
 
Cuarto taller de arquitectura de hardware
Cuarto taller de arquitectura de hardwareCuarto taller de arquitectura de hardware
Cuarto taller de arquitectura de hardwareSebastian Gonzalez
 
Quinto taller arquitectura de hardware
Quinto taller arquitectura de hardwareQuinto taller arquitectura de hardware
Quinto taller arquitectura de hardwareSebastian Gonzalez
 
Sexto taller arquitectura de hardware
Sexto taller arquitectura de hardwareSexto taller arquitectura de hardware
Sexto taller arquitectura de hardwareSebastian Gonzalez
 

Más de Sebastian Gonzalez (20)

1.primer ejercicio emu8086
1.primer ejercicio emu80861.primer ejercicio emu8086
1.primer ejercicio emu8086
 
2.segundo ejercicio
2.segundo ejercicio2.segundo ejercicio
2.segundo ejercicio
 
4.cuarto ejercicio
4.cuarto ejercicio4.cuarto ejercicio
4.cuarto ejercicio
 
Tercer blog arquitectura de hardware tercer corte
Tercer blog arquitectura de hardware tercer corteTercer blog arquitectura de hardware tercer corte
Tercer blog arquitectura de hardware tercer corte
 
Segundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corteSegundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corte
 
Cuarto blog de arquitectura de hardware tercer corte
Cuarto blog de arquitectura de hardware tercer corteCuarto blog de arquitectura de hardware tercer corte
Cuarto blog de arquitectura de hardware tercer corte
 
Primer blog arquitectura de hardware 3 corte
Primer blog arquitectura de hardware 3 cortePrimer blog arquitectura de hardware 3 corte
Primer blog arquitectura de hardware 3 corte
 
8.octavo taller
8.octavo taller8.octavo taller
8.octavo taller
 
6.sexto taller
6.sexto taller6.sexto taller
6.sexto taller
 
4.cuarto taller/segundo corte
4.cuarto taller/segundo corte4.cuarto taller/segundo corte
4.cuarto taller/segundo corte
 
2.segundo taller/segundo corte
2.segundo taller/segundo corte2.segundo taller/segundo corte
2.segundo taller/segundo corte
 
7.septimo taller/segundo corte
7.septimo taller/segundo corte7.septimo taller/segundo corte
7.septimo taller/segundo corte
 
5.quinto taller/segundo corte
5.quinto taller/segundo corte5.quinto taller/segundo corte
5.quinto taller/segundo corte
 
3.tercer taller/segundo corte
3.tercer taller/segundo corte3.tercer taller/segundo corte
3.tercer taller/segundo corte
 
1.primer taller/segundo corte
1.primer taller/segundo corte1.primer taller/segundo corte
1.primer taller/segundo corte
 
Segundo taller
Segundo tallerSegundo taller
Segundo taller
 
Cuarto taller de arquitectura de hardware
Cuarto taller de arquitectura de hardwareCuarto taller de arquitectura de hardware
Cuarto taller de arquitectura de hardware
 
Quinto taller arquitectura de hardware
Quinto taller arquitectura de hardwareQuinto taller arquitectura de hardware
Quinto taller arquitectura de hardware
 
Septimo taller arquitectura
Septimo taller arquitecturaSeptimo taller arquitectura
Septimo taller arquitectura
 
Sexto taller arquitectura de hardware
Sexto taller arquitectura de hardwareSexto taller arquitectura de hardware
Sexto taller arquitectura de hardware
 

Último

9-Sociales-Colombia siglo XX.pdf sociales
9-Sociales-Colombia siglo XX.pdf sociales9-Sociales-Colombia siglo XX.pdf sociales
9-Sociales-Colombia siglo XX.pdf socialesJhonathanRodriguez10
 
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptxRosiClaros
 
La Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdfLa Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdfelabarbosa396
 
Presentación Materiales para la Construcción.ppt
Presentación Materiales para la Construcción.pptPresentación Materiales para la Construcción.ppt
Presentación Materiales para la Construcción.pptCARLOSAXELVENTURAVID
 
Linea del tiempo del celular .
Linea del tiempo del celular                   .Linea del tiempo del celular                   .
Linea del tiempo del celular .MiliMili32
 
Home Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todosHome Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todosDebora Gomez Bertoli
 
El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.SEAT
 
linea de tiempo television y su avance en los años
linea de tiempo television y su avance en los añoslinea de tiempo television y su avance en los años
linea de tiempo television y su avance en los añosMaraPazCrdenas
 
Patrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptxPatrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptxErandiCamperoBojorge
 

Último (9)

9-Sociales-Colombia siglo XX.pdf sociales
9-Sociales-Colombia siglo XX.pdf sociales9-Sociales-Colombia siglo XX.pdf sociales
9-Sociales-Colombia siglo XX.pdf sociales
 
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
 
La Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdfLa Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdf
 
Presentación Materiales para la Construcción.ppt
Presentación Materiales para la Construcción.pptPresentación Materiales para la Construcción.ppt
Presentación Materiales para la Construcción.ppt
 
Linea del tiempo del celular .
Linea del tiempo del celular                   .Linea del tiempo del celular                   .
Linea del tiempo del celular .
 
Home Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todosHome Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todos
 
El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.
 
linea de tiempo television y su avance en los años
linea de tiempo television y su avance en los añoslinea de tiempo television y su avance en los años
linea de tiempo television y su avance en los años
 
Patrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptxPatrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptx
 

Calculadora 8086

  • 1. nombre " Calculadora" ; símbolodel sistemabasadosimple calculadora( +, - , *, /) para 8086 . ; ejemplode cálculo: ; entrada1 < - Número:10 ; entrada2 <- operador: - ; entrada3 < - Número:5 ; ------------------- ; 10-5 = 5 ; de salida- > Número:5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; este maro se copiade emu8086.inc;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; esta macro imprime uncharen AL y losavances ; la posiciónactual del cursor: Putc carbón MACRO AX EMPUJE MOV AL , char MOV AH , 0Eh INT10h AXPOP ENDM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 100h iniciojmp
  • 2. ; definirlasvariables: db msg0 "*** por RealizadoProgramaAngélicaGarcía y SebastiánGonzález ***",0Dh, 0Ah db"*** Esta calculadoraFuncionaExclusivamente connúmerosEnteros***",0Dh, 0Ah, '$' msg1 db 0Dh, 0Ah, 0Dh, 0Ah,'Digite El Primernúmero:$' db msg2 "Digite laoperaciónlógicaDESEA Que Realizar:+ - * /: $" msg3 db "SegundonumeroDigite el:$" msg4 0DH db,0AH, 'El resutadoAproximadoDe Suoperaciónes:$' msg5 db 0DH, 0AH, 'Gracias por USAR Nuestracalculadora!Digite cualquierTeclapárrafosalir...', 0Dh, 0Ah,' $ ' ERR1 db "Operaciónnoadmitida",0Dh,0Ah,'$' smthdb "y algo....$" ; operadorpuede ser:'+', '-', '*', '/' o 'q' para salirenel medio. db opr '?' ; primery segundonúmero: dw num1? dw num2? Empezar: dx mov,msg0 desplazamiento movah, 9 int21h leadx,msg1 movah, 09h; cadenade salidaends:dx
  • 3. int21h ; obtenerel númerode variosdígitosfirmado ; desde el teclado,ylatienda ; el resultadoenel registrocx: scan_numllamada ; almacenarprimernúmero: num1 mov,cx ; nuevalínea: putc 0Dh putc 0Ah leadx,msg2 movah, 09h; cadenade salidaends:dx int21h ; obteneroperador: movah, 1; solaentradachar a AL. int21h opr mov,al
  • 4. ; nuevalínea: putc 0Dh putc 0Ah cmp opr,'q'; q - salidaenel medio. salidaje cmp opr,'*' jb wrong_opr cmp opr,'/' ja wrong_opr ; salidade una cadenaen ds:dx leadx,msg3 movah, 09h int21h ; obtenerel númerode variosdígitosfirmado ; desde el teclado,ylatienda ; el resultadoenel registrocx: scan_numllamada ; almacenarsegundonúmero: num2 mov,cx leadx,msg4
  • 5. movah, 09h; cadenade salidaends:dx int21h ; calcular: cmp opr,'+' je do_plus opr cmp,'-' je do_minus cmp opr,'*' je do_mult cmp opr,'/' je do_div ; Ningunade lasanteriores.... wrong_opr: leadx,ERR1 movah, 09h; cadenade salidaends:dx int21h Salida: ; salidade una cadenaen ds:dx leadx,msg5 movah, 09h int21h
  • 6. ; esperara que cualquiertecla... movah, 0 int16h retirado ; volvera os. o_plus: movax , num1 añadirax, num2 llamanprint_num;valor ax de impresión. salidajmp do_minus: movax , num1 subhacha, num2 llamanprint_num;valor ax de impresión. salidajmp do_mult: movax , num1 num2 IMUL ; (ax dx ) = ax * num2. llamanprint_num;valor ax de impresión. ; dx se ignora(CALCfuncionaconsólonúmerospequeños) . salidajmp
  • 7. do_div: ; dx se ignora(CALCfuncionaconsólonúmerosenterospequeños) . dx mov,0 movax , num1 idivnum2; ax = (ax dx ) / num2 . cmp dx , 0 jnzaprox llamanprint_num;valor ax de impresión. salidajmp aprox : llamanprint_num;valor ax de impresión. leadx , smth movah, 09h ; cadena de salidaends : dx int21h salidajmp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; estasfuncionesse copiande emu8086.inc;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; obtiene el númerode variosdígitosFIRMADOdesde el teclado, ; y almacenael resultadoenel registroCX: SCAN_NUMPROCCERCA EMPUJE DX AXEMPUJE EMPUJE SI
  • 8. MOV CX, 0 ; restablecerlabandera: MOV CS: make_minus,0 next_digit: ; obtenercarbóndesde el teclado ; enAL: MOV AH, 00h INT16h ; e imprimirlo: MOV AH, 0Eh INT10h ; comprobarMENOS: CMP AL,'-' JE set_minus ; comprobarteclaENTER: CMP AL,0Dh; retornode carro? JNEnot_cr JMP stop_input not_cr: CMP AL,8; 'RETROCESO' presionado? JNEbackspace_checked MOV DX, 0; eliminarel últimodígitopor
  • 9. MOV AX, CX;división: DIV CS: diez;AX= DX: AX/ 10 (DX-rem). MOV CX, AX Putc''; posiciónclara. Putc8; retrocesode nuevo. JMP next_digit backspace_checked: ; permitirque sólolosdígitos: CMP AL,'0' JAEok_AE_0 JMP remove_not_digit ok_AE_0: CMP AL,'9' JBE ok_digit remove_not_digit: Putc8; retroceso. Putc''; clara pasada noentrarondígitos. Putc8; retrocesode nuevo. Next_digitJMP;esperarparala próximaentrada. ok_digit: ; CX se multiplicanpor10 (primeravezel resultadoescero) AXEMPUJE MOV AX, CX MUL CS: diez;DX:AX = AX * 10 MOV CX, AX AXPOP
  • 10. ; comprobarsi el númeroesdemasiadogrande ; (resultadodebe serde 16 bits) CMP DX,0 JNEtoo_big ; convertirde códigoASCII: SUB AL, 30h ; añadirAL a CX: MOV AH, 0 MOV DX, CX; copiade seguridad,encasode que el resultadoserádemasiadogrande. AÑADIRCX,AX Too_big2JC; saltarsi el númeroesdemasiadogrande. JMP next_digit set_minus: MOV CS: make_minus,1 JMP next_digit too_big2: MOV CX , DX; restaurarel valor backupedantesde añadir. MOV DX, 0 ; DX era ceroantesde copiade seguridad! demasiadogrande: MOV AX , CX DIV CS: diez;revertirúltimaDX: AX= AX* 10 , que AX = DX : AX/ 10 MOV CX , AX Putc8 ; retroceso. Putc' ' ; claroentraronúltimodígito.
  • 11. Putc8 ; retrocesode nuevo. Next_digitJMP; esperara Enter/ Retroceso. stop_input: ; comprobarla bandera: CMP CS: make_minus,0 JE not_minus NEG CX not_minus: POPSI AXPOP POPDX RETIRADO make_minusDB? ; utilizadocomounabandera. SCAN_NUMENDP ; este procedimientoimprime númeroenAX, ; se utilizaconPRINT_NUM_UNSpara imprimirnúmerosconsigno: PRINT_NUMPROCCERCA EMPUJE DX AXEMPUJE CMP AX, 0 JNZnot_zero Putc' 0 ' JMP impresa
  • 12. not_zero: ; el signode verificaciónde AX, ; hacerabsolutasi es negativo: CMP AX, 0 JNSpositivo NEG AX Putc'- ' positivo: LLAME PRINT_NUM_UNS impreso: AXPOP POPDX RETIRADO PRINT_NUMENDP ; este procedimientoimprime unsinfirmar ; númeroenAX (nosólounsolodígito) ; valorespermitidosvande 0 a 65535 (FFFF) PRINT_NUM_UNS PROCCERCA AXEMPUJE PUSH BX EMPUJE CX EMPUJE DX ; banderapara evitarlaimpresiónde cerosantesdel número: MOV CX, 1
  • 13. ; (resultadode "/10000" essiempre menoroigual a 9). MOV BX, 10.000; 2710h - divisor. ; AXes cero? CMP AX,0 JZprint_zero begin_print: ; comprobardivisor(si ceroir a END_PRINT): CMP BX,0 JZEND_PRINT ; evitarlaimpresiónde cerosantesdel número: CMP CX,0 JE calc ; si AX <BX continuación,resultadode DIV serácero: CMP AX,BX JB salto Calc: MOV CX, 0; banderaconjunto. MOV DX, 0 DIV BX; AX= DX: AX/ BX (DX= resto). ; imprimirúltimodígito ; AH essiempre cero,porloque se ignora AÑADIRAL,30h; convertirencódigoASCII.
  • 14. PutcAL MOV AX, DX;conseguirrestode últimadiv. omitir: ; calcularBX = BX / 10 AXEMPUJE MOV DX , 0 MOV AX , BX DIV CS: diez;AX= DX : AX / 10 ( DX = resto) . MOV BX , AX AXPOP JMP begin_print print_zero: Putc' 0 ' END_PRINT: POPDX POPCX POPBX AXPOP RETIRADO PRINT_NUM_UNS ENDP de diezDW 10 ; utilizadocomomultiplicador/divisorporSCAN_NUMy PRINT_NUM_UNS .
  • 15. Get_stringPROCCERCA AXEMPUJE EMPUJE CX DI EMPUJE EMPUJE DX MOV CX,0; contadorde carbón. CMP DX, 1; búferdemasiadopequeño? Empty_bufferJBE; DX diciembre;espaciode reservaparael últimocero. ; ============================ ; Bucle eternollegar ; y procesalas pulsacionesde teclas: wait_for_key: MOV AH, 0; obtenerteclapulsada. INT 16h CMP AL, 0Dh; 'RETURN' presionado? JZ exit_GET_STRING CMP AL, 8; 'RETROCESO' presionado? JNE add_to_buffer
  • 16. Wait_for_keyJCXZ;nadapara eliminar! Diciembre CX Diciembre DI Putc 8; retroceso. Putc ''; posiciónclara. Putc 8; retrocesode nuevo. JMP wait_for_key add_to_buffer: CMP CX,DX; bufferestálleno? Wait_for_keyJAE;de serasí esperara que 'RETROCESO' o 'RETURN' ... MOV [DI],AL INCDI INCCX ; imprimirlaclave: MOV AH, 0Eh INT10h JMP wait_for_key ; ============================ exit_GET_STRING: ; terminarápor nula: MOV [DI],0
  • 18. Este es el cambio pasoa pasode lasbanderas,podemosobservarcuandose iniciael programaya medidaque introducimoslosdígitosvanvariandolasbanderas. Este procesoocurre de la mismamanery variasegúnel tipode operaciónque se este realizando, siempre cambiarade 1 a 0 ya que es unsistemabinario,al igual que losejerciciosque desarrollamosenel emuladorde circuitos,siempre el lenguaje de lasmaquinasesenbinario. Tambienpodemosobservarque entodasexiste uncambioporpequeñoque seayde la misma formafuncionacon laresta,multiplicaciónydivisión.