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:
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:
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.
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:
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
Publicar un comentario