martes, 26 de febrero de 2019

Practica #14 Programas de jbwyatt


Fuente de consulta para estos programas

Ejemplo 1
Código:
include emu8086.inc

ORG 100h

PRINT 'Hello World!'

GOTOXY 10, 5

PUTC 65           ; 65 - is an ASCII code for 'A'
PUTC 'B'

RET               ; return to operating system.
END               ; directive to stop the compiler.



Ejemplo 2
Código:
; demonstrate get_string and print_string
;----------------------------------------
include 'emu8086.inc'
ORG    100h

LEA    SI, msg1       ; set up pointer (SI) to msg
                      ; to ask for the number
CALL   print_string   ; print message that SI points to

LEA    DI, buffer     ; set up pointer (DI) to input buffer
MOV    DX, bufSize    ; set size of buffer
CALL   get_string     ; get name & put in buffer

LEA    SI, newln      ; point at CR/LF / Hello message
CALL   print_string   ; print message that SI points to

RET                   ; return to operating system.

; data
msg1   DB "Enter your name: ", 0
newln  DB 13, 10
       DB "Hello, "
buffer DB 20 DUP (0)  ; input buffer for get_string 
bufSize = $-buffer    ; calculates size of buffer

DEFINE_GET_STRING
DEFINE_PRINT_STRING
END                   ; directive to stop the compiler.





Ejemplo 3
Código:

; demonstrate scan_num, print_num, pthis
;----------------------------------------
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, 'You have entered: ', 0

CALL   print_num      ; print number in AX.

RET                   ; return to operating system.

; data
msg1   DB  'Enter the number: ', 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.



Practica #13

Programa hola mundo con la libreria emu8086.inc

Ejemplo 1
Código
include 'emu8086.inc'

org 100h
.code
gotoxy 6,10 ;usando la macro de la libreria, agrega el cursor en esas posiciones
print " "
print "Hola mundo"

ret





Ejemplo 2
Código:
include 'emu8086.inc'

org 100h
.code
gotoxy 6,10 ;usando la macro de la libreria, agrega el cursor en esas posiciones
print " "
print "Hola mundo"
gotoxy 6,12
printn "Hola mundo2"
print "Letrto fin"
gotoxy 6,14

putc 'A'   


print "dame un numero"
call scan_num ;pide un numero

DEFINE_SCAN_NUM
end

ret


Ejemplo 3
Código:
include 'emu8086.inc'

org 100h
.code
gotoxy 6,10 ;usando la macro de la libreria, agrega el cursor en esas posiciones
print " "
print "Hola mundo"
gotoxy 6,12
printn "Hola mundo2"
print "Letrto fin"
gotoxy 6,14

putc 'A'   


print "dame un numero"
call scan_num ;pide un numero

DEFINE_SCAN_NUM
end


ret



lunes, 25 de febrero de 2019

Practica #12

En esta practica nos basamos en la siguiente fuente de consulta para utilizar los registros en banderas.
Fuente de consulta

Definición de registro de bandera:
Es un registro de 16 bits, de los cuales 9 de ellos sirven para indicar el estado actual de la maquina y el resultado del procesamiento.
Aquí inserto una representación de esto, así como la explicación de que hace cada una de las banderas que se tienen para el estado actual de maquina y su resultado.

Ejemplo #1
Código:
.model small
.stack
.data

.code     
     mov al, 255
     mov bl, 1
     add al,bl

.exit
end


Ejemplo #2
Código:
.model small
.stack
.data

.code     
     mov al, 255
     mov bl, 1
     sub al,bl

.exit
end



Ejemplo #3
Código:
.model small
.stack
.data

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

.exit
end


miércoles, 20 de febrero de 2019

Practica #11

Programa en emu8086 que es capaz de hacer la suma de 2 números utilizando la librería "include 'emu8086.inc' ".

Emu8086.inc define los siguientes macros:
- PUTC char: Imprime un solo caracter
- GOTOXY col, row: Coloca el cursor en las coordenadas solicitadas
- PRINT string: Imprime una cadena
- PRINTN string: Imprime una cadena y tras imprimirla hace un salto de linea.

Vídeo consultado para esta practica
Código
El creador de este código es "Cuevas Villafranco Ivan Enrique"

name 'Suma dos numeros' ;Definimos el nombre
include 'emu8086.inc' ;Libreria
org 100h 
.data
suma db 2 dup (?)  ;Creamos arreglo de dos espacios

.code
Sumas proc   ;Proceso de ingreso de datos y suma
    printn " "
    print "Introduce el primer numero ==>"
    call scan_num  ;Obtiene los datos ingresados
    mov suma[0],cl ;se guarda el valor de cl y lo guarda en el arreglo
    printn " "
   
    print "Introduce el segundo numero ==>"
    call scan_num
    mov suma[1],cl
    printn " " 
 
    xor ax,ax  ;Limpia el registro ax
    add al,suma[0] ;Envia la suma al registro al
    add al,suma[1] ; Se envia para poder imprimir
    printn " "
    Print "La suma es: "
    call print_num
Sumas endp

exit: ;Funcion para termiar el programa
    printn " "
    printn " "
    print "Presiona enter para salir..."
    mov ah,0  ;El 0 lee los caracteres del teclado
    int 16h ;16h invoca los servicios del teclado
    ret
;Se definen los conmandos que se estan usando, para escanear e imprimir
define_print_string
define_print_num                 
define_print_num_uns
define_scan_num
end     






martes, 19 de febrero de 2019

Practica #10

Programa en emu8086 para verificar si eres  mayor de edad o menor de edad

Código

org 100h

.data
diez db 10;variable
num1 db 0 ;variable para edad
mens db 'Ingrese la 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
        ;poner el primer letrero
        mov ah,09
        lea dx, mens
        int 21h
     
        mov ah,01
        int 21h
        sub al,30h;convertir a valor
        mul diez ;se multiplica el num
        mov num1,al
     
        mov ah,01
        int 21h
        sub al,30h
        add num1,al ;se suma a las decenas
        mov al,num1
     
        cmp al,18
        jge mayor ;en caso de que si se cumpla
        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 #9

Programa en emu8086 en división

Código

org 100h

mov ax,100
mov bx,5
div bx

ret


martes, 12 de febrero de 2019

Practica #7

Programa en el que se ingresa una calificación y este muestra un mensaje de "Aprobado" ó "Reprobado"

Código 
.model small

.stack 64

.data
    msg1 db 'Dame una calificacion (seguido 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

Realizar el programa de resta basándonos en el programa anterior

Código
org 100h

.model small
.stack 64
.data
 n1 db 0
 n2 db 0
 resta db 0
 msg1 db "Ingrese el primer valor:", '$'
 msg2 db 10,13, "Ingrese el segundo valor:", '$'
 msg3 db 10,13, "Resta=", '$'
 .code

 begin proc far
    ;direccionamos al segmentos 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 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 ;lo que esta en n1 lo asigna a al
    sub al,n2
    add al,30h;convierte a 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  ;valor que se usa para poner algo en pantalla
    mov dl,resta
    int 21h
    mov ah,4ch
    begin endp 

 end




jueves, 7 de febrero de 2019

Practica #6 Programa del vídeo

Código

.model small
.stack 64
.data
    n1 db 0
    n2 db 0
    suma db 0
    msg1 db "Dame el valor: ",'$'
    msg2 db 10,13, "Dame el segundo valor: ", '$'
    msg3 db 10,13, "suma= ", '$'
.code
    begin proc far
        ; direccionamos al segmentos 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 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
        add al,n2
        add al, 30h;convierte a caracter
        mov suma,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,suma
        int 21h
        mov ah,4ch
        int 21h
        begin endp 

 end

Pantalla

 

miércoles, 6 de febrero de 2019

Resumen de "Lectura de caracteres en el lenguaje ensamblador"

Al leer con el 01 un carácter lo guarda automáticamente en el registro AL al guardarlo se le debe restar 48(debido que es =0)
30  hexadecimal es igual a 48 esto es internamente
al querer imprimir en pantalla en lugar de restar se suma el 48 o 30h

Sub al, 48   o sub al, 30h

Al imprimir add al 48    o    add al 30h

Practica en clase #5

Ejemplo:

Código

.model small
.stack 64

.data ;seccion de variables
    mensaje db "ingrese el numero de veces que se repite el mensaje (1-9)",13,10,'$'
    repetir db 13,10, "Repitiendo el ciclo $"

.code
  inicio proc far
    mov ax,@data
    mov ds,ax

    mov ah,09
    lea dx,mensaje
    int 21h

    mov ah,01
    int 21h    ;permite que ingresen datos

    ;convertir a valor lo que se tecleo
    sub al,30h

    mov cl, al 
    ciclo:
        mov ah,09
        lea dx,repetir
        int 21h
    loop ciclo

    mov ax,4c00h
    int 21h
    inicio endp
end






martes, 5 de febrero de 2019

Practica en clase #4

Abecedario en mayúsculas (emu8086)
Código

ORG 100H
MOV DL, 'A'

MOV CX, 26 
IMPRIME:
MOV AH, 02
INT 21H
INC DL
LOOP IMPRIME

RET






Abecedario en minúsculas(emu8086)
Código

ORG 100H     

MOV DL, 'a'

MOV CX, 26
LOOP2: 
mov ah, 02
int 21h 
INC DL
LOOP LOOP2
   
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...