Microprocesor Simulator 5v32
Следовало это в заголовке отразить :)
Задача тут получается в том, чтобы преобразовать число в сигнал для вывода на этом дисплее.
Как можно увидеть, каждый бит на PORT 2 отвечает за разные сегменты дисплея.
Первые 7 - за сами сегменты в порядке: Верхний, Верхний-Левый, Нижний-Левый, Нижний, Нижний-Правый, Центральный, Верхний-Правый.
Последний бит отвечает за выбор одного из двух дисплеев. 0 - первый, 1-второй.
Вот так можно вывести 33:
Start:
; Чистим первый знак
MOV AL, 0
OUT 02
; Чистим второй знак
MOV AL, 1
OUT 02
; 3 на первый
MOV AL, 9e
OUT 02
; 3 на второй
MOV AL, 9f
OUT 02
END
Преобразовать одно в другое можно разве что тупым сопоставлением:
1=06
2=B6
3=9E
4=4E
5=DC
6=FC
7=86
8=FE
9=DE
0=FA
Которое можно представить в виде процедуры с кучей CMP и JNZ:
Код
Start:
MOV AL, 0
OUT 02
MOV AL, 1
OUT 02
; Для примера выведем 42
MOV AL, 4 ; Первая цифра
CALL 30
OUT 02
MOV AL, 2 ;Вторая цифра
CALL 30
OR AL, 1
OUT 02
; ----- DIGIT TO SEGMENT -----
ORG 30
CMP AL, 00
JNZ ONE
MOV AL, FA
RET
One:
CMP AL, 01
JNZ Two
MOV AL, 06
RET
Two:
CMP AL, 02
JNZ Three
MOV AL, B6
RET
Three:
CMP AL, 03
JNZ Four
MOV AL, 9E
RET
Four:
CMP AL, 04
JNZ Five
MOV AL, 4E
RET
Five:
CMP AL, 05
JNZ Six
MOV AL, DC
RET
Six:
CMP AL, 06
JNZ Seven
MOV AL, FC
RET
Seven:
CMP AL, 07
JNZ Eight
MOV AL, 86
RET
Eight:
MOV AL, FA
JNZ Nine
CMP AL, FE
RET
Nine:
CMP AL, 09
JNZ err ; Если это и не 9, то просто сваливаемся в ошибку
MOV AL, DE
RET
err:
HALT
; ----- END OF PROCEDURE -----
UPD: придумал более лаконичный способ, где коды каждого символа записаны в ОЗУ (мб можно красивее)
Код
JMP Start
DB fa; 0
DB 06; 1
DB b6; 2
DB 9e; 3
DB 4e; 4
DB dc; 5
DB fc; 6
DB 86; 7
DB fe; 8
DB de; 9
DB ee; A
DB 7c; B
DB 70; C
DB 3e; D
DB f4; E
DB e4; F
Start:
MOV AL,0
OUT 02
MOV AL,1
OUT 02
MOV AL,42
CALL 40
PUSH BL
POP AL
OUT 02
PUSH CL
POP AL
OUT 02
; ----- DIGIT TO SEGMENT -----
; INPUT: AL
; OUTPUT: BL, CL
ORG 40
PUSH AL
POP BL
PUSH AL
POP CL
AND BL,F0
SHR BL
SHR BL
SHR BL
SHR BL
AND CL,0F
ADD BL,2
ADD CL,2
MOV BL,[BL]
MOV CL,[CL]
OR CL,1
RET
; ----- END OF PROCEDURE -----
END