Red de conocimiento informático - Conocimiento sistemático - Lenguaje ensamblador. Programación de bucles y ramas. Expertos, por favor vengan y ayuden ~ Gracias ~

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

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]

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