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

martes, 3 de septiembre de 2019

Hola Mundo en Arduino por pin 13

 
      
     
void setup() {
    pinMode(13,OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(2000);
  digitalWrite(13,LOW);
  delay(2000);
}




NOTA.- IMPORTANTE CHECAR EL PUERTO COM EN ADMINISTRADOR DE DISPOSITIVOS,
EN LA OPCIÓN DE HERRAMIENTAS MARCAR CON CHECK BOARD GENUINO/UNO


jueves, 7 de marzo de 2019

Ciclos Condicionales:

Mejorar el siguiente Codigo, puede usar la libreria 'emu8086.inc' y que diga
si la palabra no contiene la cadena
http://jbwyatt.com/253/emu/asm_tutorial_07.html   (Estructuras condicionales Loop y saltos)
       


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

cmp msg[si],"$"   ;si es el fin de la cadena mandar a final
 jz final      ; brinca si es igual

cmp msg[si], al   ;comparar si encuentra la primera letra de la cadena
 jne seguir    ;brica si es diferente


mov di, 1         ;poner en 1 di  

comprobar:

 mov al, msg2[di]
 mov bx, di
 cmp msg[si+bx], al     ;posicion de la letra coincidente + di, comparar con la cadena
 jne seguir             ;si no coincide mandar a seguir  


 inc di                 ;incrementar di para seguir recorriendo cadena

 cmp msg2[di],"$"       ;si es el fin de la cadena y el programa llego 
 jz resultado           ;aca quiere decir que la cadena es parte de la palabra


loop comprobar         ;bucle para recorrer cadena
                                                   
                                                   
seguir:  

 inc si       ;para seguir recorriendo la palabra

loop comienzo   ;bucle principal para recorrer palabra

resultado:

  mov dx, offset msg3    ;copiar msg3 a dx
  mov ah, 9              ;preparar ah con 9 para la interrupcion 21h
  int 21h                ;mostrar contenido en dx  
  
final: 



ret   

msg db "tecnologico$"
msg2 db "tec$"

msg3 db "Si se encuentra$"








       

martes, 19 de febrero de 2019

1.7 PROCESO DE ENSAMBLADO Y LIGADO

1.7 PROCESO DE ENSAMBLADO Y LIGADO

Para poder crear un programa se requieren varias herramientas: Primero un editor para crear el programa fuente. Segundo un compilador que no es más que un programa que “traduce” el programa fuente a un programa objeto. Y tercero un enlazador o linker , que genere el programa ejecutable a partir del programa objeto.

miércoles, 13 de febrero de 2019

Mult Ejemplo 2

 
      
   .model small ;Modelo de memoria m?s utilizado
.stack

.data        ;definición de datos(variables), donde se almacenara información
.code
   chr1  db ? ;primer digito
   chr2  db ? ;segundo digito
   chr3  db ? ;multiplo
   chr4  db ?
   r1    db ? ;resultado 1
   r2    db ? ;resultado 2
   r3    db ?
   r4    db ?
   ac    db 0 ;acarreo
   ac1   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) Guarda en AL
   int 21h        ;Interruption DOS functions
   sub al,30h     ;ajustamos valores
   mov chr1,al    ;[chr1].chr2 * chr3 = ac.r1.r2

   mov ah,01h     ;Function(character read) Guarda en AL
   int 21h        ;Interruption DOS functions
   sub al,30h     ;Ajustamos valores
   mov chr2,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) Guarda en AL
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr3,al    ;chr1.chr2 * [chr3] = ac.r1.r2
  
   mov ah,01h     ;Function(Read character) Guarda en AL
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr4,al    ;chr1.chr2 * [chr3] = ac.r1.r2

   mov ah,02h     ;Character to send to standar output
   mov dl,'='     ;
   int 21h        ;Interruption DOS functions

   ;Realizamos operaci?n   
  
   mov al,chr4  ;unidad del segundo numero
   mov bl,chr2  ;unidad del primer numero
   mul bl       ;multiplicar
   mov ah,0     ;limpiamos ah0
   aam          ;separamos de hex a dec
   mov ac1,ah   ;decenas del primera multiplicacion
   mov r4,al    ;unidades del primera multiplicacion
            
   mov al,chr4  ;unidades del segundo numero
   mov bl,chr1  ;decentas del primer numero
   mul bl       ;multiplicar
   mov r3,al    ;movemos el resultado de la operacion a r3
   mov bl,ac1   ;movemos el acarreo a bl
   add r3,bl    ;sumamos resultado mas acarreo
   mov ah,00h   ;limpiamos ah por residuos
   mov al,r3    ;movemos el resultado de la suma a al
   aam          ;separamos  de hex a dec
   mov r3,al    ;guardamos unidades en r3
   mov ac1,ah   ;guardamos decenas en ac1
  
      

   mov al,chr3    ;al = chr3
   mov bl,chr2    ;bl = chr2
   mul bl         ;AL = chr3*chr2 (BL*AL)
   mov Ah,0h      ;
   AAM            ;ASCII Adjusment
   mov ac,AH      ;ac = AH (Acarreo)
   mov r2,AL      ;r2 = AL       (Unidad del resultado)

   mov al,chr3    ;AL = chr3
   mov bl,chr1    ;BL = chr1
   mul bl         ;AL = chr1*chr3 (BL*AL)
   mov r1,al      ;r1 = AL       (Decena del resultado)
   mov bl,ac      ;BL = Acarreo anterior
   add r1,bl      ;r1 = r1+ac (r1 + Acarreo)
   mov ah,00h     ;
   mov al,r1      ;AL = r1 (Asignaci?n para el ajust)
   AAM            ;ASCII Adjustment
   mov r1,al      ;r1 = AL
   mov ac,ah      ;ac = AH (Acarreo para la Centena del resultado)
  
  
   ;suma final
   ;R4 resulta ser las unidades de mul y no se toma en cuenta ya que se pasa entero
  
  
   mov ax,0000h   ;limpiamos ax
  
   mov al,r3      ;movemos el segundo resultado de la primera mult a al
   mov bl,r2      ;movemos primer resultado de la segunda mult a bl
   add al,bl      ;sumamos
   mov ah,00h     ;limpiamos ah
   aam            ;separamos hex a dec
   mov r3,al      ;r3 guarda las decenas del resultado final
   mov r2,ah      ;r2 se utiliza como nuevo acarreo
  
   mov ax,0000h   ;''''
  
   mov al,ac1     ;movemos el acarreo de la primera mult a al
   mov bl,r1      ;movemos segundo resultado de la segunda mult a bl
   add al,r2      ;sumamos el nuevo  acarreo de la suma anterior  a al
   add al,bl      ;sumamos al a bl
   mov ah,00h     ;limpiamos el registro ah
   aam            ;separamos de hex a dec
   mov r1,al      ;r1 guarda las centenas
   mov r2,ah      ;ah se sigue utilizando como acarreo
  
   mov al,r2      ;movemos el acarreo a al
   mov bl,ac      ;movemos ac a bl
   add al,bl      ;sumamos al a bl
   ;aam            ;separamos hex a dec
   mov ac,al      ;mov al a ac como nuestro acarreo final
  
 
  
   ;Mostramos resultado
   mov ah,02h 
   mov dl,ac
   add dl,30h
   int 21h        ;Mostramos ac (millar)

   mov ah,02H
   mov dl,r1
   add dl,30h
   int 21h        ;Mostramos r1 (centena)

                 
  
   mov ah,02H
   mov dl,r3
   add dl,30h
   int 21h        ;Mostramos r3 (decena)
  
   mov ah,02H
   mov dl,r4
   add dl,30h
   int 21h        ;unidad
  
.exit
end   



jueves, 4 de octubre de 2018

Uso de Loop:



.model small
.stack 64

datos segment
    mensaje db "Ingresa el numero de veces que se repetira el mensaje (1-9)",13,10,'$'
    repetir db 13,10,"Repitiendo el ciclo $"
datos ends

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

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

    mov ax,4c00h
    int 21h                                
codigo ends
end inicio

    

.model small
.stack 64

.data
mensaje db "Ingresa el numero de veces que se repetira 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
    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

  

;Ejercicio loop con numeros:

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 el caracter 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


 
;Ejercicio loop con numeros:

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 ah,09h
    mov dx,offset mensaje
    int 21h
    

MOV DL, "0";se transfiere el caracter 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 10 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





.model small
.stack 64



.data

n1 db 0
n2 db 0
suma db 0
msg1 db "Dame el primer valor: ",'$'
msg2 db 10,13,"Dame el segundo valor: ",'$'
msg3 db 10,13,"suma= ",'$'

.code
begin proc far
    ;Direccionamiento 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 ;Convvierte el caracter a  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
    mov n2, al
  
    ;operacion de suma
    mov al, n1
    add al, n2
    add al, 30h
    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



org 100h



.model small

.stack 64

.data



mensaje db 10,13 ,"Dame un numero",10,13,"$"

mensaje2 db 10,13 ,"Dame un la potencia",10,13,"$"

n1 db 0

n2 db 0

n3 db 0

.code



inicio:     ;función inicio



 mov ax,@data ;Movemos el segmento data a ax

 mov ds,ax ; Movemos lo que esta en ax a ds

 mov dx,offset mensaje ;Imprimimos el primer mensaje parte 1

 mov ah, 09h ;Imprimimos el primer mensaje parte 2

 int 21h ;Imprimimos el primer mensaje parte 3



 mov ah,01     ;pausa y espera a que el usuario presione una tecla

 int 21h        ;interrupción para capturar

 sub al,30h   ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero

 mov n1,al ;Movemos lo que esta en al a la variable n1

 mov n3,al  ;Movemos lo que esta en al a la variable n3



 mov ah, 09h ;imprimimos el mensaje 2 parte 1

 mov dx,offset mensaje2  ;imprimimos el mensaje 2 parte 2

 int 21h  ;imprimimos el mensaje 2 parte 3

 mov ah,01     ;pausa y espera a que el usuario presione una tecla

 int 21h           ;interrupcion para capturar

 sub al,30h     ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero

 mov n2,al     ;Guardamos lo que el usuario preciono el n2





 mov cl,al ; movemos lo que esta en al a cl para decirle al ciclo cuantas vueltas va a dar

 sub cl,1 ;le restamos 1 para que no de una vuelta de mas





call ciclo ;llamada a ciclo



ciclo:  ;Funcion

 call ciclo1 ;llamada el procediemto 1



ciclo1 proc near : ;procedimiento ciclo

  mov al,n1 ;potencia parte 1

  mov bh,n3 ;potencia parte 2

  mul bh ;potencia parte 3



  mov n1,al



  loop ciclo1 ;loop a la funcion ciclo

 



  mov ax,4c00h ;fin parte 1

  int 21h; fin parte 2



fin: ;funcion fin

 mov ax,4c00h      ;funcion que termina el programa

 int 21h

end inicio




Manual 1 De Lenguaje de Interfaz

Abrir enlace

Manual 2 de Lenguaje de Interfaz ver interrupciones

Abrir enlace

martes, 8 de mayo de 2018

Progroma Ensamblador con macro:

       
bucle1 macro tama,x,y
    mov CX, tama 
    BUCLE:
        MOV DX, SI
        ADD DX, x
        MOV DH, y
        coloca ;este es el macro para colocar en la posicion la letra
        ;se guarda letra por letra
        MOV AL, [SI+OFFSET TITULO]
        ;guarda color por color
        MOV BL, [SI+OFFSET COLORES]
        color ;este es el macro que selecciona un color
        INC SI
        LOOPNZ BUCLE
endm 

color macro ;macro que selecciona el color
    MOV AH, 9
    INT BIOS
endm 

coloca macro;macro que selecciona una posicion
    MOV AH, 2
    INT BIOS
endm

.STACK 64
.MODEL SMALL

CR EQU 13
LF EQU 10
BIOS EQU 10H
DOS EQU 21H
TEXTO EQU 3
FIN EQU 4C00H

.DATA
;ponemos el texto que querramos mostrar
TITULO DB 'Agnax & Alizz Y pedrito',
;aqui va la lista de los colores
;del texto
colores DB 50H
DB 5fH
DB 50H
DB 5fH
DB 50H
DB 00H
DB 0f0H
DB 00h
DB 20H
DB 20H
DB 20H
DB 20H
DB 20H 
DB 00H
DB 0fH 
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH

.CODE
;esta zona es para poner el texto
COLO PROC FAR
MOV AX, @DATA
MOV DS, AX 
;Aquí se pone el macro del bucle
bucle1 25,30,12

MOV AH, 8
INT DOS 

coloca ;este es el macro para colocar en la posicion la letra
MOV AX, FIN

INT DOS 
COLO ENDP 
ret
















       

lunes, 12 de marzo de 2018

colores del BIOS

https://en.wikipedia.org/wiki/BIOS_color_attributes

Aportación de Jonnatan Guzman J. programa de colores en Turbo....

BIOS EQU 10H
DOS EQU 21H
FIN EQU 4C00H
TEXTO EQU 3

PILA SEGMENT STACK
    DB 64 DUP('PILA ')
PILA ENDS


DATOS SEGMENT
    assume ds:DATOS,SS:PILA,cs:codigo


TITULO DB 'YO Y MI PAREJA '
colores db 5bh
DB 5FH
DB 5BH
DB 5FH
db 5BH
DB 5FH
DB 5BH
DB 5FH
db 5BH
DB 5FH
DB 5BH
DB 5FH
db 5BH
DB 5FH
DB 5BH
DB 5FH
db 5BH
DATOS ENDS
codigo segment
    COLO PROC FAR
    mov AX, DATOS
       mov ds,ax
       mov ax,texto
       int bios
       mov cx,16
       xor si,si
       bucle:
       push cx
       mov dx,si
       add dx,35
       mov dh,12
       call coloca
       mov al,[si+offset titulo]
       mov bl,[si+offset colores]
       call color
       pop cx
       inc si
     
       loopnz bucle
       mov ah,8
       int dos
       xor dx,dx
       call coloca
       mov ax,fin
       int dos
       colo endp
   
    color proc
        mov ah,9
        xor bh,bh
        int bios
        ret
        color endp
    coloca proc
        mov ah,2
        xor bx,bx
        int bios
        ret
        coloca endp
        codigo ends
    end colo

Aportación Emmanuel Horta, Lourdes Brito.....programa de colores...

BIOS EQU 10H
DOS EQU 21H
FIN EQU 4C00H

.DATA
    TITULO DB 'Agnax & Alizz '
    COLORES DB 5BH
    DB 5FH
    DB 5BH
    DB 5FH
    DB 5BH
    DB 00H
    DB 0F0H
    DB 00H
    DB 09CH
    DB 09FH
    DB 09CH
    DB 09FH
    DB 09CH
    DB 00H
    DB 0CH
   
.CODE
    INICIO PROC NEAR:
    MOV AX, @DATA
    MOV DS, AX
    ;Esta parte de aqui no es necesaria
    INT BIOS
   
    MOV CX, 15
       
        BUCLE:
            ;Ponemos esto para no agarrar basura
            MOV DX,SI
            ADD DX,35 ;columna
            MOV DH, 12 ;renglon
            CALL COLOCA
            MOV AL, [SI+OFFSET TITULO]
            MOV BL, [SI+OFFSET COLORES]
            CALL COLOR
            INC SI
        LOOPNZ BUCLE
       
        MOV AH, 0
        INT DOS
        CALL COLOCA
        MOV AX, FIN
        INT DOS
   
    COLOR PROC
    MOV AH, 9
    INT BIOS
    RET
       
    COLOCA PROC
    MOV AH,2
    INT BIOS
    RET

END INICIO