Documente Academic
Documente Profesional
Documente Cultură
DOSSEG
.MODEL SMALL
.STACK 100H
.DATA
TABLA DB 12,43,-23,32,-65,73,45,91,54,96
POSITIVO DB 00
NEGATIVO DB 00
PAR DB 00
IMPAR DB 00
.CODE
INICIO:
MOV AX,@DATA
MOV DS,AX
MOV CX,10
LAZO:
MOV AL,TABLA[BX]
TEST AL,1
JZ ESPAR ;resul cero and cero num +
INC IMPAR
JMP SALIR
ESPAR:
INC PAR
SALIR:
SHL AL,1
JC NUNEG ;carry num -
INC POSITIVO
JMP SALIR2
NUNEG:
INC NEGATIVO
SALIR2:
inc bx ;siguiente ele
LOOP LAZO
FIN:
MOV AH,4Ch
int 21H
END INICIO
EJERCICIO 2
DOSSEG
.MODEL SMALL
.STACK 100H
.DATA
DATO DW 010111001110101B
NUMBITS1 DB 0
NUMBITS0 DB 0
.CODE
INICIO:
MOV AX,@DATA
MOV DS,AX
MOV DX,DATO
MOV CX,16
LAZO:
SHL DX,1
JNC ESBIT0
INC NUMBITS1
JMP SALIR
ESBIT0:
INC NUMBITS0
SALIR:
LOOP LAZO
FIN:
MOV AH,4cH
INT 21H
END INICIO
COMMENT % LABORATORIO DE SISTEMAS ELECTRàNICOS
DIGITALES
Programa que determina si un dato tiene paridad par.%
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
.CODE
INICIO:
mov ax,@data
mov ds,ax
mov ax,dato ;Guardamos en AX el dato que queremos examinar.
xor cl,cl ;Inicializamos a 0 el contador de bits leidos.
xor bl,bl ;Inicializamos a 0 el contador de bits a 1.
bucle:
clc ;Ponemos a 0 el flag de carry para que no
;nos importe el analisis del bit anterior
shr ax,1 ;Rotamos 1 posicion los bits del dato, el bit
;"eliminado" pasa al flag de carry
FIN:
mov ah,4ch
int 21h
END INICIO
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
.CODE
INICIO:
mov ax,@data
mov ds,ax
;Guardamos en Al el dato que queremos examinar.
;En Bl guardaremos la solución hasta el final
bucle:
clc ;Ponemos a 0 el flag de carry para que no
;nos importe el análisis del bit anterior
rol al,1 ;Rotamos 1 posición los bits del dato, el bit
;"eliminado" pasa al flag de carry
adc bl,0h; ;El bit de menor peso es 0 porque acaba de ser rotado
; ,y estaba inicializado a 0. As¡ que al sumar con
;carry ponemos el valor del bit invertido del dato
;origen.
ror bl,1
inc cl;
cmp cl,08h ;Lo comparamos con 8, que es numero de bits a analizar
jnz bucle ;Si no ha llegado a 8, salta atr s a la etiqueta "bucle"
FIN:
mov ah,4ch
int 21h
END INICIO
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
.CODE
AsciToBinario:
sub cifras[di], 30h
jmp volver
INICIO:
mov ax,@data
mov ds,ax
xor di,di ;Inicializamos a 0 el indice de cifras (de la tabla).
mov bl,0h ;En Bx operaremos hasta llegar a la solucion.
add bl,cifras[di]
inc di;
cmp di,05h ;Lo comparamos con 5, que es numero de cifras a analizar
jnz bucle ;Si no ha llegado a 5, salta atr s a la etiqueta "bucle"
FIN:
mov ah,4ch
int 21h
END INICIO
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
.CODE
BinToAscii:
add cifras[di], 30h
jmp volver
INICIO:
mov ax,@data
mov ds,ax
mov di,4h ;Inicializamos a 4 y en cada iteración restaremos uno
;hasta que sea menor que 0
mov ax,dato ;En Ax iremos dividiendo hasta llegar a la solución.
mov bx,10 ;bs ser el divisor
dec di;
cmp di,00h ;Lo comparamos con 5, que es numero de cifras a analizar
jge bucle ;Si no ha llegado a 5, salta atrás a la etiqueta "bucle"
FIN:
mov ah,4ch
int 21h
END INICIO
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
frase DB "La tecla pulsada es: X $"
longit EQU $-OFFSET frase
.CODE
inicio:
mov ax,@data
mov ds,ax
bucle:
mov ah, 08h ;8h es el código de la interrupción
;para leer sin mostrar el dato por pantalla
int 21h
cmp al,1bh ;Comprobamos si es escape
je FIN
mov frase[21],al
mov frase[22],0Ah ;Introducimos un salto de línea
lea dx,frase
mov ah, 09h
int 21h
xor dl,dl
jmp bucle
FIN:
mov ah, 4ch
int 21h
END inicio
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
long DB 6h
longlei DB ?
cifras DB 6h dup(?)
solucion DW 0H ;Variable donde se guardara el resultado
.CODE
AsciToBinario:
sub cifras[di], 30h
jmp volver2
NoNum:
mov bl,1h
jmp Volver
mov ah,8
int 21h
;borrar pantalla
mov ah,6
xor cx,cx
mov dh,24
mov dl,79
mov bh,7
xor al,0;num líneas
int 10h
jmp fin
ComprobarNum:
cmp longlei,5h
jne NoNum ;No ha introducido 5 caracteres
bucle:
cmp cifras[di],30h
jl NoNum
cmp cifras[di],39h
jg NoNum
inc di
cmp di,5h
jne bucle
jmp Volver
Inicio:
mov ax, @data
mov ds,ax
xor si,si
xor di,di ;di ser el índice para las cifras
xor bl,bl ;Si bl = 0 los caracteres son numéricos, sino no
cmp bl,01
je error
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
XSupIzq DB 3
YSupIzq DB 5
XInfDer DB 20
YInfDer DB 20
.CODE
Inicio:
mov ax,@data
mov ds,ax
;usaremos scroll
;mov ah, 06h ;función para hacer scroll también con 7h
;mov al, 00h ;cantidad de filas a enrollar
;mov bh, 07h ;atributos de color fondo y texto
;mov CX, 00h ;fila inicial en ch, columna inicial en cl
;mov DX, 184fh ;fila final en dh, columna final en cl
;int 10h ;ejecuta las interrupciones de video
;El registro dx ser el que nos vaya posicionando el cursor
mov dh,YSupIzq
mov dl,XSupIzq
bucle:
;Primero nos posicionamos en la linea correcta
mov ah,02h
int 10h
fin:
mov ah,4ch
int 21h
END Inicio
DOSSEG
.MODEL SMALL
.STACK 100h
.CODE
izquierda:
sub dl,1h
jmp bucle
derecha:
add dl,1h
jmp bucle
arriba:
sub dh,1h
jmp bucle
abajo:
add dh,1h
jmp bucle
Inicio:
;Primero limpiamos la pantalla
;limpiar pantalla usando scroll
mov ah, 06h ;función para hacer scroll tambien con 7h
mov al, 00h ;cantidad de filas a enrollar
mov bh, 07h ;atributos de color fondo y texto
mov CX, 00h ;fila inicial en ch, columna inicial en cl
mov DX, 184fh ;fila final en dh, columna final en cl
int 10h ;ejecuta las interrupciones de video
bucle:
cmp al,1Bh
je fin
cmp ah,4Bh
je izquierda
cmp ah,48h
je arriba
cmp ah,4Dh
je derecha
cmp ah,50h
je abajo
jmp bucle
Fin:
;Volvemos a limpiar la pantalla
;limpiar pantalla usando scroll
mov ah, 06h ;función para hacer scroll también con 7h
mov al, 00h ;cantidad de filas a enrollar
mov bh, 07h ;atributos de color fondo y texto
mov CX, 00h ;fila inicial en ch, columna inicial en cl
mov DX, 184fh ;fila final en dh, columna final en cl
int 10h ;ejecuta las interrupciones de video