MDA-8086 8*8点阵显示码段解释

MDA-8086 8*8 Dot matrix display code segment explaination

我有一段代码在MDA-8086的点阵显示中显示'A'。在这里:

ORG 1000H
MOV AL, 10000000B       ;Activate Signal
OUT 1EH, AL             ;Writing Activate signal to  Control Register
MOV AL, 11111111B       ;Off Signal
OUT 18H, AL             ;Writing off signal to Port A
L1: MOV SI, OFFSET FONT ;Assigning source address to Memory address/                            ;offset of FONT Variable
    MOV AH, 00000001B
L2: MOV AL, BYTE PTR CS:[SI]
    OUT 1AH, AL
    MOV AL, AH
    OUT 1CH, AL
    CALL TIMER
    INC SI
    CLC
    ROL AH, 1
    JNC L2
    JMP L1
    INT 3
TIMER: MOV CX, 300
TIMER1: NOP
        NOP
        NOP
        NOP
        LOOP TIMER1
        RET
FONT: DB 11111111B
      DB 11001001B
      DB 10110100B
      DB 10110110B
      DB 10110110B
      DB 10110110B
      DB 10000000B
      DB 11111111B

现在我听不懂这些台词; MOV SI, OFFSET FONTMOV AL, BYTE PTR CS:[SI]。谁能告诉我这些行是做什么的?
编辑:

我还想知道 DBFONT 中的工作方式以及每个 DB 的评估方式。

Now I don't get these lines

x86 CPU 的 16 位和 32 位代码总是使用两个数字来指定存储在内存中的地址:

段和偏移量。

该段描述了内存中的某个区域。

内存中某些项目的"real"地址可以通过以下方式计算:

(address of the first byte of the segment) + offset

CS 寄存器通常是只读的。它包含包含当前执行的指令的段。

MOV SI, OFFSET FONT 指令现在会将 FONT: 标签后的数据偏移量写入 SI 寄存器。

MOV AL, BYTE PTR CS:[SI]指令将从内存中读取一个字节到寄存器AL。从以下地址读取字节:

(address of the first byte of the CS segment) + (value of register SI)

因为 FONT: 标签与指令本身 (CS) 在同一段中,并且 SI 包含 FONT: 的偏移量,所以这样计算的地址是FONT:.

第一个字节的地址

换句话说:该指令将FONT:的第一个字节加载到寄存器AL

(当第二次调用该指令时,将加载 FONT: 的第二个字节,因为 SI 已递增。)

I also want to know how DB is working ...

DB 不是指令。

DB 告诉汇编程序将具有特定值的字节写入内存 而不是 一条指令。

所以下面的(无意义的)代码:

mov ax, 1
db 10
mov ax, 2

...表示在两条mov指令之间应该有值为10的字节。

how DB is working in FONT

这8个字节(这里不是指定为十进制而是二进制数)存储在名为FONT:.

的内存位置