martes, 12 de marzo de 2019

Unidad 2. Practica #1

Fuente de consulta #1

Fuente de consulta #2

Tabla de instrucciones de saltos


Ejemplo #1
Código
org 100h
mov    ax, 5        ; set ax to 5.
mov    bx, 2          ; set bx to 2.

 jmp    calc            ; go to 'calc'.
 back:  jmp stop      ; go to 'stop'.
calc:
add    ax, bx         ; add bx to ax.
jmp    back           ; go 'back'.
 stop:
 ret                   ; return to os

Ejemplo #2
Código:
include 'emu8086.inc' 
.MODEL SMALL
.STACK .DATA  
num1 db 8  
num2 db 8  
msg1 db , 'NUMEROS IGUALES', '$'  
msg2 db , 'NUMEROS 1 MAYOR', '$'  
msg3 db , 'NUMEROS 2 MAYORES', '$'
 .code  
main:  
mov ax, @data  
mov ds, ax    
mov al, num1  
cmp al, num2    
jc Mayor2  
jz igual  
jnz Mayor1   
. exit
 igual:  
printn 'Los numeros son iguales'  
jmp fin

 Mayor2:  
printn 'Numero 2 es mayor'  
 jmp fin
 Mayor1:  
printn 'Numero 1 es mayor'  
 jmp fin
 fin:
 END
Ejemplo #3
Código:
include 'emu8086.inc'
.MODEL SMALL
.STACK
.DATA
    num1 db 8
    num2 db 8
    msg1 db , 'NUMEROS IGUALES', '$'
    msg2 db , 'NUMEROS 1 MAYOR', '$'  
    msg3 db , 'NUMEROS 2 MAYORES', '$' 
.code
    main:
    mov ax, @data
    mov ds, ax 
    
    mov al, num1  
    cmp al, num2
    
    jc Mayor2 
    jz igual
    jnz Mayor1    
    
.exit
igual:
    printn 'Los numeros son iguales'
    jmp fin
    ;mov ah, 09H
    ;lea dx,msg1
    ;int 21h
;.exit
Mayor2:
    printn 'Numero 2 es mayor'
    jmp fin
    ;mov ah,09H
    ;lea dx,msg1
    ;int 21h
;.exit
Mayor1:  
    printn 'Numero 1 es mayor'
    jmp fin
    ;mov ah,09H
    ;lea dx,msg1
    ;int 21h
;.exit
fin:
END 

Unidad 2 Practica #4 Letrero con OFFSET

Código

ORG 100H
INCLUDE 'EMU8086.INC'  

.DATA
DATO DB 10,13,'lETRERO$',10,13

.CODE

MOV CX,4

COMIENZO:
    MOV DX, OFFSET DATO
    
    MOV AH,09
    INT 21H
    LOOP COMIENZO 


RET
END


Unidad 2 Practica #3 Despliega letrero con lea

Código

ORG 100H
INCLUDE 'EMU8086.INC'

.DATA
DATO DB 10,13,'lETRERO$',10,13

.CODE

MOV CX,4

COMIENZO:
    LEA DX, DATO
 
    MOV AH,09
    INT 21H
    LOOP COMIENZO


RET

Unidad 2 Practica #2 Despliega letrero con macro

Letreros con ciclos condicionales

Despliega letrero con loop
Código

ORG 100H
INCLUDE 'EMU8086.INC'

MOV CX,4

COMIENZO:
PRINTN 'LETRERO'

LOOP COMIENZO

RET





miércoles, 6 de marzo de 2019

Estructuras condicionales

http://www.tutorialesprogramacionya.com/javaya/detalleconcepto.php?codigo=80&punto=&inicio=
No todos los problemas pueden resolverse empleando estructuras secuenciales. Cuando hay que tomar una decisión aparecen las estructuras condicionales.

Las estructuras condicionales pueden ser:
  • simples
  • compuestas

Simples
Las estructuras condicionales simples se les conoce como “Tomas de decisión”. Estas tomas de decisión tienen la siguiente forma:
Podemos observar: El rombo representa la condición. Hay dos opciones que se pueden tomar. Si la condición da verdadera se sigue el camino del verdadero, o sea el de la derecha, si la condición da falsa se sigue el camino de la izquierda.
Se trata de una estructura CONDICIONAL SIMPLE porque por el camino del verdadero hay actividades y por el camino del falso no hay actividades.
Por el camino del verdadero pueden existir varias operaciones, entradas y salidas, inclusive ya veremos que puede haber otras estructuras condicionales.

Ejemplo:
Problemática: 
Ingresar el sueldo de una persona, si supera los 3000 pesos mostrar un mensaje en pantalla indicando que debe abonar impuestos
Diagrama de flujo:

Siempre se hace la carga del sueldo, pero si el sueldo que ingresamos supera 3000 pesos se mostrará por pantalla el mensaje "Esta persona debe abonar impuestos", en caso que la persona cobre 3000 o menos no aparece nada por pantalla.

Código

import java.util.Scanner;

public class EstructuraCondicionalSimple1 {
    public static void main(String[] ar) {
     Scanner teclado=new Scanner(System.in);
     float sueldo;
     System.out.print("Ingrese el sueldo:");
     sueldo=teclado.nextFloat();
     if (sueldo>3000) {
         System.out.println("Esta persona debe abonar impuestos");
     }
    }
}

Explicación
La palabra clave "if" indica que estamos en presencia de una estructura condicional; seguidamente disponemos la condición entre paréntesis. Por último encerrada entre llaves las instrucciones de la rama del verdadero.

Es necesario que las instrucciones a ejecutar en caso que la condición sea verdadera estén encerradas entre llaves { }, con ellas marcamos el comienzo y el fin del bloque del verdadero.
Ejecutando el programa e ingresamos un sueldo superior a 3000 pesos. Podemos observar como aparece en pantalla el mensaje "Esta persona debe abonar impuestos", ya que la condición del if es verdadera.
Volvamos a ejecutar el programa y carguemos un sueldo menor o igual a 3000 pesos. No debe aparecer mensaje en pantalla.



Compuesta

Las estructuras de comparación compuesta, son tomas de decisión especializadas que permiten comparar una variable contra distintos posibles resultados, ejecutando para cada caso una serie de instrucciones especificas.
En una estructura condicional compuesta tenemos entradas, salidas, operaciones, tanto por la rama del verdadero como por la rama del falso. La forma común es la siguiente:
Ejemplo:
Problematica:
Realizar un programa que solicite ingresar dos números distintos y muestre por pantalla el mayor de ellos.
Diagrama de flujo:

Se hace la entrada de num1 y num2 por teclado. Para saber cual variable tiene un valor mayor preguntamos si el contenido de num1 es mayor (>) que el contenido de num2, si la respuesta es verdadera vamos por la rama de la derecha e imprimimos num1, en caso que la condición sea falsa vamos por la rama de la izquierda (Falsa) e imprimimos num2.
Como podemos observar nunca se imprimen num1 y num2 simultáneamente.
Estamos en presencia de una ESTRUCTURA CONDICIONAL COMPUESTA ya que tenemos actividades por la rama del verdadero y del falso.

Código:

 import java.util.Scanner;

public class EstructuraCondicionalCompuesta1 {
    public static void main(String[] ar) {
     Scanner teclado=new Scanner(System.in);
     int num1,num2;
     System.out.print("Ingrese primer valor:");
     num1=teclado.nextInt();
     System.out.print("Ingrese segundo valor:");
     num2=teclado.nextInt();
     if (num1>num2) {
      System.out.print(num1);
     } else {
      System.out.print(num2);
     }
    }
}


Explicación:
Cotejemos el diagrama de flujo y la codificación y observemos que el primer bloque de llaves después del if representa la rama del verdadero y el segundo bloque de llaves representa la rama del falso. Compilemos el programa, si hubo errores sintácticos corrijamos y carguemos dos valores, como por ejemplo:
Ingrese el primer valor: 10
Ingrese el segundo valor: 4
10
Si ingresamos los valores 10 y 4 la condición del if retorna verdadero y ejecuta el primer bloque.
Un programa se controla y corrige probando todos sus posibles resultados.
Ejecutemos nuevamente el programa e ingresemos:
Ingrese el primer valor: 10
Ingrese el segundo valor: 54
54
Cuando a un programa le corregimos todos los errores sintácticos y lógicos ha terminado nuestra tarea y podemos entregar el mismo al USUARIO que nos lo solicitó.

Operadores
En una condición deben disponerse únicamente variables, valores constantes y operadores relacionales.

Operadores Relacionales:
>  (mayor)
<  (menor)
>= (mayor o igual)
<= (menor o igual)
== (igual)
!= (distinto)
Operadores Matemáticos
+ (más)
- (menos)
* (producto)
/ (división)
% (resto de una división)  Ej.:  x=13%5;  {se guarda 3}
Hay que tener en cuenta que al disponer una condición debemos seleccionar que operador relacional se adapta a la pregunta.

Temas de la unidad 2.

Unidad 2. Programación básica 

2.1 Ensamblador (y ligador) a utilizar
2.2 Ciclos numéricos
2.3 Captura básica de cadenas
2.4 Comparación y prueba
2.5 Saltos
2.6 Ciclos condicionales
2.7 Incremento y decremento
2.8 Captura de cadenas con formato
2.9 Instrucciones aritméticas
2.10 Manipulación de la pila
2.11 Obtención de cadena con representación decimal
2.12 Instrucciones lógicas
2.13 Desplazamiento y rotación
2.14 Obtención de una cadena con la representación hexadecimal
2.15 Captura y almacenamiento de datos numéricos
2.16 Operaciones básicas sobre archivos de disco

Programas vistos en clase

Programa que saca el promedio de 3 materias
Código:

name "calcula el promedio de tres materias"
include "emu8086.inc"
org 100h 

.data
pro db 4 dup (?)  

.code
promedio proc
    printn ""  
    print "introduce una calificacion: "
    call scan_num  
    mov pro[0],cl
    printn ""
    print "introduce la 2da calificacion: "
    call scan_num
    mov pro[1],cl
    printn ""
    print "introduce la 3ra calificacion: "
    call scan_num
    mov pro[2],cl
    printn ""
    print "numero de materias: "
    call scan_num
    mov pro[3],cl
    xor ax,ax
    add al,pro[0]
    add al,pro[1]
    add al,pro[2]
    div pro[3]
    printn ""
    print "promedio es= "
    call print_num
      
promedio endp

exit:
    printn ""
    printn ""
    print "presione para salir..."
    mov ah,0
    int 16h
    ret
define_print_string
define_print_num
define_print_num_uns
define_scan_num

end


programa que resta dos números
Código:
include 'emu8086.inc'
org 100h

.data
resta db 2 dup (?)

.code
restas proc
print " "
print "Introduce el primer numero: "
call scan_num
mov resta[0],cl
print " "
print "Introduce el segundo numero: "
call scan_num
sub resta[1],cl
print " "
xor ax,ax
add al,resta[0]
add al, resta[1]
print " "
print "La resta es: "
call print_num
restas endp

exit:
print " "
print " "
print "Presiona enter para salir..."
mov ah,0
int 16h
ret
define_print_string
define_print_num
define_print_num_uns
define_scan_num
end

ret





Practica #5 Unidad2

org 100h include 'emu8086.inc' mov si, 0 ;ponemos si en 0 comienzo: mov al, msg2[0] ;copiar la primera letra de la p...