Mostrando entradas con la etiqueta Lengnuaje de interfaz. Mostrar todas las entradas
Mostrando entradas con la etiqueta Lengnuaje de interfaz. Mostrar todas las entradas

lunes, 21 de mayo de 2018

Exposiciones: Programación de Dispositivos


Programación del Puerto Paralelo (Equipo de Jonathan)
Puerto paralelo. Es una interfaz entre un ordenador y un periférico. El puerto paralelo transmite la información byte por byte, es decir que los 8 bits de datos que forman un byte viajan juntos. Un ejemplo de puerto paralelo es el puerto de la impresora. El Puerto Paralelo solo fue creado y usado para la interfaz de las impresoras y la P.C. hoy en día vemos que es uno de los mas usados para conectar diversos periféricos a su PC por su alta velocidad y fiabilidad en la transmisión de datos por lo cual, ha ido perfeccionandose cada día más.


Programación del Puerto Usb (Equipo de Emanuel Horta)
El puerto USB o Universal Serial Bus (Bus Universal en Serie) es un puerto diseñado para conectar varios periféricos a una computadora. El puerto USB se encuentra en todas las computadoras modernas. Hay algunos conectores diferentes que se usan para conectar los dispositivos.
Conectores USB 3.0.

miércoles, 18 de abril de 2018

Mi ejemplo de macro (Cambiar el color de la pantalla)




azul macro
    mov ah,0
    mov al,3h
    int 10h
    mov ax,0600h
    mov bh,0fh
    mov cx,0000h
    mov dx,184Fh
    int 10h
    mov ah,02h
    mov bh,00
    mov dh,00
    mov dl,00
    int 10h
    mov ah,06h
    mov bh,1fh  ; esto es para el color de fondo y las letras
    mov cx,0000h
    mov dx,184fh
    int 10h
 
    mov ax,4c00h ; esto lo que hace es que una vez que haya cambiado la pantalla a color azul, se termina el programa
    int 21h
endm

morado macro
    mov ah,06h
    mov bh,5eh    ;esto es lo que cambia al procedimiento anterior
    mov cx,0000h
    mov dx,184fh
    int 10h
    mov ax,4c00h
    int 21h
endm

color macro
    mov ah,06h
    mov bh,3fh    ;esto es lo que cambia al procedimiento anterior
    mov cx,0000h
    mov dx,184fh
    int 10h
    mov ax,4c00h
    int 21h
endm

                       
                   


.model small

.stack
.data
titulo db 13,10,' CAMBIAR FONDO DE PANTALLA',13,10,'$'
mensaje1 db 'Presione ENTER si quiere la pantalla azul. ',13,10,'$'
mensaje2 db 'Presione la tecla 2 si quiere morado',13,10,'$'
mensaje3 db 'Presione la tecla 3 si quiere azul bajito',13,10,'$'


.code

inicio:
;-------------------------------------------- para preparar pantalla
mov ah,0
 mov al,3h  ;modo texto
 int 10h    ;interrupcion de video

 mov ax,0600h  ;limpiar la pantalla
 mov bh,0fh  ; pone el color de fonodo negro
 mov cx,0000h  ; esto es para las esquinas
 mov dx,184Fh
 int 10h
 mov ah,02h
 mov bh,00
 mov dh,00
 mov dl,00
 int 10h

;------------------------------------------------- mostrar mensajes
mov ax,@data  ;esto es la parametrizacion
mov ds,ax

lea dx,titulo   ;en estas lineas mostramos el titulo
mov ah,9h
int 21h

lea dx,mensaje1 ; mostramos el mensaje
mov ah,9h
int 21h

lea dx,mensaje2 ; mostramos el mensaje
mov ah,9h
int 21h

lea dx,mensaje3 ; mostramos el mensaje
mov ah,9h
int 21h


;--------------------------------------------------- capturacion de teclas
mov ah,08  ; pausa y capyuta la tecla que presione el usuario
 int 21h   ; esta interrupcion es para capturar

 cmp al,13    ; verifica si se presiono enter
 je llamarAzul  ;manda llamar a la etiqueta correspondiente

cmp al,50   ;aqui verifica si se ingreso el numero 2 (el numero dos es el numero 50 en ascii)
je llamarMorado ;manda llamar la etiqueta correspondiente

cmp al,51   ;aqui verifica si se ingreso el numero 2 (el numero dos es el numero 50 en ascii)
je llamar ;manda llamar la etiqueta correspondiente

jmp fin  ;si no se realiza nada, manda llamar a la etiqueta "fin"

;------------------------Etiquetas:

fin:
mov ax,4c00h
int 21h

llamarAzul:  ; manda llamar rl procedimiento Azulproc
azul

llamarMorado:  ; manda llamar el procedimiento Moracoproc
morado

llamar:  ; manda llamar el procedimiento Moracoproc
color

ret
;--------------------------------------------------------------------------------------------------------------------------------------------------

jueves, 12 de abril de 2018

Posicionar un caracter en las coordenadas dadas por el usuario

gotoxy macro fila,col ;declaracion de macro gotoxy parametros:fila,col
mov ah,02h   ;complemento interrupcion 10h modo video colocacion cursor
mov dh,fila  ;coordenada x para colocacion de cursor dh
mov dl,col   ;coordenada y para colocacion de cursor dl
mov bh,0h   
int 10h      ;interrupcion de video
endm   ;fin de macro

pantalla macro que  ;declaracion de macro pantalla parametro que
mov ah,02h       ;complemento interrupcion 21h
mov dl,que   ;que es el caracter capturado
int 21h      ;interrupcion DOS
endm  ;fin de macro

imprime macro eztryng  ;declaracion de macro con parametro eztryng
mov dx,offset eztryng  ;coloca mensajes en dx
mov ah,9               ;complemento para la interrupcion 21h para impresion de txto
int 21h                ;interrupcion DOS
endm                   ;fin de macro

.data    ;variables
mensaje DB "INGRESE UN CARACTER: ",13,10,"$"
mensaje2 DB "INGRESE X del 0 al 9: ",13,10,"$"
mensaje3 DB "INGRESE Y del 0 al 9: ",13,10,"$"
caracter DB 40
varx DB ?
vary DB ?
vtext db 100 dup('$')

.code

startup:
mov ax,@data  ;asignacion de datos ax
mov ds,ax     ;asignacion de datos al segmento de datos

imprime mensaje ;llama macro imprime con el parametro 'mensaje'
mov si,00h      ;limpia el apuntador SI


 leer:          ;declaracion de metodo leer   
 mov ax,0000    ;limpia ax
 mov ah,01h     ;complemento para interrupcion 21h captura
 int 21h        ;interrupcion DOS
 mov caracter[si],al ;guarda el dato capturado en variable caracter
 inc si         ;incrementa apuntador si
 cmp al,0dh     ;compara si la ultima tecla presionada fue Intro
 ja coordenadas ;si cumple brinca a coordenadas
 jb leer        ;sino cumple vuelve a ejecutar leer

coordenadas:    ;declaracion de metodo coordenadas
mov dx,offset caracter ;coloca en dx el caracter ingresado
mov ah,0ah             ;complemento de interrupcion 21h lee cadena de texto por teclado
int 21h                ;interrupcion DOS
imprime caracter       ;llama macro imprime con parametro caracter
imprime mensaje2       ;llama macro imprime con parametro mensaje2
mov ah,01h             ;complemento de interrupcion 21h Eco de un caracter
int 21h                ;interrupcion DOS
sub al,30h             ;resta 30h para convertir al valor numerico
mov bl,al              ;mueve al a bl
mov varx,al            ;guarda al en varx (coordenada x)
imprime mensaje3       ;//////////////se repite/////////
mov ah,01h
int 21h
sub al,30h
mov bl,al
mov vary,al            ;////////////////////////
mov ax,0003h           ;complemento interrupcion 10h modo texto
int 10h                ;interupccion de video

gotoxy vary,varx       ;llama macro gotxy con los parametros vary y varx como columna y fila
pantalla caracter[0]   ;llama macro pantalla con el caracter capturado como parametro

mov ah,01h             ;complemento de interrupcion 21h Eco de un caracter
int 21h                ;interrupcion DOS
mov ax,4c00h           ;complemento interrupcion 21h fin de probrama
int 21h                ;interrupcion DOS
end startup            ;fin de funcion principal

miércoles, 11 de abril de 2018

Diferencias entre procedimientos y macros



Las macros son mas rápidas porque se ejecutan en linea en un programa y los procedimientos son mas lentos a la hora de ejecutar el programa.
Las macros pueden pasar y recibir parámetros.
La escritura de una macro es simple en cambio la de los procedimientos es mas compleja.
Los procedimientos ayudan a reducir el código y los macros lo hacen mas grande.

Ejemplo macros:


Programa de multiplicación de números de 2 cifras



;EMU8086
.model small ;Modelo de memoria
.stack

.data  ;Definicion de datos(variables), donde se almacenara informacion
.code 
   ;Variables del primer numero ingresado
   unidades_n1      db ?
   decenas_n1       db ?
  
   ;Variables del segundo numero ingresado
   unidades_n2      db ?
   decenas_n2       db ?
  
   ;Variables temporales para los resultados de la primera multiplicacion
   res_temp_dec_n1  db ?
   res_temp_cen_n1  db ?
  
   ;Variables temporales paara los resultados de la segunda multiplicacion
   res_temp_dec_n2  db ?
   res_temp_cen_n2  db ?
  
   ;Variables para los resultados
   res_unidades     db ?
   res_decenas      db ?
   res_centenas     db ?
   res_uni_millar   db ?
  
   ;Variable de acarreo en multiplicacion
   acarreo_mul      db 0
  
   ;Variable de acarreo en suma
   acarreo_suma     db 0
  
.startup
   ;cls
   mov ah,00h         ;Function(Set video mode)
   mov al,03          ;Mode 80x25 8x8 16
   int 10h            ;Interruption Video

   mov ah,01h         ;Function(character read)
   int 21h            ;Interruption DOS functions
   sub al,30h         ;ajustamos valores
   mov decenas_n1,al  ;[chr1].chr2 * chr3 = ac.r1.r2

   mov ah,01h         ;Function(character read)
   int 21h            ;Interruption DOS functions
   sub al,30h         ;Ajustamos valores
   mov unidades_n1,al ;chr1.[chr2] * chr3 = ac.r1.r2

   mov ah,02h         ;Function(character to send to standard output)
   mov dl,'*'         ;Character to show
   int 21h

   mov ah,01h         ;Function(Read character)
   int 21h            ;Interruption DOS Functions
   sub al,30h         ;Transform(0dec = 30hex)
   mov decenas_n2,al  ;chr1.chr2 * [chr3] = ac.r1.r2
  
   mov ah,01h         ;Function(Read character)
   int 21h            ;Interruption DOS Functions
   sub al,30h         ;Transform(0dec = 30hex)
   mov unidades_n2,al
  
   mov ah,02h         ;Character to send to standar output
   mov dl,'='         ;
   int 21h            ;Interruption DOS functions

   ;Realizamos las operaciones
  
   ;Primera multiplicacion  ; Explicacion utilizando la multiplicacion de 99*99 ->(n1*n2)
   mov al,unidades_n1       ; al=9
   mov bl,unidades_n2       ; bl=9
   mul bl                   ; 9*9=81 -> (al=81)
   mov ah,00h               ;
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_mul,ah       ; acarreo_mul = 8
   mov res_unidades,al      ; res_unidades= 1 -> Reultado de unidades
  
   ;Segunda multiplicacion
   mov al,decenas_n1        ; al=9
   mov bl,unidades_n2       ; bl=9
   mul bl                   ; 9*9=81 -> (al=81)
   mov res_temp_dec_n1,al   ; res_temp_dec_n1= 81
   mov bl,acarreo_mul       ; bl= 8
   add res_temp_dec_n1,bl   ; res_temp_dec_n1= 81+8= 89
   mov ah,00h               ;
   mov al,res_temp_dec_n1   ; al= 89
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov res_temp_cen_n1,ah   ; res_temp_cen_n1= 8 
   mov res_temp_dec_n1,al   ; res_temp_dec_n1= 9    
   
   ;Tercera multiplicacion  ; Resultado actual = 000>1
   mov al,unidades_n1       ; al= 9
   mov bl,decenas_n2        ; bl= 9
   mul bl                   ; 9*9=81 -> (al=81)
   mov ah,00h               ;
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_mul,ah       ; acarreo_mul= 8
   mov res_temp_dec_n2,al   ; res_temp_dec_n2= 1
                            ;
   mov bl, res_temp_dec_n1  ; bl= 9
   add res_temp_dec_n2,bl   ; res_temp_dec_n2= 1+9= 10
   mov ah,00h               ;
   mov al, res_temp_dec_n2  ; al = 10
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_suma, ah     ; acarreo_suma = 1
   mov res_decenas,al       ; res_decenas  = 0 -> Reultado de decenas
  
   ;Tercera multiplicacion  ; Resultado actual = 00>01
   mov al,decenas_n1        ; al= 9
   mov bl,decenas_n2        ; bl= 9
   mul bl                   ; 9*9=81 -> (al=81)
   mov res_temp_cen_n2,al   ; res_temp_cen_n2= 81
   mov bl,acarreo_mul       ; bl= 8
   add res_temp_cen_n2,bl   ; res_temp_cen_n2= 89
   mov ah,00h               ;
   mov al,res_temp_cen_n2   ; al= 89
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov res_uni_millar,ah    ; res_uni_millar = 8
   mov res_temp_cen_n2,al   ; res_temp_cen_n2= 9
                            ;
   mov bl, res_temp_cen_n1  ; bl= 8
   add res_temp_cen_n2, bl  ; res_temp_cen_n2= 17
   mov bl, acarreo_suma     ; bl= 1
   add res_temp_cen_n2,bl   ; res_temp_cen_n2= 17+1= 18
   mov ah,00h               ;
   mov al,res_temp_cen_n2   ; al= 18
   AAM                      ;
   mov acarreo_suma,ah      ; acarreo_suma= 1
   mov res_centenas,al      ; res_centenas= 8 -> Resultado de centenas
  
                            ; Resultado actual= 0>801
   mov bl, acarreo_suma     ; bl= 1
   add res_uni_millar, bl   ; res_uni_millar= 8+1= 9 -> Resultado de unidades de millar
                            ; Reultado actual 9801

   ;Mostramos resultados
   mov ah,02h
   mov dl,res_uni_millar
   add dl,30h
   int 21h
  
   mov ah,02h
   mov dl,res_centenas
   add dl,30h
   int 21h      

   mov ah,02H
   mov dl,res_decenas
   add dl,30h
   int 21h       

   mov ah,02H
   mov dl,res_unidades
   add dl,30h
   int 21h      
.exit
end

lunes, 5 de marzo de 2018

Ejemplo de armando en Emu8086 y Turbo Assambler

;emu
org 100h

.data
    mensaje db "Programa que utiliza loop e imprime del 0 al 9",13,10,"$"

.code 
inicio:
    mov ax,@data
    mov ds, ax
    mov dx,offset mensaje
    mov ah,09h
    int 21h

MOV DL, "0";se transfiere la letra 0 al registro de datos en el byte bajo
MOV CX, 10;se transfiere 10 al registro contador
PRINT_LOOP:;va a imprimir hasta acabar las 26 interaciones
MOV AH, 02;se transifiere 02 al acumulador de byte alto
INT 21h; se realiza la interrupcion del dato ascii leido desde el teclado
INC DL;siguiente caracter numerico
LOOP PRINT_LOOP;continua hasta acabar las 10 vueltas

ret



;Turbo

.model small
.stack 64

datos segment
    mensaje db "Programa que utiliza loop e imprime del 0 al 9",13,10,"$"
datos ends

codigo segment
  assume cs:codigo, ds:datos
inicio:
    mov ax,@data
    mov ds, ax
    mov dx,offset mensaje
    mov ah,09h
    int 21h

MOV DL, "0";se transfiere la letra 0 al registro de datos en el byte bajo
MOV CX, 10;se transfiere 10 al registro contador
PRINT_LOOP:;va a imprimir hasta acabar las 26 interaciones
MOV AH, 02;se transifiere 02 al acumulador de byte alto
INT 21h; se realiza la interrupcion del dato ascii leido desde el teclado
INC DL;siguiente caracter numerico
LOOP PRINT_LOOP;continua hasta acabar las 10 vueltas  
codigo ends

end inicio

Programa propio de ciclos



Código:

;Programa de ciclo   
;David Orlando Maldonado Lopez 

org 100h

.model small
.stack 64
    
.data  
    mensaje db 0ah, 0dh, 'solo puede imprimir el mensaje de 1-3 veces$'
    mensaje1 db 0ah, 0dh, 'imprime mensaje 1 vez$'
    mensaje2 db 0ah, 0dh, 'imprime mensaje 2 veces$'
    mensaje3 db 0ah, 0dh, 'imprime mensaje 3 veces$'
    
.code

inicio:
   lea dx,mensaje   ;imprimir mensaje
 mov ah,9h
 int 21h
  mov ah,08              ;pausa y espera a que el usuario precione una tecla
 int 21h                ;interrupcion para capturar

 cmp al,49       
 je llamar1     
 cmp al,50        
 je llamar2  
 cmp al,51         
 je llamar3  
 jmp fin

fin:
 mov ax,4c00h       ;funcion que termina el programa
 int 21h

llamar1:
call uno

llamar2:
call dos

llamar3:
call tres



uno proc near
mov cx, 1
ciclo:
mov ax, @data
mov ds, ax
mov dx, offset mensaje1
mov ah, 09h
int 21h
loop ciclo
mov ah, 04ch
int 21h  
uno endp

dos proc near
mov cx, 2
ciclo2:
mov ax, @data
mov ds, ax
mov dx, offset mensaje2
mov ah, 09h
int 21h
loop ciclo2
mov ah, 04ch
int 21h  
dos endp   

tres proc near
mov cx, 3
ciclo3:
mov ax, @data
mov ds, ax
mov dx, offset mensaje3
mov ah, 09h
int 21h
loop ciclo3
mov ah, 04ch
int 21h  
tres endp


end inicio

Capturas:


Practica en clase 1-Marzo-2018

Ciclos

Código:
;Programa de ciclo   
;David Orlando Maldonado Lopez 

org 100h

.model small
.stack 64
    
.data
    mensaje db 0ah, 0dh, 'imprime mensaje 5 veces$'

.code
inicio:
mov cx, 5
ciclo:
mov ax, @data
mov ds, ax
mov dx, offset mensaje
mov ah, 09h
int 21h
loop ciclo

mov ah, 04ch
int 21h


end inicio


Capturas:



martes, 27 de febrero de 2018

Programa con menú de opciones

pila segment stack 'stack'
db 100h dup (?)
pila ends
datos segment ;---------esta parte es el texto que se mostrara y las instrucciones para el usuario
titulo db 13,10,' CAMBIAR FONDO DE PANTALLA',13,10,'$'
mensaje1 db 'Presione ENTER si quiere la pantalla azul. ',13,10,'$'
mensaje2 db 'Presione la tecla 2 si quiere morado',13,10,'$'
mensaje3 db 'Presione la tecla 3 si quiere azul bajito',13,10,'$'
datos ends

codigo segment    ;segmento de codigo
assume cs:codigo, ss:pila, ds:datos

inicio:
;-------------------------------------------- para preparar pantalla
mov ah,0
 mov al,3h  ;modo texto
 int 10h    ;interrupcion de video

 mov ax,0600h  ;limpiar la pantalla
 mov bh,0fh  ; pone el color de fonodo negro
 mov cx,0000h  ; esto es para las esquinas
 mov dx,184Fh
 int 10h
 mov ah,02h
 mov bh,00
 mov dh,00
 mov dl,00
 int 10h

;------------------------------------------------- mostrar mensajes
mov ax,datos  ;esto es la parametrizacion
mov ds,ax

lea dx,titulo   ;en estas lineas mostramos el titulo
mov ah,9h
int 21h

lea dx,mensaje1 ; mostramos el mensaje
mov ah,9h
int 21h

lea dx,mensaje2 ; mostramos el mensaje
mov ah,9h
int 21h

lea dx,mensaje3 ; mostramos el mensaje
mov ah,9h
int 21h


;--------------------------------------------------- capturaci]on de teclas
mov ah,08  ; pausa y capyuta la tecla que presione el usuario
 int 21h   ; esta interrupcion es para capturar

 cmp al,13    ; verifica si se presiono enter
 je llamarAzul  ;manda llamar a la etiqueta correspondiente

cmp al,50   ;aqui verifica si se ingreso el numero 2 (el numero dos es el numero 50 en ascii)
je llamarMorado ;manda llamar la etiqueta correspondiente

cmp al,51   ;aqui verifica si se ingreso el numero 2 (el numero dos es el numero 50 en ascii)
je llamar ;manda llamar la etiqueta correspondiente

jmp fin  ;si no se realiza nada, manda llamar a la etiqueta "fin"

;------------------------Etiquetas:
; las eiquetas contienen procedimientos almacenados que se mandan llamar con la instruccion call

fin:
mov ax,4c00h
int 21h

llamarAzul:  ; manda llamar rl procedimiento Azulproc
CALL AZULPROC

llamarMorado:  ; manda llamar el procedimiento Moracoproc
CALL MORADOPROC

llamar:  ; manda llamar el procedimiento Moracoproc
CALL llamarcolor


;----------------------------------------------Proceso AZULPROC
AZULPROC PROC NEAR

;el procedimiento para ajustar la pantalla es casi igual
mov ah,0
 mov al,3h
 int 10h
 mov ax,0600h
 mov bh,0fh
 mov cx,0000h
 mov dx,184Fh
 int 10h
 mov ah,02h
 mov bh,00
 mov dh,00
 mov dl,00
 int 10h
;-------------------------- en esta parte se ajusta el color
mov ah,06h
mov bh,1fh  ; esto es para el color de fondo y las letras
mov cx,0000h
mov dx,184fh
int 10h

mov ax,4c00h ; esto lo que hace es que una vez que haya cambiado la pantalla a color azul, se termina el programa
int 21h
RET

AZULPROC ENDP ;--------Termina el proceso

;-------------------------------------------------Proceso MORADOPROC
MORADOPROC PROC NEAR
mov ah,06h
mov bh,5eh    ;esto es lo que cambia al procedimiento anterior
mov cx,0000h
mov dx,184fh
int 10h
mov ax,4c00h
int 21h
RET
MORADOPROC ENDP  ;--------Termina el proceso

llamarcolor PROC NEAR
mov ah,06h
mov bh,3fh    ;esto es lo que cambia al procedimiento anterior
mov cx,0000h
mov dx,184fh
int 10h
mov ax,4c00h
int 21h
RET
llamarcolor ENDP

codigo ends ;termina el segmento codigo
end inicio;termina la etiqueta Inicio

lunes, 26 de febrero de 2018

Programa que muestra 3 mensajes

Codigo:

datos segment
    nombre db 'David', 13, 10, '$'
    apellido db 'Maldoando', 13, 10, '$'
    tel db 'Telefono: 123 456 78 90', 13, 10, '$'
    control db 'No. de control: 007', 13, 10, '$'
datos ends

codigo segment
    assume cs:codigo, ds:datos
    
    inicio:
    
   mov ah, 06h
   mov bh, 6fh
   mov cx, 0000h
   mov dx, 184fh
   int 10h
   
   mov ax, datos
   mov ds, ax
   
   lea dx, nombre
   mov ah, 9h
   int 21h
   
   lea dx, apellido
   mov ah, 9h
   int 21h
   
   lea dx, tel
   mov ah, 9h
   int 21h
   
   lea dx, control
   mov ah, 9h
   int 21h       
   
   mov ax, 4c00h
   int 21h
   
codigo ends
end inicio
    







Lista de interripciones

https://drive.google.com/file/d/1Oyz09aRBjFBNcSDsa5msbiP-e13Kdp69/view

jueves, 22 de febrero de 2018

Programa con opciones para seleccionar color de fondo (Documentado)

Código:

pila segment stack 'stack'
db 100h dup (?)
pila ends
datos segment ;---------esta parte es el texto que se mostrara y las instrucciones para el usuario
titulo db 13,10,' CAMBIAR FONDO DE PANTALLA',13,10,'$' mensaje db 'Presione ENTER si quiere la pantalla azul. Si quiere morado, presione 2',13,10,'Para salir, presione cualquier tecla',13,10,'$'
datos ends

codigo segment    ;segmento de codigo
assume cs:codigo, ss:pila, ds:datos

inicio:
;-------------------------------------------- para preparar pantalla
mov ah,0
 mov al,3h  ;modo texto
 int 10h    ;interrupcion de video

 mov ax,0600h  ;limpiar la pantalla
 mov bh,0fh  ; pone el color de fonodo negro
 mov cx,0000h  ; esto es para las esquinas
 mov dx,184Fh
 int 10h
 mov ah,02h
 mov bh,00
 mov dh,00
 mov dl,00
 int 10h

;------------------------------------------------- mostrar mensajes
mov ax,datos  ;esto es la parametrizacion
mov ds,ax

lea dx,titulo   ;en estas lineas mostramos el titulo
mov ah,9h
int 21h

lea dx,mensaje ; mostramos el mensaje
mov ah,9h
int 21h

;--------------------------------------------------- capturaci]on de teclas
mov ah,08  ; pausa y capyuta la tecla que presione el usuario
 int 21h   ; esta interrupcion es para capturar

 cmp al,13    ; verifica si se presiono enter
 je llamarAzul  ;manda llamar a la etiqueta correspondiente

cmp al,50   ;aqui verifica si se ingreso el numero 2 (el numero dos es el numero 50 en ascii)
je llamarMorado ;manda llamar la etiqueta correspondiente

jmp fin  :si no se realiza nada, manda llamar a la etiqueta "fin"

;------------------------Etiquetas:
; las eiquetas contienen procedimientos almacenados que se mandan llamar con la instruccion call

fin:
mov ax,4c00h
int 21h

llamarAzul:  ; manda llamar rl procedimiento Azulproc
CALL AZULPROC

llamarMorado:  ; manda llamar el procedimiento Moracoproc
CALL MORADOPROC

;----------------------------------------------Proceso AZULPROC
AZULPROC PROC NEAR

;el procedimiento para ajustar la pantalla es casi igual
mov ah,0
 mov al,3h
 int 10h
 mov ax,0600h
 mov bh,0fh
 mov cx,0000h
 mov dx,184Fh
 int 10h
 mov ah,02h
 mov bh,00
 mov dh,00
 mov dl,00
 int 10h
;-------------------------- en esta parte se ajusta el color
mov ah,06h
mov bh,1fh  ; esto es para el color de fondo y las letras
mov cx,0000h
mov dx,184fh
int 10h

mov ax,4c00h ; esto lo que hace es que una vez que haya cambiado la pantalla a color azul, se termina el programa
int 21h
RET

AZULPROC ENDP ;--------Termina el proceso

;-------------------------------------------------Proceso MORADOPROC
MORADOPROC PROC NEAR
mov ah,06h
mov bh,5fh    ;esto es lo que cambia al procedimiento anterior
mov cx,0000h
mov dx,184fh
int 10h
mov ax,4c00h
int 21h
RET
MORADOPROC ENDP  ;--------Termina el proceso

codigo ends ;termina el segmento codigo
end inicio;termina la etiqueta Inicio


Capturas:




miércoles, 21 de febrero de 2018

Registros Apuntadores e Interrupción

Registro de Apuntador de Instrucciones (IP). Es de 16 bits y contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. El IP esta asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se esta ejecutando actualmente. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP.

Registros Apuntadores. Los registros SP (apuntador de la pila) Y BP (apuntador de base) están asociados con el registro SS y permiten al sistema accesar datos en el segmento de la pila.

  • Registro SP. El apuntador de la pila de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. Los procesadores 80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP. El sistema maneja de forma automática estos registros.

  • Registro BP. El BP de 16 bits facilita la referencia de parámetros, los cuales son datos y direcciones transmitidos vía pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP.

Registros Indice. Los registros SI y DI están disponibles para direccionamiento indexado y para sumas y restas.

  • Registro SI. El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI esta asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI.


  • Registro DI. El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI esta asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el EDI.

Prácticas del día 20-Febrero-2018




Practicas del día 19-febrero-2018






martes, 6 de febrero de 2018

EMU8086 - Registro de banderas

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.