Ir al contenido principal

Ensamblador (Practicas)

Practica de multiplicacion en ensablador:
Utilizando el emu8086
Código:

org 100h

mov Al, 200 ;mov transfiere al AL acomulador de bajo nivel el 200
mov Bl, 4 ;mov transfiere al BL registro de bajo nivel el 4
mul Bl ;mul multiplica el BL registro de bajo nivel

ret ;retorno

Capturas:

Practica personal:
Leyendo el articulo de Microcomputadoras al detalle saque este ejemplo y lo documente para la mayor comprensión del lector, en esta práctica realizada que es "escribir" el alfabeto en mayúsculas y en minúsculas en la página 3-22 a 3-23 donde utilizan el termino print_loop que entendí que print es imprimir y el loop se utiliza para hacer una acción finita varias veces como una interacción, utilizando la letra a hasta la j y se me ocurrió completarlo con las 26 letras del alfabeto, utilizando ASCII como ayuda en el código para la impresión de las letras del alfabeto.

Código:
org 100h

MOV DL, "A";se transfiere la letra A al registro de datos en el byte bajo
MOV CX, 26;se transfiere 26 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;dato ascii leido desde el teclado
INC DL;siguiente caracter del alfabeto
LOOP PRINT_LOOP;continua

MOV DL, "a"
MOV CX, 26
PRINT_LOOP2:
MOV AH, 02
INT 21h
INC DL
LOOP PRINT_LOOP2

ret
Capturas:


Ejemplo sacado de la red:
Este ejemplo te pide un carácter el que sea para que puedas moverlo en pantalla.
Código:
;despues de que lo haya compilado en turbo assembler y tenga el archivo
;.obj, en la linea de comandos haga esto
;c:\borlandc\bin>tlink  "nombre".obj/tdc
;en este caso es cursor.obj
;C:\borlandc\bin>tlink cursor.obj/tdc
; "/tdc" significa que el programa es .com y no .exe


PROG SEGMENT PARA PUBLIC 'CODE'
     ASSUME cs:PROG,ss:PROG,ds:PROG
     ORG 0100h
programa:
     jmp codigo
car    DB 0
pox    DB 0
poy    DB 0
xa     DB 0
ya     DB 0
aviso DB 'Escriba un caracter y muevalo con las flechas: ','$'
codigo:
   mov  ah,02h
   mov  bh,00h
   mov  dh,5
   mov  dl,5
   int  10h
   mov  ah,9
   mov  dx,OFFSET aviso
   int  21h
   mov  ah,01h
   int  21h
   mov  car,al
   mov  ah,03h
   mov  bh,00h
   int  10h
   mov  pox,ch
   mov  poy,dh
   dec  pox
   mov  ah,05h
   mov  al,01h
   int  10h
bucle:
   mov  ah,02h
   mov  bh,01h
   mov  dh,ya
   mov  dl,xa
   int  10h
   mov  ah,02h
   mov  dl,32
   int  21h
   mov  ah,02h
   mov  bh,01h
   mov  dh,poy
   mov  dl,pox
   int  10h
   mov  ah,02h
   mov  dl,car
   int  21h
   mov  ah,02h
   mov  bh,01h
   mov  dh,poy
   mov  dl,pox
   int  10h
   mov  xa,dl
   mov  ya,dh
   mov  ah,00h
   int  16h
   cmp  ah,75
   jnz  noleft
   dec  pox
   jmp  bucle
noleft:
   cmp  ah,72
   jnz  nodown
   dec  poy
   jmp  bucle
nodown:
   cmp  ah,77
   jnz  noright
   inc  pox
   jmp  bucle
noright:
   cmp  ah,80
   jnz  noup
   inc  poy
   jmp  bucle
noup:
   cmp  al,27
   jz   fin
   jmp  bucle
fin:
   mov  ah,4ch
   mov  al,00h
   int  21h

PROG ENDS
     END programa
Capturas:

Practicas del video:
Provocar un acarreo para activar la bandera CF
Activar la bandera ZF cuando el resultado de una operacion en 0:
Activar la bandera SF por un resultado negativo:
y por ultimo activar la bandera OF de desbordamiento

Repaso en clase:
Capturas:



Trabajo en clase:
Código:
.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
Captura:
Declaración de constantes:


Practicas en clase:
contexto:

Practica del video:


Practica en clase 3 mensajes:

Emu8086:

Codigo:
datos segment
    mensaje db 10,13, "Juan Aramndo Monreal Vela",'$'
    mensaje2 db 10,13, "armandovela123@gmail.com",'$'
    mensaje3 db 10,13, "86812539",'$' 
datos ends   

codigo segment         
    assume cs:codigo
    inicio:
    mov ah,06h
    mov bh,9fh
    mov cx,0000h
    mov dx,184fh
 
    int 10h
 
    mov ah,02h
    mov bh,00h
    mov dx,000h
    int 10h
 
    mov ax,datos
    mov ds, ax
    lea dx,mensaje
    mov ah,9h
 
    int 21h
    lea dx,mensaje2
    mov ah,9
    int 21h
 
    lea dx,mensaje3
    mov ah,9
    int 21h
 
    mov ax,4c00h
    int 21h
codigo ends
end inicio

Captura:
Tasm:

Practica en clase (funciones adicionales):
Código:
datos segment
    titulo db 13,10,'CAMBIAR FONDO DE PANTALLA y menu ','$'
    mensaje db 13,10, '1.-Pantalla Azul y letras Rosas',13,10,'2.-Pantalla Morada y Letras Amarillas ',13,10,'3.-Pantalla Aqua y Letras Celestes',13,10,'4.-Pantalla Roja y Letras Verdes',13,10,'5.-Hacer una suma',13,10,10,'Para salir, presione cualquier tecla...',13,10,'$'
datos ends
       
arit segment
        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= ",'$'
arit ends           
       
codigo segment ;segmento de codigo
assume cs:codigo, ss:pila, ds:datos
    inicio:
        ;----------------------------------------------------------  PREPARAR PANTALLA
        mov ah,0
        mov al,3h ; Modo Texto
        int 10h   ; Interrupcion de Video
        mov ax,0600h; Limpiar Pantalla
        mov bh,0fh ; O Color de fondo negro, el color de letra blanco
        mov cx,0000h
        mov dx,184Fh
        int 10h
        mov ah,02h
        mov bh,00
        mov dh,00
        mov dl,00
        int 10h
        ;----------------------------------------------------------  Muestra el mensaje
            llamaropciones:   ;hago una funcion para llamar al titulo y mensaje las veces quese pida
            call op
          ;  ----------------------------------------------------------  CAPTURA DE TECLAS
         
            llamarcam:;hice esta funcion para poder llamarlo las veces que sea necesario
            call cam  ;estara cambiando segun lo que pidas
         
            cam proc near
             mov ah,08
             int 21h
             cmp al,49
             je llamarAzul
            cmp al,50
            je llamarMorado
            cmp al,51
            je llamarAqua
            cmp al,52
            je llamarRojo
            cmp al,53
            je llamarari
            jmp fin

            fin:
            mov ax,4c00h
            int 21h
            llamarAzul:
            CALL AZULPROC
            llamarMorado:
            CALL MORADOPROC
            llamarAqua:
            CALL AQUAPROC
            llamarRojo:
            CALL ROJOPROC
            llamarari:
            call aritm
            ret
            cam endp
         
            op proc near
                mov ax,datos
                mov ds,ax
                lea dx,titulo
                mov ah,9h
                int 21h
                lea dx,mensaje
                mov ah,9h
                int 21h
            ret
            op endp
         
            ;****************************** STORE PROCEDURE AZUL
            AZULPROC PROC NEAR
            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,1dh
            mov cx,0000h
            mov dx,184fh
            int 10h
            mov ax,4c00h
            call op
            call cam
            AZULPROC ENDP
            ;****************************** STORE PROCEDURE Morado
            MORADOPROC PROC NEAR
            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,5eh
            mov cx,0000h
            mov dx,184fh
            int 10h
            mov ax,4c00h
            call op
            call cam
            RET
            MORADOPROC ENDP
            ;****************************** STORE PROCEDURE AQUA
            AQUAPROC PROC NEAR
            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,3bh
            mov cx,0000h
            mov dx,184fh
            int 10h
            mov ax,4c00h
            call op
            call cam
            int 21h
            RET
            AQUAPROC ENDP
         
            ROJOPROC PROC NEAR
             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,4ah
            mov cx,0000h
            mov dx,184fh
            int 10h
            mov ax,4c00h
            call op
            call cam         
            RET
            ROJOPROC ENDP
         
            ;------------------- suma de dos numeros :v

aritm proc near
    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,9dh
    mov cx,0000h
    mov dx,184fh
    int 10h
    ;Direccionamiento al segmento de datos
    mov ax, arit
    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
    call op
    call cam
    int 21h
aritm endp
            codigo ends
             end inicio

Capturas:



Ejercicio loop con numeros:
Código:
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

Captura:

Programa con macros:

Código:
org 100h

inicio macro   ;declaramos la macro, le damos el nombre de inicio
  mov ax,@data   ;Cargamos el segmento de datos.
  mov ds,ax
  mov dx,ax
endm

imprime macro numero  ;Nuestra segunda macro se llama imprime, nuestro parametro es numero
  mov ah,02h
  mov dl,numero  ;Indica que mueva al registro DL lo que pasamos como parametro.
  add dl,2Fh  ;suma 2Fh para imprimir el numero real.
  int 21h
endm

.data                                                                 
    mensaje db "Programa de macro que imprime del 9 al 0",13,10,"$"
    mensaje2 db 13,10, "Loop que imprime del 0 al 9",13,10,"$"
    num db 0 ;declaramos nuestra variable.
 
.code
    mov cx,10
    lea dx,mensaje
    mov ah,09h
    int 21h   
inicio:
    mov num,cl
    imprime num ;Llamamos al macro con el valor de nuestra variable.
    loop inicio ;repite ciclo 
 
    lea dx,mensaje2
    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

end

Capturas:


programas vistos en clase:

Código 1:
gotoxy macro fila,col ;en esta macro recibe dos paramentros de fila y columna
    mov ah,02h
    mov dh,fila ;pone el valor de x en el registro de datos alto
    mov dl,col ;pone el valor y en el registro bajo
    mov bh,0h  ;registro base
    int 10h ;interupcion para para el modo de pantalla
endm

pantalla macro que ;segunda macro que resibe de parametro
    mov ah,02h
    mov dl,que ;caracter que aparecera en pantalla
    int 21h
endm

.model small
.data
.code
startup:;inicio del programa
    mov ax,@data
    mov ds,ax
    mov ax,0003h
    int 10h
    gotoxy 10,10 ;se mandan las variables para posicionar el caracter
    pantalla 41h ;es el caracter que aparecera en pantalla 0241h=A en ascii
    mov ah,01h
    int 21h
    mov ax,4c00h
    int 21h
end startup;finaliza

captura:

Código 2:
gotoxy macro fila,col ;en esta macro recibe dos paramentros de fila y columna
    mov ah,02h
    mov dh,fila ;pone el valor de x en el registro de datos alto
    mov dl,col ;pone el valor y en el registro bajo
    mov bh,0h  ;registro base
    int 10h ;interupcion para para el modo de pantalla
endm

pantalla macro que ;segunda macro que resibe de parametro
    mov ah,02h
    mov dl,que ;caracter que aparecera en pantalla
    int 21h
endm

imprime macro eztryng ;tercer macro este imprimira los mensajes del data y recibe una variable la cual sera el mensaje a imprimir en pantalla
    mov dx,offset eztryng
    mov ah,9
    int 21h
endm

DATOS SEGMENT PARA PUBLIC
    mensaje DB "INGRESE UN CARACTER: ","$"
    mensaje2 DB 13,10, "INGRESE X del 0 al 9: ","$"
    mensaje3 DB 13,10, "INGRESE Y del 0 al 9: ","$"
    caracter DB 40 ;vector que almacenara
    varx DB ? ;variable que recibe gotoxy
    vary DB ? ;variable que recibe gotoxy
    vtext db 100 dup('$') ;vector que no se usa
DATOS ENDS

CODIGO SEGMENT PARA PUBLIC 'code'
    ASSUME CS:CODIGO,DS:DATOS
    startup:
    mov ax,DATOS
    mov ds,ax
imprime mensaje;se manda la variable mensaje para ser impreso en pantalla
    mov si,00h
leer:
    mov ax,0000
    mov ah,01h
    int 21h
    mov caracter[si],al;aqui se llena el vector
    inc si;incremeta con cada caracter
    cmp al,0dh ;se repite el ingreso de datos hasta que se tecle enter
    ja leer
    jb leer
imprime mensaje2;se manda el segundo mensaje a imprimir
    mov ah,01h
    int 21h
    sub al,30h
    mov bl,al
    mov varx,al;aqui se guarda el primer dato que se mando
imprime mensaje3;se manda el tercer mensaje a imprimir
    mov ah,01h
    int 21h
    sub al,30h
    mov bl,al
    mov vary,al;se gurada el segundo dato que se pide
    mov ax,0003h
    int 10h
gotoxy vary,varx;manda las variables para poner en posicion en la pantalla
pantalla caracter;imprime el primer caracter
    mov ah,01h
    int 21h
    mov ax,4c00h
    int 21h
CODIGO ENDS
end startup;finaliza

captura:

Comentarios

Entradas populares de este blog

Juego del gato en python 2.7

Capturas: - Forma visual como se veria nuestro juego. - Para iniciarlo damos en el boton iniciar y te pedira el nombre de dos jugadores. - Muestra de como seria la partida e indica el turno de cada jugador. - Mensaje del ganador (juador 1). - Mensaje del ganador (jugador 2). - Hoy (11/09/2017) le he añadido mas diseño a la ventana del juego y este es el resultado. - El juego se puede reiniciar cuantas veces se quiera sin necesidad de estar abriendo y cerrando el programa, por sino lo notan el cursor cambia de diseño a un lapiz al ponerlo en los botones, espero les guste :3. Código: from Tkinter import * import tkMessageBox import tkSimpleDialog def bloq(): for i in range(0,9):    lisb[i].config(state="disable") def inij(): for i in range(0,9): lisb[i].config(state="normal") lisb[i].config(bg="lightgray") lisb[i].config(text="") tab[i] = "N" global nomj1,nomj2 #indica a q

IDE para python - brackets

La IDE que en lo personal me ha gustado mucho es brackets es open   source y muy como para trabajar, para descargar vamos a su pagina oficial:  http://brackets.io La descargamos y procedemos a intalarlo la IDE pero les saldra diferentes a ustedes porque yo ya le he hecho modificaciones que le mostrare mas adelante como se hacen Para hacer que funcione mejor la interfaz que maneja brackets usaremos distintos plugins que mejores la vista de brackets ya tengo una lista hecha de lo plugins ponermos donde dice buscar y el nombre del plugin y las que mas nos interesan son estas y ya con eso tendriamos nuestra IDE configurada y lista para usarla.

Videojuego en 3D en pygame

Capturas del juego 3D expusto en clase: Carpeta del videojuego dando click  Aquí .