Assembly ingresa un número entre 0 y 9 desde el teclado, lo convierte en un número binario y lo muestra
=========================================== = =====
ASUME CS: CÓDIGO, DS: DATOS
SEGMENTO DE DATOS
MSG1 DB 13, 10, 'Ingrese un número (0 ~ 255): $'
MSG2 DB 13, 10, 'Ingrese un número no válido, salga $'
CRLF DB 13, 10, ' = $'
NNNN DB ?
LOS DATOS TERMINAN
;-------------------------- -- -----
SEGMENTO DE CÓDIGO
INICIO:
MOV AX, DATOS
MOV DS, AX
;-----------------------
LEA DX, MSG1
MOV AH, 9 p>
INT 21H
IN_CHAR:
MOV AH, 1
INT 21H
CMP AL, 13
JE IN_END
CMP AL, '0'
JB IN_ERR
CMP AL, '9'
JA IN_ERR
SUB AL, 30H
MOV DL, AL
MOV AL, NNNN
MOV BL, 10
MUL BL
CMP AH, 0
JNZ IN_ERR
AÑADIR AL, DL
JC IN_ERR
MOV NNNN, AL
JMP IN_CHAR
IN_END:
LEA DX, CRLF
MOV AH, 9
INT 21H
LLAMADA OUT_BIN
LEA DX, CRLF
MOV AH, 9
INT 21H
CALL OUT_HEX
SALIDA JMP
IN_ERR:
LEA DX, MSG2
MOV AH, 9
INT 21H
SALIR:
MOV AH, 4CH
INT 21H; Volver a DOS
------- - -------------------------
OUT_BIN:
MOV AH, 2
MOV BL, NNNN
MOV CX, 8
LP1:
MOV DL, '0'
AÑADIR BL, BL
JN
C LP2
INC DL
LP2:
INT 21H
BUCLE LP1
MOV DL, 'B '
INT 21H
RET
;------------------------ ----- ----------
OUT_HEX:
MOV AH, 0
MOV AL, NNNN
MOV BL, 16
DIV BL
MOV DX, AX
MOV AH, 2
CMP DL, 10
JB LP3
AÑADIR DL, 7
LP3:
AÑADIR DL, 30H
INT 21H p>
MOV DL, DH
CMP DL, 10
JB LP4
AÑADIR DL, 7
LP4:
AÑADIR DL, 30H
INT 21H
MOV DL, 'H'
INT 21H
RET
;----------------------------------
EL CÓDIGO FINALIZA
FIN INICIO
; ================================= ===== ==========