miércoles, 20 de noviembre de 2013
miércoles, 13 de noviembre de 2013
martes, 12 de noviembre de 2013
Actividad #12
En un lenguaje de su conocimiento debe Hacer un programa para imprimir 100 veces un mensaje
1. Sin usar procedimientos
2. Usando llamadas a procedimientos
3. Incluya una funcion de tiempo que imprima el tiempo de inicio y el tiempo al final para medir el tiempo de ejecución
Codigo del programa en java:
package UnidadIII;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class interfaz implements Runnable {
public static void main(String[] args) {
String mensaje = "";
byte opcion = 1;
System.out.print("Repetir mensaje 100 veces\n Escribe el mensaje que deseas imprimir: ");
mensaje = new Scanner(System.in).next();
System.out.print("\nDesea ejecutarlo:\n Con procedimiento Teclea 1 \n Sin procedimiento Teclea 2\n: ");
opcion = new Scanner(System.in).nextByte();
Proc proc=new Proc();
new Thread(new interfaz()).start();
new Thread(proc).start();
if (opcion == 1) {
new interfaz().procedimiento(mensaje, 0);
} else if (opcion == 2) {
for (int i = 0; i < 100; i++) {
System.out.println(mensaje);
}
} else {
System.err.println("Opcion no valida!");
}
System.out.println("Tiempo: " + proc.paraYDevuelve()+ " milisegundos");
}
public void procedimiento(String mensaje, int iteracion) {
System.out.println(mensaje);
if (iteracion < 100) procedimiento(mensaje, iteracion + 1);
}
@Override public void run() {}
}
class Proc implements Runnable {
private boolean continua = true;
private int contador = 0;
public int paraYDevuelve() {
continua = false;
return contador;
}
@Override public void run() {
do {
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
}
contador++;
} while (continua);
}
}
Con procedimiento:
Sin procedimiento:
1. Sin usar procedimientos
2. Usando llamadas a procedimientos
3. Incluya una funcion de tiempo que imprima el tiempo de inicio y el tiempo al final para medir el tiempo de ejecución
Codigo del programa en java:
package UnidadIII;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class interfaz implements Runnable {
public static void main(String[] args) {
String mensaje = "";
byte opcion = 1;
System.out.print("Repetir mensaje 100 veces\n Escribe el mensaje que deseas imprimir: ");
mensaje = new Scanner(System.in).next();
System.out.print("\nDesea ejecutarlo:\n Con procedimiento Teclea 1 \n Sin procedimiento Teclea 2\n: ");
opcion = new Scanner(System.in).nextByte();
Proc proc=new Proc();
new Thread(new interfaz()).start();
new Thread(proc).start();
if (opcion == 1) {
new interfaz().procedimiento(mensaje, 0);
} else if (opcion == 2) {
for (int i = 0; i < 100; i++) {
System.out.println(mensaje);
}
} else {
System.err.println("Opcion no valida!");
}
System.out.println("Tiempo: " + proc.paraYDevuelve()+ " milisegundos");
}
public void procedimiento(String mensaje, int iteracion) {
System.out.println(mensaje);
if (iteracion < 100) procedimiento(mensaje, iteracion + 1);
}
@Override public void run() {}
}
class Proc implements Runnable {
private boolean continua = true;
private int contador = 0;
public int paraYDevuelve() {
continua = false;
return contador;
}
@Override public void run() {
do {
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
}
contador++;
} while (continua);
}
}
Con procedimiento:
Sin procedimiento:
Actividad #11
Ejemplos de programas usando procedimiento
Codigo fuente:
;En este ejemplo se muestra una rutina que imprime un string, esta rutina imprime un
;string el cual tiene un byte O como terminador.
.MODEL SMALL
.DATA
.STACK 100H
STR1 DB 'Esta es una prueba',0
.CODE
INICIO PROC NEAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
; DS y ES apuntan al segmento donde estan los strings
MOV DX,OFFSET STR1
CALL PUTS
MOV AH,4CH
INT 21H
INICIO ENDP
PUTS PROC NEAR
; Entrada:
; DS:DX = Segmento:Offset dei string terminado con O
; Llama:
; PUTCHAR
PUSH AX
PUSH DX
PUSH SI
PUSHF
CLD ; Asegurar que SI y DI incrementaran
MOV SI,DX ; SI Apunta ai inicio dei string
OTRO_CAR:
LODSB ; Carga en AL ei byte que esta en DS:SI
MOV DL,AL
CALL PUTCHAR
OR AL,AL
JNE OTRO_CAR
;
POPF
POP SI
POP DX
POP AX
RET
PUTS ENDP
PUTCHAR PROC NEAR
; Entrada:
; DL = Caracter a imprimir
PUSH AX
MOV AH,2 ; Servicio para imprimir un caracter
INT 21h ; Llamar a MS—DOS
POP AX
RET
PUTCHAR ENDP
END INICIO
Codigo fuente del programa:
.MODEL small
.STACK 256
.DATA
MSG1 DB 'Escriba una letra minuscula: $'
MSG2 DB 0Dh,0Ah,'En mayuscula es: '
CHAR DB ?,'$'
exCode DB 0
.CODE
MAIN PROC
;initialize ds
mov ax,@data ; Initialize DS to address
mov ds,ax ; of data segment
;print user prompt
mov ah,9 ; display string fcn
lea dx,MSG1 ; get first message
int 21h ; display it
;input a character and convert to upper case
mov ah,1 ; read char fcn
int 21h ; input char into AL
sub al,20h ; convert to upper case
mov CHAR,al ; and store it
;display on the next line
mov dx,offset MSG2 ; get second message
mov ah,9 ; display string function
int 21h ; display message and upper case
;return to DOS
Exit:
Ensamble y corrida del programa:
Programas usando macros
Codigo del primer programa:
Este programa utiliza macros de forma externa llamando al archivo que contiene las instrucciones de macros para eso necesitamos 2 archivos un archivo .txt y el archivo usual .asm ambos archivos deben estar dentro de la carpeta de masm.
Codigo del archivo txt:
inicializa macro
mov ax,@data
mov ds,ax
MOV cx, 6
Mov di,offset max
MOV SI,offset a
endm
Codigo del archivo .asm:
INCLUDE macro.txt
.MODEL SMALL
.STACK
.DATA
a DB 12,5,34,75,10,25
max DB 0
numero DB '12$'
diez DB 10
msgl DB 'Numero maximo = $'
msg2 DB 1O,13,'Caracter ASCII = $'
.CODE
Inicio:
inicializa
Comparar:
MOV AL,[SI]
MOV BL,[DI]
CMP BL,AL
JNB Incrementa
MOV [DI],AL
Incrementa:
INC SI
LOOP Comparar
;convertir el numero a cadena intoString
MOV AL,max
MOV AH,0
DIV diez
ADD AH,'0'
MOV numero[1],AH
ADD AL,'0'
MOV numero[0] ,AL
; desplegar mensaje
MOV DX,OFFSET msgl
MOV AH,09H
INT 21H
MOV DX,OFFSET numero
MOV AH,09H
INT 21H
MOV DX,OFFSET msg2
MOV AH,09H
INT 21H
MOV DL,[DI]
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
END Inicio
END
Ejemplo 2 de macros:
Proceso de enlazado y ensamble(ejecucion):
Codigo fuente:
;En este ejemplo se muestra una rutina que imprime un string, esta rutina imprime un
;string el cual tiene un byte O como terminador.
.MODEL SMALL
.DATA
.STACK 100H
STR1 DB 'Esta es una prueba',0
.CODE
INICIO PROC NEAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
; DS y ES apuntan al segmento donde estan los strings
MOV DX,OFFSET STR1
CALL PUTS
MOV AH,4CH
INT 21H
INICIO ENDP
PUTS PROC NEAR
; Entrada:
; DS:DX = Segmento:Offset dei string terminado con O
; Llama:
; PUTCHAR
PUSH AX
PUSH DX
PUSH SI
PUSHF
CLD ; Asegurar que SI y DI incrementaran
MOV SI,DX ; SI Apunta ai inicio dei string
OTRO_CAR:
LODSB ; Carga en AL ei byte que esta en DS:SI
MOV DL,AL
CALL PUTCHAR
OR AL,AL
JNE OTRO_CAR
;
POPF
POP SI
POP DX
POP AX
RET
PUTS ENDP
PUTCHAR PROC NEAR
; Entrada:
; DL = Caracter a imprimir
PUSH AX
MOV AH,2 ; Servicio para imprimir un caracter
INT 21h ; Llamar a MS—DOS
POP AX
RET
PUTCHAR ENDP
END INICIO
Ensamble del programa y corrida:
Programa 2 con procedimientoCodigo fuente del programa:
.MODEL small
.STACK 256
.DATA
MSG1 DB 'Escriba una letra minuscula: $'
MSG2 DB 0Dh,0Ah,'En mayuscula es: '
CHAR DB ?,'$'
exCode DB 0
.CODE
MAIN PROC
;initialize ds
mov ax,@data ; Initialize DS to address
mov ds,ax ; of data segment
;print user prompt
mov ah,9 ; display string fcn
lea dx,MSG1 ; get first message
int 21h ; display it
;input a character and convert to upper case
mov ah,1 ; read char fcn
int 21h ; input char into AL
sub al,20h ; convert to upper case
mov CHAR,al ; and store it
;display on the next line
mov dx,offset MSG2 ; get second message
mov ah,9 ; display string function
int 21h ; display message and upper case
;return to DOS
Exit:
Ensamble y corrida del programa:
Programas usando macros
Codigo del primer programa:
Este programa utiliza macros de forma externa llamando al archivo que contiene las instrucciones de macros para eso necesitamos 2 archivos un archivo .txt y el archivo usual .asm ambos archivos deben estar dentro de la carpeta de masm.
Codigo del archivo txt:
inicializa macro
mov ax,@data
mov ds,ax
MOV cx, 6
Mov di,offset max
MOV SI,offset a
endm
Codigo del archivo .asm:
INCLUDE macro.txt
.MODEL SMALL
.STACK
.DATA
a DB 12,5,34,75,10,25
max DB 0
numero DB '12$'
diez DB 10
msgl DB 'Numero maximo = $'
msg2 DB 1O,13,'Caracter ASCII = $'
.CODE
Inicio:
inicializa
Comparar:
MOV AL,[SI]
MOV BL,[DI]
CMP BL,AL
JNB Incrementa
MOV [DI],AL
Incrementa:
INC SI
LOOP Comparar
;convertir el numero a cadena intoString
MOV AL,max
MOV AH,0
DIV diez
ADD AH,'0'
MOV numero[1],AH
ADD AL,'0'
MOV numero[0] ,AL
; desplegar mensaje
MOV DX,OFFSET msgl
MOV AH,09H
INT 21H
MOV DX,OFFSET numero
MOV AH,09H
INT 21H
MOV DX,OFFSET msg2
MOV AH,09H
INT 21H
MOV DL,[DI]
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
END Inicio
END
Ejemplo 2 de macros:
Proceso de enlazado y ensamble(ejecucion):
La principal diferencia
entre una macro y un procedimiento es que en la macro se hace posible el paso
de parámetros y en el procedimiento no (esto es aplicable solo para el MASM,
hay otros lenguajes de Programación que si lo permiten). Al momento de
ejecutarse la macro cada parámetro es sustituido por el nombre o valor
especificado al momento de llamarla.
La principal diferencia
entre una macro y un procedimiento es que en la macro se hace posible el paso
de parámetros y en el procedimiento no (esto es aplicable solo para el MASM,
hay otros lenguajes de Programación que si lo permiten). Al momento de
ejecutarse la macro cada parámetro es sustituido por el nombre o valor
especificado al momento de llamarla.
Otra diferencia entre
una macro y un procedimiento es la forma de llamar a cada uno, para llamar a un
procedimiento se requiere el uso de una directiva, en cambio la llamada a las
macros se realiza como si se tratara de una instrucción del ensamblador.
lunes, 28 de octubre de 2013
Instrucciones de Desplazamiento, Rotación y Adeudos
Instrucciones de Desplazamiento, Rotación y Adeudos
SAL/SHL
Realiza
desplazamiento a la izquierda del primer operando tantos bits como
indique el segundo operando, introduciendo un 0 y guardando el bit que
sale en el bit CF del registro de estado.

Admite los siguientes formatos:
SAL/SHL reg, 1; desplaza 1 vez el contenido de reg
SAL/SHL mem, 1
SAL/SHL reg, CL; desplaza tantas veces el contenido de reg como indique CL.
SAL/SHL mem, CL
Afecta a los bit OF, CF del registro de estado.
SHR
Realiza
el desplazamiento a la derecha del operando, introduciendo un 0 y
guardando el resultado en el bit CF del registro de estado.
Admite los siguientes formatos:
SHR reg, 1; desplaza 1 vez el contenido de reg
SHR mem, 1
SHR reg, CL; desplaza tantas veces el contenido de reg como indique CL.
SHR mem, CL
Afecta a los bit OF, CF del registro de estado.
SAR
Realiza
el desplazamiento a la derecha del operando, repitiendo el bit de signo
y guardando el resultado en el bit CF del registro de estado.

Admite los siguientes formatos:
SAR reg, 1; desplaza 1 vez el contenido de reg
SAR mem, 1
SAR reg, CL; desplaza tantas veces el contenido de reg como indique CL.
SAR mem, CL
Afecta a todos los bit del registro de estado.
ROL
Realiza
la rotación a la izquierda de los bits del operando, ignorando el bit
CF del registro de estado, aunque en CF se almacena el bit que se rota.
Admite los siguientes formatos:
ROL reg, 1; desplaza 1 vez el contenido de reg
ROL mem, 1
ROL reg, CL; desplaza tantas veces el contenido de reg como indique CL.
ROL mem, CL
Afecta a los bit OF, CF del registro de estado.
ROR
Realiza
la rotación a la derecha de los bits del operando, ignorando el bit CF
del registro de estado, aunque en CF se almacena el bit que se rota.

Admite los siguientes formatos:
ROL reg, 1; desplaza 1 vez el contenido de reg
ROL mem, 1
ROL reg, CL; desplaza tantas veces el contenido de reg como indique CL.
ROL mem, CL
Afecta a los bit OF, CF del registro de estado.
RCL
Realiza la rotación a la izquierda de los bits del operando a través del bit CF (acarreo) del registro de estado.

Admite los siguientes formatos:
RCL reg, 1; desplaza 1 vez el contenido de reg
RCL mem, 1
RCL reg, CL; desplaza tantas veces el contenido de reg como indique CL.
RCL mem, CL
Afecta a los bit OF, CF del registro de estado.
RCR
Realiza la rotación a la derecha de los bits de operando a través del bit CF del registro de estado.

Admite los siguientes formatos:
RCR reg, 1; desplaza 1 vez el contenido de reg
RCR mem, 1
RCR reg, CL; desplaza tantas veces el contenido de reg como indique CL.
RCR mem, CL
Afecta a los bit OF, CF del registro de estado.
STC (pone a uno el indicador de acarreo)
Sintaxis: STC
Indicadores: OF DF IF TF SF ZF AF PF CF
- - - - - - - - 1
Pone a 1 el indicador de acarreo CF sin afectar a ningún otro indicador.
CLC (baja el indicador de acarreo)
Sintaxis: CLC
Indicadores: OF DF IF TF SF ZF AF PF CF
- - - - - - - - 0
Borra el indicador de acarreo (CF) sin afectar a ninguno otro.
jueves, 24 de octubre de 2013
Hacer manualmente la ejecución y comprobar con el debug
Codigo de nuestro programa:
.MODEL SMALL
.DATA
Var1 DW 10 ;Declaracián de una variable de tipo entero ;dw reserva una palabra en memoria o dos bytes.
;inicializada con 10.
.CODE ; begin
inicio: ;Punto de entrada al programa
Mov AX,5 ;AX=5
Mov BX,10 ;BX1O
Add AX,BX ;AX=AX+BX
Mov CX,8 ;CX=8
Add CX,Var1 ;CX=CX+Varl
Inc AX ;AX=AX+1
Dec BX ;BX=BX-1
Inc Var1 ;VarlVarl+l
Dec Var1 ;VanlVarl-1
Mov AX,4C00h ;Terminar programa y salir al DOS
Int 21h ; llamada al sistema operativo
END Inicio
END
Proceso de ensamblado y enlace
Despues ejecutamos el debug y abrimos los segmentos cs,ss y ds
Usamos -t para rastrear el programa
Hasta llegar a la interrupcion hasta que nos saque del debug
.MODEL SMALL
.DATA
Var1 DW 10 ;Declaracián de una variable de tipo entero ;dw reserva una palabra en memoria o dos bytes.
;inicializada con 10.
.CODE ; begin
inicio: ;Punto de entrada al programa
Mov AX,5 ;AX=5
Mov BX,10 ;BX1O
Add AX,BX ;AX=AX+BX
Mov CX,8 ;CX=8
Add CX,Var1 ;CX=CX+Varl
Inc AX ;AX=AX+1
Dec BX ;BX=BX-1
Inc Var1 ;VarlVarl+l
Dec Var1 ;VanlVarl-1
Mov AX,4C00h ;Terminar programa y salir al DOS
Int 21h ; llamada al sistema operativo
END Inicio
END
Proceso de ensamblado y enlace
Despues ejecutamos el debug y abrimos los segmentos cs,ss y ds
Usamos -t para rastrear el programa
Hasta llegar a la interrupcion hasta que nos saque del debug
Suscribirse a:
Entradas (Atom)
































