SlideShare una empresa de Scribd logo
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 JavaScript
tovi27
 
Quasi - Lenguaje C Mostrando Datos
Quasi - Lenguaje C Mostrando DatosQuasi - Lenguaje C Mostrando Datos
Quasi - Lenguaje C Mostrando Datosdegarden
 
Strcat
StrcatStrcat
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 repetitivas
Abrirllave
 
Estructuras de control C++
Estructuras de control C++Estructuras de control C++
Estructuras de control C++
LOANNELMARIN
 
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
Sergio Gómez Bachiller
 
Chuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesChuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantes
Abrirllave
 
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
J R7
 
5.5 instruccion for
5.5 instruccion for5.5 instruccion for
5.5 instruccion for
SNPP
 
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 6.sexto ejercicio emu8086

Algoritmos 50 ejemplos
Algoritmos 50 ejemplosAlgoritmos 50 ejemplos
Algoritmos 50 ejemplos
Beatriz Elena Herrera
 
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
J 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
 
Tabla de instrucciones asembler
Tabla de instrucciones asemblerTabla de instrucciones asembler
Tabla de instrucciones asembler
Edwin David Toro Echeverria
 
Algoritmos 50 ejemplos
Algoritmos 50 ejemplosAlgoritmos 50 ejemplos
Algoritmos 50 ejemplos
enyol
 
Algoritmos 50 ejemplos (1)
Algoritmos 50 ejemplos (1)Algoritmos 50 ejemplos (1)
Algoritmos 50 ejemplos (1)
Andres Rivero
 
Algoritmos 50 ejemplos
Algoritmos 50 ejemplosAlgoritmos 50 ejemplos
Algoritmos 50 ejemplos
Yovanny Jose Rivero Zavala
 
Algoritmos 50 ejemplos
Algoritmos 50 ejemplosAlgoritmos 50 ejemplos
Algoritmos 50 ejemplos
Sandra Patricia Carrillo Velosa
 
Emu 8086
Emu 8086Emu 8086
Emu 8086
Andres Pozo
 
Matrices
MatricesMatrices
Matrices
alesso1234
 
Ejercicios resueltos de_pl-sql
Ejercicios resueltos de_pl-sqlEjercicios resueltos de_pl-sql
Ejercicios resueltos de_pl-sql
MaraMagdalenaBlancoR
 
Comandos de Raptor,C# y Java
Comandos de Raptor,C# y JavaComandos de Raptor,C# y Java
Comandos de Raptor,C# y Java
Ana Ruth G H
 
Micc mej feb18_2010
Micc mej feb18_2010Micc mej feb18_2010
Micc mej feb18_2010
Jair 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_2011solucion
Jair 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 basic
Rafael 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
 
Assembler 1er laboratorio
Assembler 1er laboratorioAssembler 1er laboratorio
Assembler 1er laboratorio
José Pedro Avila
 

Similar a 6.sexto ejercicio emu8086 (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

1.primer ejercicio emu8086
1.primer ejercicio emu80861.primer ejercicio emu8086
1.primer ejercicio emu8086
Sebastian Gonzalez
 
2.segundo ejercicio
2.segundo ejercicio2.segundo ejercicio
2.segundo ejercicio
Sebastian Gonzalez
 
4.cuarto ejercicio
4.cuarto ejercicio4.cuarto ejercicio
4.cuarto ejercicio
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 corte
Sebastian 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 corte
Sebastian 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 corte
Sebastian 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 corte
Sebastian Gonzalez
 
8.octavo taller
8.octavo taller8.octavo taller
8.octavo taller
Sebastian Gonzalez
 
6.sexto taller
6.sexto taller6.sexto taller
6.sexto taller
Sebastian Gonzalez
 
4.cuarto taller/segundo corte
4.cuarto taller/segundo corte4.cuarto taller/segundo corte
4.cuarto taller/segundo corte
Sebastian Gonzalez
 
2.segundo taller/segundo corte
2.segundo taller/segundo corte2.segundo taller/segundo corte
2.segundo taller/segundo corte
Sebastian Gonzalez
 
7.septimo taller/segundo corte
7.septimo taller/segundo corte7.septimo taller/segundo corte
7.septimo taller/segundo corte
Sebastian Gonzalez
 
5.quinto taller/segundo corte
5.quinto taller/segundo corte5.quinto taller/segundo corte
5.quinto taller/segundo corte
Sebastian Gonzalez
 
3.tercer taller/segundo corte
3.tercer taller/segundo corte3.tercer taller/segundo corte
3.tercer taller/segundo corte
Sebastian Gonzalez
 
1.primer taller/segundo corte
1.primer taller/segundo corte1.primer taller/segundo corte
1.primer taller/segundo corte
Sebastian Gonzalez
 
Segundo taller
Segundo tallerSegundo taller
Segundo taller
Sebastian Gonzalez
 
Cuarto taller de arquitectura de hardware
Cuarto taller de arquitectura de hardwareCuarto taller de arquitectura de hardware
Cuarto taller de arquitectura de hardware
Sebastian Gonzalez
 
Quinto taller arquitectura de hardware
Quinto taller arquitectura de hardwareQuinto taller arquitectura de hardware
Quinto taller arquitectura de hardware
Sebastian Gonzalez
 
Septimo taller arquitectura
Septimo taller arquitecturaSeptimo taller arquitectura
Septimo taller arquitectura
Sebastian Gonzalez
 
Sexto taller arquitectura de hardware
Sexto taller arquitectura de hardwareSexto taller arquitectura de hardware
Sexto taller arquitectura de hardware
Sebastian 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

TRABAJO DE TECNOLOGIA increíble y próspero epico
TRABAJO DE TECNOLOGIA increíble y próspero epicoTRABAJO DE TECNOLOGIA increíble y próspero epico
TRABAJO DE TECNOLOGIA increíble y próspero epico
edepjuanorozco
 
Las plantas ornamental su importancia, sus variedades etc
Las plantas ornamental su importancia, sus variedades etcLas plantas ornamental su importancia, sus variedades etc
Las plantas ornamental su importancia, sus variedades etc
60475271
 
Solucionario 5° P2P16.pptxihiuhiuhihihini
Solucionario 5° P2P16.pptxihiuhiuhihihiniSolucionario 5° P2P16.pptxihiuhiuhihihini
Solucionario 5° P2P16.pptxihiuhiuhihihini
corderojulia187
 
Presentación- PLATAFORMA VIRTUAL E-LEARNING .pptx
Presentación-  PLATAFORMA VIRTUAL E-LEARNING .pptxPresentación-  PLATAFORMA VIRTUAL E-LEARNING .pptx
Presentación- PLATAFORMA VIRTUAL E-LEARNING .pptx
arelisguerra707
 
TAREA DE TECNOLOGIA DE LA FICHHA 1 Y DOS
TAREA DE TECNOLOGIA DE LA FICHHA 1 Y DOSTAREA DE TECNOLOGIA DE LA FICHHA 1 Y DOS
TAREA DE TECNOLOGIA DE LA FICHHA 1 Y DOS
darlingreserved
 
QUÉ ES ALARA proteccion rayografica.pptx
QUÉ ES ALARA proteccion rayografica.pptxQUÉ ES ALARA proteccion rayografica.pptx
QUÉ ES ALARA proteccion rayografica.pptx
AnthonyFernandoArias
 
MODELO PEDAG DE LA FPI SENA PARA LA FORMACION PROFESIONAL E INTEGRAL
MODELO PEDAG DE LA FPI SENA PARA LA FORMACION PROFESIONAL E INTEGRALMODELO PEDAG DE LA FPI SENA PARA LA FORMACION PROFESIONAL E INTEGRAL
MODELO PEDAG DE LA FPI SENA PARA LA FORMACION PROFESIONAL E INTEGRAL
Fernando540828
 

Último (7)

TRABAJO DE TECNOLOGIA increíble y próspero epico
TRABAJO DE TECNOLOGIA increíble y próspero epicoTRABAJO DE TECNOLOGIA increíble y próspero epico
TRABAJO DE TECNOLOGIA increíble y próspero epico
 
Las plantas ornamental su importancia, sus variedades etc
Las plantas ornamental su importancia, sus variedades etcLas plantas ornamental su importancia, sus variedades etc
Las plantas ornamental su importancia, sus variedades etc
 
Solucionario 5° P2P16.pptxihiuhiuhihihini
Solucionario 5° P2P16.pptxihiuhiuhihihiniSolucionario 5° P2P16.pptxihiuhiuhihihini
Solucionario 5° P2P16.pptxihiuhiuhihihini
 
Presentación- PLATAFORMA VIRTUAL E-LEARNING .pptx
Presentación-  PLATAFORMA VIRTUAL E-LEARNING .pptxPresentación-  PLATAFORMA VIRTUAL E-LEARNING .pptx
Presentación- PLATAFORMA VIRTUAL E-LEARNING .pptx
 
TAREA DE TECNOLOGIA DE LA FICHHA 1 Y DOS
TAREA DE TECNOLOGIA DE LA FICHHA 1 Y DOSTAREA DE TECNOLOGIA DE LA FICHHA 1 Y DOS
TAREA DE TECNOLOGIA DE LA FICHHA 1 Y DOS
 
QUÉ ES ALARA proteccion rayografica.pptx
QUÉ ES ALARA proteccion rayografica.pptxQUÉ ES ALARA proteccion rayografica.pptx
QUÉ ES ALARA proteccion rayografica.pptx
 
MODELO PEDAG DE LA FPI SENA PARA LA FORMACION PROFESIONAL E INTEGRAL
MODELO PEDAG DE LA FPI SENA PARA LA FORMACION PROFESIONAL E INTEGRALMODELO PEDAG DE LA FPI SENA PARA LA FORMACION PROFESIONAL E INTEGRAL
MODELO PEDAG DE LA FPI SENA PARA LA FORMACION PROFESIONAL E INTEGRAL
 

6.sexto ejercicio emu8086

  • 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.