Escribir un programa simple en lenguaje ensamblador (estoy aprendiendo lenguaje ensamblador y tecnología de interfaz)
; Ingrese cualquier número del 0 al 59 desde el teclado y aumentará en uno cada segundo. Cuando llegue a 59, saltará a 0 y comenzará a incrementarse nuevamente.
SEGMENTO DE DATOS
; Ingrese el código del segmento de datos aquí
MESS0 DB '¡Error char!', '$' ; Información de excepción
MESS1 DB '¡Desbordamiento de entrada!' , '$'
MESS2 DB '¡Debe ser 0~59!', '$'
SEPRA DB 0DH, 0AH, '$' delimitador
TIME DB 0
MADDR DW OFFSET MESS0, OFFSET MESS1, OFFSET MESS2 Dirección de información de excepción
DATOS FINALES
SEGMENTO DE PILAS
; Ingrese aquí el código del segmento de pila
DW 64 DUP (?)
PALABRA DE ETIQUETA SUPERIOR
EXTREMOS DE PILAS
SEGMENTO DE CÓDIGOS
ASUME CS: CÓDIGOS, DS: DATAS, SS: PILAS
MAIN PROC FAR
Manejo de excepciones
L0:
MOV AH, 9
LEA DX, SEPRA
INT 21H
AÑADIR SI, SI
MOV DX, MADDR[SI ]
INT 21H
LEA DX, SEPRA
INT 21H
INT 21H
XOR BX, BX
JMP SHORT L1; Reingresar
INICIO:
MOV AX, DATAS
MOV DS, AX
MOV AX, STACKS
MOV SS, AX
LEA SP, TOP
; ingrese el fragmento de código aquí
MOV BH, 10; número de base
MOV DI, 60; módulo
XOR BL, BL
L1:
MOV AH, 1 p>
INT 21H
CMP AL, ' '
JE EXIT; ingrese un carácter de espacio para finalizar el programa
CMP AL, 0DH
p>JE L2; Ingrese el carácter de retorno de carro para finalizar la entrada digital
MOV SI, 0
CMP AL, '0'
JB L0
CMP AL, '9'
JA L0
MOV SI, 1
AND AL, 0FH
JC L
0; desbordamiento de suma, el número es mayor que 255
JMP SHORT L1
L2:
MOV SI, 2
CMP BL, 59
JA L0; Ingrese un número mayor que 59
L3:
Obtenga la hora del sistema
MOV AH, 2CH<; /p>
L4: INT 21H
CMP TIME, DH
JE L4
MOV TIME, DH si la hora del sistema cambia, envíela;
; Números de salida
MOV AL, BL
CBW; AL expandido a AX
CALL SHOWCHAR
; Separador de salida
LEA DX, SEPRA
MOV AH, 9
INT 21H
El número aumenta en 1
;INC BL
; número módulo 60
MOV AL, BL
CBW
CWD
DIV DI ; (DI)=60
MOV BL, DL
; Retraso 1 segundo
; RETARDO DE LLAMADA
; Hay entrada de teclado, si es así, el programa finaliza
MOV AH, 6
MOV DL, 0FFH
INT 21H
JZ L3
SALIDA:
MOV AH, 4CH
INT 21H
ENDP PRINCIPAL
Parámetros entrantes: AL, un entero sin signo; BH, como variable global, siempre 10
; Parámetro de retorno: Ninguno
; Muestra el número decimal correspondiente a AX
; > MOSTRAR PROC CERCA
PUSH DX
PUSH CX
XOR CX, CX; registrar dígitos decimales
L6:
XOR AH,AH
DIV BH
MOV DL,AH
XOR DH,DH
AGREGAR DX, 30H
PUSH DX
INC CX
CMP AL, 0
JNE L6
MOV AH, 2 p>
L7:
POP DX
INT 21H
BUCLE L7
POP CX
POP DX
RET
SHOWCHAR ENDP
CÓDIGOS FINALIZA
FIN INICIO