Un programa de diseño para un reloj electrónico con visualización de puntero basado en lenguaje ensamblador 8086
Tiene una función de reloj que puede mostrar y actualizar continuamente la hora actual y puede preestablecer la hora del timbre; , y cuando llegue la hora de sonar La campana sonará cuando
Segmento de datos
Hora dw ¿El número de horas en que sonará la campana
minuto dw? El número de minutos en que sonará la campana
diez dw 10
s1 db 'Por favor, configure la hora de timbre del reloj (configurada en hora:minuto): $'
s2 db 'La hora de timbre es: $' p>
s3 db 'La hora actual es: $'
s4 db 'Ring Ring Ring Ring !!!!!! $'
error db '¡error de configuración de hora! $'
los datos terminan
segmento de código
se supone que cs: código, ds: datos
se utilizan para borrar una línea de caracteres.
p>
Programa cleanLine
Empujar hacha
Empujar bx
Empujar cx
Empujar dx
mov cx, 85
mov ah, 2h
mov dl, 0dh
int 21h
limpiar :
mov dl, ' '
int 21h
limpieza de bucle
mov dl, 0dh
int 21h
pop dx
pop cx
pop bx
pop hacha
ret
cleanLine endp
Se utiliza para mostrar el retorno de carro y el avance de línea
Proceso de avance de línea
Empujar hacha
Empujar bx
p>Empujar cx
Empujar dx
mov ah, 2h
mov dl, 0dh
int 21h
mov dl, 0ah p>
int 21h
pop dx
pop cx
pop bx
pop ax
ret
changeline endp
programa inputNegativeNumber usado para aceptar números decimales ingresados desde el teclado, almacenados en bx
Empujar hacha
Empujar cx
Empujar dx
mov bx, 0
mov cl, 0
mov ah, 1
int 21h
cmp al, '-'
je k4
k0:
cmp al, 30h
jb k3
cmp al, 39h
ja k3
sub al, 30h
mov ah, 0
xchg ax, bx
push cx
mov cx, 10
mul cx; p>
pop cx
agregar bx, ax Considere overfl;
ow
k1:
mov ah, 1
int 21h
jmp k0
k4: p> p>
mov cl, 1
jmp k1
k3:
cmp cl, 1
jne over
neg bx
sobre:
pop dx<
pop cx
pop hacha
ret
inputNegativeNumber endp
outputNumber proc; genera un número en ax
push ax
push bx
Empujar cx
Empujar dx
mov cx, 0
mov bx, 10
cmp hacha, 0
jge p0
empujar hacha
mov ah, 2h
mov dl, '-'
int 21h
hacha pop
hacha neg
p0:
mov dx, 0
div bx
push dx
inc cx
cmp ax, 0
jnz p0
mov ah, 2
cmp cx, 2
jae p1
mov dx, 0
push dx
inc cx
p1 :
pop dx
agregar dx, 30h
int 21h
bucle p1
pop dx p >
pop cx
pop bx
pop ax
ret
outputNumber endp
setRingTime programa Se utiliza para configurar el tiempo de timbre
Push ax
Push bx
Push cx
Push dx
mov bx, 0
h:
mov ah, 1h
int 21h
cmp al, 30h
jb error
cmp al, 32h<
ja error
sub al, 30h
mov ah, 0
xchg ax, bx
mul ten
agregar bx, ax
mov ah, 1h
int 21h p >
cmp al, 30h
jb error
cmp al, 39h
ja error
sub al, 30h
p>mov ah, 0
xchg ax, bx
mul ten
agregar bx, ax
mov hora, bx
mov ah, 1h
int 21h
cmp al, ':
jnz incorrecto
>
mov bx, 0
m:
mov ah, 1h
int 21h
cmp al, 30h p>
error jb
cmp al, 36h
error jae
sub al, 30h
mov ah, 0
xchg ax, bx
mul ten
add bx, ax
mov ah, 1h
int 21h
cmp al, 30h
jb error
cmp al, 39h
ja error
sub al, 30h
mov ah, 0
xchg ax, bx<
mul ten
agregar bx, ax
mov minuto, bx
jmp o
incorrecto:
llamar a changeline
llamar a changeline
mov ah , 9h
lea dx, error
int 21h
mov ah, 4ch
int 21h
o :
pop dx
pop cx
pop bx
pop hacha
ret
proc principal lejos
push ds
sub ax, ax
push ax
mov ax, data
mov ds, ax; muestra el mensaje para configurar el tiempo de timbre
mov ah, 9h
lea dx, s1
int 21h
llamar a setRingTime
llamar a cleanLine; borrar la cadena de la línea donde está el cursor en la pantalla y mover el cursor al principio de la línea
mov ah, 9h
lea dx, s2
int 21h
call showRingTime Muestra el tiempo de timbre establecido
call changeline
llamar a changeline
hora:; se usa para actualizar la pantalla cada segundo
mov ah, 9h
lea dx si bx=2, el tiempo de timbre ha expirado
je ring
llamar a un segundo
mov ah, 2h
mov dl, 0dh