jueves, 28 de febrero de 2019

Programa que arroja promedio de una calificación



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 "El 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 pide dos números y muestra la resta con librería emu8086




name 'resta dos numeros'
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


Programa que pide dos números y muestra la suma con librería emu8086



name "suma de dos numeros"
include "emu8086.inc"
org 100h

.data
suma db 2 dup (?) ; declaramos un arreglo de tamano 2
.code

sumas proc Far
    print "Introduce el primer numero: "; Uso de la macro print
    call scan_num
    mov suma [0], cl
    print " "
    print "Introduce el segundo numero: "
    call scan_num
    mov suma [1],cl
    xor ax,ax
    add al,suma [0]
    add al,suma [1]
    print " "
    print "La suma es: "
    call print_num
sumas endp
exit:
    print " "
    print " "
    print "Presiona enter para salir... "
    mov ah,0 ;servicio de pulsacion de teclado
    int 16h  ;invoca servicios de teclado
    ret
define_print_string
define_print_num  
define_print_num_uns  
define_scan_num ; Por uso del proc_scan_num
end                                        


martes, 26 de febrero de 2019

Programa con libreria emu8086 que pide un numero



include 'emu8086.inc'
ORG    100h

LEA    SI, msg1       ; ask for the number
CALL   print_string   ;
CALL   scan_num       ; get number in CX.

MOV    AX, CX         ; copy the number to AX.

; print the following string:
CALL   pthis
DB  13, 10, 'Tu escribiste : ', 0

CALL   print_num      ; print number in AX.

RET                   ; return to operating system.

; data
msg1   DB  'Ingresa un numero y presiona enter: ', 0

; macros to define procs
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS  ; required for print_num.
DEFINE_PTHIS

END                   ; directive to stop the compiler.

Programa con libreria emu8086 Hola (+ tu nombre)


include 'emu8086.inc'
ORG    100h

LEA    SI, msg1       ; configurar puntero (SI) a msg
                      ; pedir el numero
CALL   print_string   ; mensaje impreso que apunta SI

LEA    DI, buffer     ; configurar el puntero (DI) para el buffer de entrada
MOV    DX, bufSize    ; establecer el tamano del bufer
CALL   get_string     ; obtener nombre y poner en bufer

LEA    SI, newln      ; punto en mensaje CR / LF / Hello 
CALL   print_string   ; mensaje impreso que apunta SI

RET                   ; Regreso al sistema operativo..

; data
msg1   DB "Ingresa tu nombre : ", 0  
newln  DB 13, 10
       DB "Hola , "
buffer DB 20 DUP (0)  ; bufer de entrada para get_string   
bufSize = $-buffer    ;  calcula el tamano del búfer

DEFINE_GET_STRING
DEFINE_PRINT_STRING
END            

Programa con libreria Emu8086


Para facilitar la programación, hay algunas funciones comunes que pueden incluirse en su programa. Para hacer que su programa utilice funciones definidas en otro archivo, debe usar la directiva INCLUDE seguida de un nombre de archivo. El compilador busca automáticamente el archivo en la misma carpeta donde se encuentra el archivo de origen, y si no puede encontrar el archivo allí, busca en la carpeta Inc. 

Es posible que actualmente no pueda comprender completamente el contenido de emu8086.inc (ubicado en la carpeta Inc ), pero está bien, ya que solo necesita entender lo que puede hacer. 

Codificacion:


include emu8086.inc

ORG    100h

PRINT 'Hola Mundo!'

GOTOXY 10, 5

PUTC 65           ;65 - es un codigo ASCII para 'A' 
PUTC 'B'

RET               ;Regreso al sistema operativo.
END               ;Directiva para detener el compilador.

Practica hola mundo 1 y 2 utilizando n para hacer espacio


include "emu8086.inc"

org 100h


.code
gotoxy 6,10
print ""
printn "Hola mundo" 
gotoxy 6,12
printn  "Hola mundo 2"
print " Letrero fin"


ret

Programa hola mundo con libreria emu8086



include "emu8086.inc"

org 100h


.code
gotoxy 6,10
print ""
print "Hola mundo"


ret

lunes, 25 de febrero de 2019

Programa bandera con desbordamiento (suma)


.model small
.stack
.data 


.code
    mov al, 100
    mov bl, 50
    add al, bl
    
.exit
end

Programa con bandera que cambia de signo


.model small
.stack
.data 


.code
    mov al, 1
    mov bl, 4
    sub al, bl
    
.exit
end

Programa con banderas


.model small
.stack
.data 


.code
    mov al, 2
    mov bl, 2
    add al, bl
    
.exit
end

Registros de bandera del procesador






              De los 16 bits del registro de banderas, nueve son comunes a toda la familia de procesadores 8086, y sirven para indicar el estado actual de la maquina y el resultado del procesamiento. Muchas instrucciones que piden comparaciones y aritmética cambian el estado de las banderas, algunas cuyas instrucciones pueden realizar pruebas para determinar la acción subsecuente. En resumen, los bits de las banderas comunes son como sigue:

OF (Overflow, desbordamiento). Indica desbordamiento de un bit de orden alto (mas a la izquierda) después de una operación aritmética.

DF (dirección). Designa la dirección hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres.

IF (interrupción). Indica que una interrupción externa, como la entrada desde el teclado, sea procesada o ignorada.

TF (trampa). Permite la operación del procesador en modo de un paso. Los programas depuradores, como el DEBUG, activan esta bandera de manera que usted pueda avanzar en la ejecución de una sola instrucción a un tiempo, para examinar el efecto de esa instrucción sobre los registros de memoria.

SF (signo). Contiene el signo resultante de una operación aritmética (0 = positivo y 1 = negativo).

ZF (cero). Indica el resultado de una operación aritmética o de comparación (0 = resultado diferente de cero y 1 = resultado igual a cero).

AF (acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato de 8 bits para aritmética especializada.

PF (paridad). Indica paridad par o impar de una operación en datos de 8 bits de bajo orden (mas a la derecha).

CF (acarreo). Contiene el acarreo de orden mas alto (mas a la izquierda) después de una operación aritmética; también lleva el contenido del ultimo bit en una operación de corrimiento o de rotación.

Las banderas están en el registro de banderas en las siguientes posiciones:

Las banderas mas importantes para la programación en ensamblador son O, S, Z y C, para operaciones de comparación y aritméticas, y D para operaciones de cadenas de caracteres. Los procesadores 80286 y posteriores tienen algunas banderas usadas para propósitos internos, en especial las que afectan al modo protegido. Los procesadores 80286 y posteriores tienen un registro extendido de banderas conocido como Eflags.

Procesador y sus registros


                   Un registro es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador. Permite guardar transistoriamente y acceder a valores muy usados, generalmente en operaciones matemáticas.


Su función es la de almacenar datos, siendo la manera más rápida de hacerlo por el sistema. Los registros se miden en número de bits que almacenan. La CPU, en cambio, comparte un conjunto de localidades de almacenamiento temporal de datos de alta velocidad, denominada con el mismo nombre: registro.

Los registros se dividen en 6 categorías:

*Registros de segmento.
*Registros de propósito general.
*Registros de apuntadores.
*Registros de banderas.
*Registros de puntero de instrucción
*Registros de pila.

Algunos ejemplos básicos de registros son:

*Contador de programa (PC).
*Registro de direcciones de la memoria (MAR).
*Registro de datos (RD).
*Registro de instrucciones (IR).
*Palabra de estado de programa (PSW).



miércoles, 20 de febrero de 2019

Practica suma dos números 20-02-2019



Código:

name "Suma de dos numeros"
include "emu8086.inc"
org 100h

.data
suma db 2 dup (?)

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

exit:
printn " "
printn " "
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

martes, 19 de febrero de 2019

Practica Menor O Mayor De Edad 19-02-2019


org 100h   

.model small
.stack 64; Segmento de pila

.data
diez db 10 ;variable 
num1 db 0 ;variable
mens db "Ingrese edad: $"
mens1 db " Eres mayor de edad $" 
mens2 db " Eres menor de edad $"

.code
  inicio proc Far
    mov ax,@data ; direccionamiento
    mov ds,ax ; Los datos se mueven
    
    mov ah,09
    lea dx,mens
    int 21h     
    
    mov ah,01
    int 21h
    sub al,30h ;Convertir a valor
    mul diez ;Se multiplica el numero
    mov num1,al   
    
    mov ah,01
    int 21h
    sub al,30h 
    add num1,al; Se suma
    mov al,num1
    
    cmp al,18
    jge mayor ; En caso de que sea
    jmp menor
    
    mayor:
      mov ah,09
      lea dx,mens1
      int 21h
      jmp fin
      
    menor:
      mov ah,09
      lea dx,mens2
      int 21h
      jmp fin
      
    
    
    
    fin:
      mov ax,4c00h 



    inicio endp
ret


Practica 19-02-2019

org 100h 

mov ax,10
mov bx,2
div bx

; add your code here

ret

martes, 12 de febrero de 2019

Programa Que Muestra Calificación Aprobada O Reprobado 12/02/2019


.model small
.stack 64

.data ;Seccion de Variables
    msg1 db 'Dame una Calificacion (Seguida de un ENTER): $'
    aprobado db 13, 10, ' Aprobado $' 
    reprobado db 13, 10, ' Reprobado $'
    
    VAR1 dw ?, '$'
    VAR2 dw ?, '$'
    VAR3 dw ?, '$' 

.code  ;Inicia el segmento de codigo del programa

    Resultado PROC FAR
        MOV AX, @DATA ;Como Inicio
        MOV DS, AX

;----Desplegar Primer Mensaje

        MOV AH, 09
        LEA DX, msg1
        INT 21h
        
;------ Pedir un Caracter
        
        MOV AH, 01
        INT 21h  
        MOV VAR1, AX 
        
;------ Pedir un Caracter
        
        MOV AH, 01
        INT 21h  
        MOV VAR2, AX

;------ Pedir un Caracter
        
        MOV AH, 01
        INT 21h  
        MOV VAR3, AX 
        
;------ Momento de Evaluar la calificacion
        CMP AL, 13
        JE CONTINUE
        JMP MAYOR
        
    
;------ Inicia Funciones
    
    CONTINUE:  
    
        MOV AX, VAR1
        CMP AL, 55
        JGE MAYOR 
        JMP MENOR
    
    MAYOR:
        MOV AH, 09
        LEA DX, aprobado
        INT 21h 
        JMP SALIR
        
    MENOR: 
        
        MOV AH, 09
        LEA DX, reprobado
        INT 21h
        JMP SALIR 
        
    SALIR:
    
        MOV AX, 4C00H
        INT 21H
    
    RESULTADO ENDP
    END


lunes, 11 de febrero de 2019

Tarea Practica Resta 11/02/2019


.model small
.stack 64
.data

n1 db 0
n2 db 0
RESTA db 0
msg1 db "Dame el valor:",'$'
msg2 db 10,13,"Dame el segundo valor:",'$'
msg3 db 10,13,"RESTA=",'$'
.code
Begin proc far
;direccionamos al segmento de datos
mov ax,@data
mov ds,ax

;solicitamos el primer digito
mov ah,09
lea dx,msg1
int 21h
;se lee el primer valor
mov ah,01
int 21h
sub al,30h ;convierte el caracter en un numero
mov n1,al

;Solicitamos el segundo digito
mov ah,09
lea dx,msg2
int 21h
mov ah,01
int 21h
sub al, 30h;convierte el caracter en numero
mov n2,al

;operacion
mov al,n1
sub al,n2
add al,30h;convierte en caracter
mov resta,al

mov ah,09
lea dx,msg3
int 21h

;se imprime el caracter con el servicio 02 de la int 21h
mov ah,02
mov dl,resta
int 21h
mov ah,4ch
int 21h
Begin endp
end


mov ah,09
lea

jueves, 7 de febrero de 2019

Practica SUMA 07/02/2019


.model small
.stack 64
.data
  n1 db 0
  n2 db 0
  suma db 0
  msg1 db  " Dame el primer valor: ","$"
  msg2 db   " Dame el segundo valor: ","$"
  msg3 db "  Suma = ", "$"
.code
  begin proc far
    ;direccionamos al segmento de datos 
    mov ax,@data
    mov ds,ax
    
    ;Desplegar el primer mensaje
    mov ah,09   
    lea dx,msg1
    int 21h   
    
    
    ;Se lee el primer caracter
    mov ah,01
    int 21h 
    
    
    ;Convierte el caracter en numero  
    sub al,30h
    mov n1,al
    
    ;Solicitamos el segundo digito
    mov ah,09
    lea dx,msg2
    int 21h
    
    ;Esperando el primer caracter
    mov ah,01
    int 21h 
       
    ; Convierte el caracter en numero   
    sub al,30h
    mov n2,al 
    
    ;Operacion
    mov al,n1
    add al,n2
    add al,30h
    
    ;Convierte a caracter
    mov suma,al
    
    ;Desplegar el mensaje 3
    mov ah,09
    lea dx,msg3
    int 21h
    
    ;Se imprime el caracter con el servicio 02 de la int 21h
    mov ah,02
    mov dl, suma
    int 21h
    
    ;Cerrando el programa
    mov ah,4ch
    int 21h
    Begin endp
    end
    

martes, 5 de febrero de 2019

Practica abecedario 05/02/2019

Codigo:

org 100h


MOV DL, "A";

MOV CX, 26;

imprime:
        MOV AH,02;
        INT 21h;
        INC DL
LOOP imprime

ret

Resultado: