Multiplicación de dos números ingresados por teclado (TURBO)
.model small ;se define el modelo de memoria
.stack ;se define el tamano de la pila
datos segment ;se define las variables
nombre db, 13,10, "Multiplicacion de dos numeros ingresados por teclado",13,10,13,10,'$' ;nombre del programa
mensaje1 db "Ingrese el primer numero:",13,10,'$' ;primer numero de la multiplicacion
mensaje2 db "Ingrese el 2do numero:",13,10,'$' ;segundo numero de la multiplicacion
mensaje3 db "El resultado de la multiplicacion es: ",'$' ;resultado en pantalla
suma db 0
n1 db 0
n2 db 0
byteh db 0
bytel db 0
salto db " ",13,10,'$' ;salto de fila
datos ends
codigo segment ;comienzo de codigo
assume cs:codigo, ds: datos
inicio proc far
mov ax,datos ;direccionamiento
mov ds,ax ;aqui es donde se guarda
;Limpiar Pantalla
mov ah, 00
mov al, 03h
int 10h
;Inicializacion de resgistros en 0
mov ah,02h
mov dl,00
int 10h
mov ah, 09h ;lee el mensaje
lea dx,nombre
int 21h
;Instrucciones para la realizacion de la multiplicacion.
mov ah,09h
lea dx,mensaje1 ;mensaje de solicitud del primer numero
int 21h
mov ah,01h ;lee los caracteres del teclado
int 21h
;Conversion del numero.
sub al,30h ;hace la conversion ascii
mov n1,al ; se pasaa la variable n1
int 21h
mov ah,09h ;impresion de caracteres
lea dx, salto ;saltar de fila
int 21h
mov ah,09h
lea dx, mensaje2 ;mensaje del segundo numero
int 21h
mov ah,01h ;leer y mostrar numero digitado
int 21h
sub al,30h ;conversion ASCII
mov n2,al ;se pasa ala variable n2
int 21h
;Operacion de sumas sucesivas
mov cl,n2
sumar:
mov al,n1 ;movemos el registro al a el valor del numero 1
add al,suma ;sumamos a al el valor de la suma
mov suma,al ;movemos a suma el valor del resultado
loop sumar
mov ah, 09h ;impresion de caracteres
lea dx, mensaje3 ;impresion del mensaje 3
int 21h
mov al,suma
aam ;corrige el resultado de la multiplicacion de datos ASCII en el registro ax
mov bytel,al
mov byteh,ah
mov ah,02h
mov dl,byteh
add dl,30h
int 21h
mov dl,bytel
add dl,30h
int 21h
mov ah,09h ;ipresion de caracteres
lea dx,salto ;salto de fila
int 21h
salir: ;retorna el mando al DOS
mov ax, 4c00h
int 21h
inicio endp
end inicio
martes, 20 de marzo de 2018
Operación Cadena1
Operación Cadena1
mov si, 0
comienzo:
mov al,msg2[0]
cmp msg[si],"$"
jz final
cmp msg[si], al
jne seguir
mov di, 1
comprobar:
mov al, msg2[di]
mov bx, di
cmp msg[si+bx], al
jne seguir
inc di
cmp msg2[di],"$"
jz resultado
loop comprobar
seguir:
inc si
loop comienzo
resultado:
mov dx, offset msg3
mov ah, 9
int 21h
final:
ret
msg db "tecnologico$"
msg2 db "tec$"
msg3 db "si se encuentran$"
Arquitectura de un sistema gestor de Bases de Datos
Arquitectura de un sistema gestor de Bases de Datos
Se describe la arquitectura de un Sistema Gestor de Bases de Datos y las partes que lo componen.
Un sistema gestor de bases de datos (SGBD) es una colección de datos interrelacionados y un conjunto de programas para acceder a esos datos, según Silberschatz A., Korth H. y Sudarshan S. (2006).
Componentes de un Sistema Gestor de Bases de Datos
Almacenamiento en disco
Obervamos en la parte inferior del diagrama
aparecen los datos en sí, el diccionario de datos que
contiene información sobre los datos y es un tipo especial de tabla a la que
solo tiene acceso el sistema de base de datos y no los usuarios en general. El
diccionario de datos almacena entre otros datos, restricciones de seguridad e
integridad (Date C. J., 2001). También están los índices, que se
utilizan para buscar más rápidamente un registro. Estos, junto con los datos
estadísticos son archivos que son almacenados en disco.
Gestor de almacenamiento
Luego observamos una serie de programas. El primer
grupo de programas se encarga de gestionar el almacenamiento. Uno
de ellos es el gestor de memoria intermedia, que atiende
solicitudes de consultas que involucran información guardada en disco. Si esa
información ya está en el gestor de memoria intermedia, se le proporciona al
programa solicitante, la dirección del bloque de memoria; de lo contrario, se
busca sitio en la memoria, se lee el disco, y se escribe en la memoria
intermedia, acto seguido, se le proporciona al solicitante la dirección del
bloque.
El gestor de transacciones gestiona
la ejecución de las transacciones o subtransacciones que acceden a los datos
almacenados. Una transacción es un grupo de instrucciones (de consulta o
actualización) que se deben ejecutar asegurando las propiedades de Atomicidad,
Consistencia, Aislamiento y Durabilidad (ACID).
El gestor de archivos gestiona la
asignación de espacio de almacenamiento en disco. Y el gestor de
autorizaciones e integridad, comprueba que se satisfagan las restricciones
de integridad y la autorización de los usuarios para tener acceso a los datos.
Procesador de consultas
El otro grupo de programas se encarga de las
consultas. Allí podemos observar al intérprete de LDD (Lenguaje
de Definición de Datos) que interpreta las instrucciones del LDD y actualiza el
diccionario de datos. También está un compilador de LMD (Lenguaje
de manipulación de datos) que traduce las instrucciones del LMD que están en un
lenguaje de consultas, a instrucciones de bajo nivel que serán ejecutadas por
el motor de evaluación de consultas. El motor de evaluación de
consultas es quien ejecuta las instrucciones de bajo nivel que le pasa el
compilador de LMD.
LDD = Lenguaje de
Definición de Datos.
LMD = Lenguaje de manipulación
de datos.
Usuarios
Por último, observamos a los usuarios de la base de
datos que interactúan cada uno de llos a través de su interfaz.
Los usuarios normales son usuarios
que no requieren preparación especial en el manejo de base de datos y que
utilizan el sistema a través de programas de aplicación que han sido escritos
para ellos. Los programadores de aplicaciones son usuarios de
la base de datos y escriben programas de aplicación. Pueden llegar a utilizar
herramientas DRA (Desarrollo Rápido de Aplicaciones), con las que pueden crear
formularios e informes con poco esfuerzo de programación.
Los usuarios sofisticados son
quienes utilizan la base de datos a través de consultas escritas en un lenguaje
de consultas. Y los usuarios especializados son usuarios
sofisticados que crean aplicaciones de bases de datos especializadas que
abarcan otros campos aparte del procesamiento tradicional de datos, por ejemplo
los sistemas expertos.
¿Y el Administrador de Bases de Datos?
Entre sus tareas se encuentran las siguientes:
·
Crear el esquema de la base de datos,
es decir el diseño lógico de la B.D.
·
Definir la estructura y el método de
acceso.
·
Modificar el esquema y la
organización física.
·
Autoriza el acceso a la base de
datos.
·
Da mantenimiento de rutina a la B.D.,
lo que incluye hacer copias de seguridad, asegurarse de que exista suficiente
espacio libre, y supervisar el rendimiento del sistema.
Multiplicación de 2 números de 2 cifras en EMU8086
Multiplicación de 2 números de 2 cifras en 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
- Código
.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
jueves, 15 de marzo de 2018
Imprimir letras de Colores
- Programa que imprime letras de colores en EMU8086
- Código
BIOS EQU 10H
DOS EQU 21H
FIN EQU 4C00H
.DATA
TITULO DB 'Edna Garcia (:'
COLORES DB 5BH
DB 5FH
DB 3DH
DB 5FH
DB 00H
DB 5BH
DB 0F0H
DB 05DH
DB 09FH
DB 03BH
DB 09FH
DB 00H
DB 08AH
DB 01BH
.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
martes, 13 de marzo de 2018
jueves, 8 de marzo de 2018
martes, 6 de marzo de 2018
EJERCICIOS LOOP
Ejemplo Eduardo Aquino
Ejemplo Maestra
model small
.stack 64
.data
; Mensaje1 db "instrucciones de repeticion
.code
inicio:
mov al,'>' ; Caracter inicial
mov cx,10 ; Numero de veces a repetir el ciclo
leer_car:
mov ah,0EH ; Funcion para imprimir el caracter AL
int 10h ; Llama al BIOS
;mov ah, 01 Aqui pide el dato y lo imprime
mov ah,01 ; Pausa y espera a que el usuario precione una tecla
int 21h ; Interrupcion para capturar
cmp al,'S' ; El caracter leeido la int 16h lo guarda en al
loopz leer_car ; Toma en cuenta la comparacion del cmp, si se cumple continua
; Coloco el fin de la linea para que baje una linea y lo baje
mov ah,0EH ; Funcion del bios para imprimir caracter
mov al,10
int 10h
MOV AL,13
INT 10H
mov ah,04ch ; Al terminar finaliza el programa.
int 21h
end inicio
- EMU8086
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
- TURBO Assembler
datos segment
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
datos ends
codigo segment
assume ds:datos,cs:codigo
inicio: ;función inicio
mov ax,datos ;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
ciclo1 endp
fin: ;funcion fin
mov ax,4c00h ;funcion que termina el programa
int 21h
codigo ends
end inicio
Ejemplo Armando Monreal
- EMU8086 y Turbo Aseembler
.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,datos
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
Ejemplo David Mendoza
.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
.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
Ejemplo Maestra
- EMU8086
model small
.stack 64
.data
; Mensaje1 db "instrucciones de repeticion
.code
inicio:
mov al,'>' ; Caracter inicial
mov cx,10 ; Numero de veces a repetir el ciclo
leer_car:
mov ah,0EH ; Funcion para imprimir el caracter AL
int 10h ; Llama al BIOS
;mov ah, 01 Aqui pide el dato y lo imprime
mov ah,01 ; Pausa y espera a que el usuario precione una tecla
int 21h ; Interrupcion para capturar
cmp al,'S' ; El caracter leeido la int 16h lo guarda en al
loopz leer_car ; Toma en cuenta la comparacion del cmp, si se cumple continua
; Coloco el fin de la linea para que baje una linea y lo baje
mov ah,0EH ; Funcion del bios para imprimir caracter
mov al,10
int 10h
MOV AL,13
INT 10H
mov ah,04ch ; Al terminar finaliza el programa.
int 21h
end inicio
- En Turbo Assembler
; Uso del LOOPZ, REPETICION BASADA EN
; Comparacion si es igual a 0
; Interrupcion para leer en el teclado INT16H
; Cuando usamos la int 16H , el parametro a usar es AH = 0
; Y el caracter leido quedara en AL= Caracter leido
.model small
.stack 64
.data
; Mensaje1 db "instrucciones de repeticion
.code
inicio:
mov al,'>' ; Caracter inicial
mov cx,10 ; Numero de veces a repetir el ciclo
leer_car:
mov ah,0EH ; Funcion para imprimir el caracter AL
int 10h ; Llama al BIOS
;mov ah, 01 Aqui pide el dato y lo imprime
mov ah,01 ; Pausa y espera a que el usuario precione una tecla
int 21h ; Interrupcion para capturar
cmp al,'S' ; El caracter leeido la int 16h lo guarda en al
loopz leer_car ; Toma en cuenta la comparacion del cmp, si se cumple continua
; Coloco el fin de la linea para que baje una linea y lo baje
mov ah,0EH ; Funcion del bios para imprimir caracter
mov al,10
int 10h
MOV AL,13
INT 10H
mov ah,04ch ; Al terminar finaliza el programa.
int 21h
end inicio
Suscribirse a:
Entradas (Atom)