.MODEL TINY
.DATA
Mascara1 db 11111110b
Mascara2 db 00000001b
Dato1 db 11111111b
Dato2 db 00000000b
.CADE
INICIO:
Mov cx,0000h ;CX=0;
Mov al,dato1 ;al=dato1
And al,mascara1 ;al=al and mascara1
Mov ah,dato2 ;ah=dato2
Or ah,mascara2 ;ah=ah or mascara2
Xor bx,bx ;bx=0
Not cx ;cx=not cx
Mov ax,4c00h
Int 21h
END INICIO
END
OTRO PROGRAMA
.MODEL TINY
.DATA
dato1 dw 10 ; variable de tipo entero
.CODE
INICIO: ; Punto de entrada al programa
mov ax,1 ; AX=1
mov bx,10 ; BX=10
shl ax,1 ; ax=ax*2
mov cx,3 ; contador igual a 3
shl ax,cl ; ax=ax*8
shr bx,1 ; bx=bx/2
mov cx,2 ;
shr bx,cl ; bx=bx/4
shl dato1,1 ; dato1=dato1*2
mov ax,1 ; ax=1
rol ax,1 ; rotar ax 1 vez
mov bx,-10 ; bx=-10
sal bx,1 ; bx=bx*2
mov ax,4c00h ; Terminar
int 21h ; Salir al dos
END INICIO
END
miércoles, 8 de septiembre de 2010
sábado, 4 de septiembre de 2010
ARQUITECTURA
Deber # 1
Realizar una caratula en el debug
¿Como utilizamos los blucle en Lenguaje Emsamblador?
Funcionamiento:
En ensamblador los bucle, condicionales, subrutinas y demás elementos se codifica de forma distinta
de cómo se hace en otros lenguajes de alto nivel. A continuación describiremos algunas técnicas útiles BUCLES:
Inicialización de un registro(a modo de contador) al nº de vueltas del bucle
Etiqueta: Primera instrucción del bucle
<resto de instrucciones dentro del bucle>
decrementar el contador
saltar a la etiqueta si el contador es mayor que cero
<instrucciones fuera del bucle>
Saltos condicionales:
Instrucción de comparación
Evaluar condición y si se cumple saltar a la etiqueta prefijada
<instrucciones para el caso de no cumplirse la condición>
saltar fuera del condicional
MACROS:
Declaración:
<nombre de la macro> Macro
<instrucciones de la macro>
endm.
BLUCLE SWITCH
El programa interpreta el valor de la variable almacenándolo en una zona de memoria temporal (oculta). Después lo compara con el valor seguido de cada case, y si coincide, realiza el flujo de acciones correspondientes,
hasta encontrar un break, con el que finalizará el Switch. Es muy importante saber que, en el momento en el que se realiza la accionI (para I < N), se ejecutarán todas las acciones entre I y N mientas no se encuentre la instrucción break.
Switch case
El switch no es tan popular como el if, pero se utiliza con regularidad en la programación. En principio la funcionalidad de un switch también se puede implementar con múltiples ifs anidados. En el caso de que hayan muchas acciones dependientes de muchos valores iniciales, es recomendable su uso, favoreciendo la switch es más legibilidad y rapidez en la programación
La nomenclatura
Switch( variable ){
case valor1: accion1; (*)
case valor2: accion2; (*)
...
case valorN: accionN; (*)
default: accionD; (**)
}
(**) La acción default es usada para los valores que no correspondieron en casos anteriores, y puede aparecer, aparecer sin acciónD, e incluso, con el break al final; aunque su compilación optimizada no lo suele tratar.
(*) En estos huecos, al final de las acciones accion1, accion2,... incluso después de la accionD, normalmente se suele usar un break para salir del switch. Su uso, generalizado, permite realizar programas que, por ejemplo, se comportan de diferente modo por cada entrada:
Switch( número )
{
case 0: escribir("No hay elementos.");
break;
case 1: escribir("Hay solo un elemento.");
break;
case default: escribir("Hay " número " elementos"); /* break; */
}
En ese ejemplo, es necesario el uso de los break, excepto el último (que está entre comentarios y por lo tanto no se ejecutará) para el correcto funcionamiento del programa que hemos realizado. Este lo que hace es, dependiendo si el número que llega por la variable número es 0, 1 u otro cualquiera, escribir que No hay elementos, Hay solo un elemento o Hay numero elementos respectivamente.
En cambio, el uso del switch puede ser interesante sin recurrir a los break al final de las acciones, por ejemplo, en este otro programa:
Switch( paso )
{
case 1: escribir("Paso 1 (ponerse cómodo) sin finalizar. ");
case 2: escribir("Paso 2 (regular espejos) sin finalizar. ");
case 3: escribir("Paso 3 (abrochar cinturón) sin finalizar. ");
case 4: escribir("Paso 4 (arrancar motor) sin finalizar. ");
}
usando la estructura Switch case:
switch( variable ){
case valor1:
case valor2:
accion12;
break;
case valor3:
case valor4:
accion34;
break;
default:
accionD;
}
También sirve, al aplicar Álgebra de Boole, para concatenaciones de ands sobre una misma variable para acciones de exclusión. Esto evita usar de forma iterativa en nuestros códigos la cadena variable == y los operadores lógicos and.
Blucle while
Mientras la condición se mantenga verdadera, el bloque de instrucciones dentro de las llaves se ejecutará "x" cantidad de veces. Es necesario que alguna vez la condición se haga falsa, pues de lo contrario se entraría en un ciclo infinito de repeticiones (bucle infinito) y el programa se consideraría bloqueado. Por lo tanto es necesario que en el bloque de instrucciones dentro de la estructura while, se ejecute alguna acción que en algún momento haga que la condición sea falsa
Un ejemplo del funcionamiento de la estructura de repetición while:
int num;
num = 0;
while (num<=10)
{
printf(“Repetición numero %d
”, num);
num = num + 1;
};
BLUCLE FOR
1)se inicializan las variables s en 0 y j en 1
2) el for hace repeticiones, partiendo desde 0 (j=0) hasta diez, y en cada vuelta suma 1 a j. Empieza con j 0, mientras j sea menor o igual a 10, va a realizar todo loq ue este dentro del for, y en cada vuelta suma 1 a J.
Esto significa que cada vuelta que de el for, j se ira incrementando en 1, por lo que teniendo encuentra el limite (10) dara un total de 11 vueltas.
el modelo del for es (inicio, fin, suma_iteracion).
Lo que esta adentro del for es una suma que se incrementa en cada vuelta.
Suscribirse a:
Entradas (Atom)