Untitled
unknown
plain_text
2 years ago
2.1 kB
8
Indexable
;start=led_display.exe#
TITLE IOANNIS STAMOU
DEDOMENA SEGMENT
debug dw 0
digit db 3 dup(0)
DEDOMENA ENDS
KWDIKAS SEGMENT
ARXH:
MOV AX, DEDOMENA
MOV DS, AX
; Prompt the user to enter a decimal number
MOV DX, OFFSET digit
MOV AH, 09h
INT 21H
; Print the entered decimal number
CALL output_value_to_display
; Print the binary representation of the number
MOV CX, 3
MOV SI, 0
PRINT_BINARY_LOOP:
CALL output_binary_digit
INC SI
LOOP PRINT_BINARY_LOOP
MOV AH, 4Ch
INT 21H
output_value_to_display PROC
PUSH SI
PUSH AX
PUSH CX
PUSH BX
MOV CX, 0
MOV SI, 0
MOV AL, digit[SI]
MOV BL, 100
MUL BL
ADD CL, AL
INC SI
MOV AL, digit[SI]
MOV BL, 10
MUL BL
ADD CL, AL
MOV AL, digit[SI]
ADD CL, AL
MOV AX, CX
OUT 199, AX
POP BX
POP CX
POP AX
POP SI
RET
output_value_to_display ENDP
output_binary_digit PROC
MOV AL, digit[SI]
CALL binary_conversion
MOV AH, 02h
INT 21H
RET
output_binary_digit ENDP
binary_conversion PROC
MOV CX, 8 ; 8 bits
MOV BX, 0000_0001b ; Mask for checking each bit
binary_conversion_loop:
AND AL, BX
JZ zero_bit
MOV DL, '1'
MOV AH, 02h
INT 21H
JMP next_bit
zero_bit:
MOV DL, '0'
MOV AH, 02h
INT 21H
next_bit:
SHR BX, 1
LOOP binary_conversion_loop
RET
binary_conversion ENDP
get_three_decimal_digits PROC
PUSH BP
PUSH SI
PUSH CX
MOV CX, 3
MOV SI, 0
LOOP1:
CALL get_one_decimal_digit
MOV BP, SP
MOV AX, [BP-8]
MOV digit[SI], AL
INC SI
LOOP LOOP1
POP CX
POP SI
POP BP
RET
get_three_decimal_digits ENDP
get_one_decimal_digit PROC
PUSH AX
PUSH BP
MOV BP, SP
AGAININPUT:
MOV AH, 01h
INT 21H
CMP AL, '0'
JB AGAININPUT
CMP AL, '9'
JA AGAININPUT
MOV AH, 0
SUB AL, 30H
MOV [BP-2], AX
POP BP
POP AX
RET
get_one_decimal_digit ENDP
KWDIKAS ENDS
SOROS SEGMENT STACK
db 256 dup(0)
SOROS ENDS
END ARXH
Editor is loading...
Leave a Comment