Lenguaje ensamblador. Programación de bucles y ramas. Expertos, por favor vengan y ayuden ~ Gracias ~
; Pregunta A:
; Determine los caracteres ingresados en el teclado; si son de 1 a 9 caracteres, se mostrarán; muestra "c"; si ingresa un carácter finalizará el programa. Si se trata de otros caracteres, no se mostrará y continuará esperando la entrada de nuevos caracteres.
segmento de datos
DB 0
finales de datos
segmento de código
asume cs: código, ds: datos
proc principal lejos
push ds
sub ax, ax
push ax
mov ax, datos
mov ds, ax
siguiente:
mov ah, 07
int 21h
cmp al , 0dh
jE end_d
cmp al,'0'
JGE DY0;gt;=0
JMP NEXT;lt; '0'...30H
DY0:
CMP AL, '9'
JLE IS_09
CMP AL, 'A '
JGE DY_A ; DAYU A
JMP SIGUIENTE ;lt; 'A'...41H
DY_A:
CMP AL , 'Z'
JLE IS_AZ
CMP AL, 'a'
JGE DY_xA ;DAYU xA
JMP SIGUIENTE ;lt; 'a'...61H
DY_xA:
CMP AL, 'z'
JLE IS_AZ
JMP SIGUIENTE
;.........................
IS_AZ:
MOV AH, 02
MOV DL, 'c'
INT 21H
JMP SIGUIENTE
IS_09:
MOV AH, 2
p>MOV DL, AL
INT 21H
JMP SIGUIENTE
end_d:
ret p>
fin principal
finales del código
fin principal
================= ==== =========================================
; Pregunta B:
segmento data_C
DATA DB -1, 4, 9; el valor de 3 aquí se puede establecer arbitrariamente
A1 DB 0
A2 DB 0
A3 DB 0
DISP_MESS DB 0DH, 0AH, 'MIN ES: '
D1 DB 0
D2 DB 0, 'H$'
data_C finaliza
segmento de código
asume cs: código, ds: data_C
proc principal lejos
push ds
sub ax, ax
push ax
mov ax, data_C
mov ds, ax
MOV BX, DATOS DE COMPENSACIÓN
MOV AL, [BX]
INC BX
MOV AH, [BX] p>
CM
P AL, AH
JL ALAL1; ALLt; AH
XCHG AH, AL
ALAL1:
INC BX
MOV DL, [BX]
CMP AL, DL
JL ALAL
XCHG AL, DL
ALAL:
CMP AH, DL
JL AL_SMALL
XCHG AH, DL
AL_SMALL:
MOV A1, DL
MOV A2, AH
MOV A3, AL
XOR DL, AL; XOR de los números mayor y menor
AND DL; , 80H
NO DL
PRUEBA DL, 80H el bit alto es 1, lo que significa uno positivo y otro negativo, de lo contrario es todo negativo o todo positivo
JE YZYF
Y AL, 80H
NO AL
PRUEBA AL, 80H el bit alto es 1, lo que significa todo negativo
;JE QF
MOV AH, 02
MOV DL, ' '
INT 21H
JMP DISP_SMALL
QF:
MOV AH, 02
MOV DL, '-'
INT 21H
JMP DISP_SMALL
YZYF:
MOV AH, 02
MOV DL, '*'
INT 21H
DISP_SMALL: ; el valor mínimo
MOV AL , A3
MOV AH, AL
AND AX, 0F00FH
MOV CL, 4
SHR AH, CL
CMP AH, 0AH
JGE IS_AZ
AÑADIR AH, 30H
MOV D1, AH
JMP NN_1
IS_AZ:
AÑADIR AH, 40H -0AH 1
MOV D1, AH
NN_1:
CMP AL, 0AH
JGE IS_AZ1
AÑADIR AL, 30H
MOV D2, AL
JMP NN_2
IS_AZ1:
AÑADIR AL, 40H -0AH 1
MOV D2, AL
NN_2:
MOV AH, 09
MOV DX, OFFSET DISP_MESS
INT 21H
ret
extremo principal
el código termina
finaliza el principal