nasm 点阵显示汉字出现问题

仿照网上很多人的代码我用nasm写了显示汉字的代码
但是可能是我用错了方法,点阵无法显现,一行只出现了一个点,照理说应该是按照0000110,出现两个点,但是结果是只有一个点,在6的位置
org 0x8400
jmp start

TW DB 01H,00H,01H,00H,01H,20H,05H,10H,19H,00H,09H,70H,0FH,80H,38H,90H,0AH,0A0H,0CH,40H,38H,0C0H,0CBH,24H,18H,14H,08H,0CH,00H,04H,00H,00H
DB 00H,00H,00H,20H,08H,20H,08H,40H,10H,58H,2CH,0E8H,75H,08H,46H,88H,74H,48H,44H,48H,44H,08H,3CH,08H,24H,28H,00H,10H,00H,00H,00H,00h
DB 00H,40H,10H,40H,08H,40H,00H,40H,00H,40H,30H,7CH,0D3H,0C0H,10H,40H,10H,40H,14H,40H,18H,40H,10H,40H,00H,40H,00H,40H,00H,40H,00H,00H
db 08H,58H,0FH,60H,08H,90H,15H,00H,23H,0C0H,04H,40H,07H,40H,04H,40H,07H,0C0H,04H,7EH,7FH,0C0H,04H,40H,04H,40H,08H,40H,10H,40H,00H,00H
db 10H,00H,10H,00H,10H,00H,10H,70H,1CH,90H,70H,0A0H,10H,0A0H,18H,0A0H,34H,0A0H,51H,22H,91H,22H,12H,1EH,14H,00H,10H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,0E0H,0FH,00H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H,01H,0FCH,7EH,00H,00H,00H,00H,00H,00H,00H,00H,00H
db 00H,40H,08H,40H,08H,80H,08H,9CH,11H,0E0H,31H,40H,52H,40H,94H,78H,10H,40H,10H,40H,10H,78H,10H,40H,10H,40H,00H,40H,00H,40H,00H,00H
db 00H,00H,00H,00H,00H,0F0H,0FH,00H,01H,00H,01H,00H,09H,30H,09H,0C0H,09H,00H,09H,00H,09H,00H,09H,0FCH,0FEH,00H,00H,00H,00H,00H,00H,00H
db 01H,20H,09H,40H,05H,00H,0FH,0F8H,70H,08H,4FH,0D0H,48H,80H,07H,00H,01H,0E0H,0FH,20H,09H,20H,09H,60H,09H,20H,01H,00H,01H,00H,00H,00H

start:
    MOV AL,13H
    MOV AH,00H
    INT 10H
;输出 ‘我的计算机工作正常’--------------------
    MOV AX,0A000H           ;VGA写入起始段地址
    MOV ES,AX           ;设置传送目标段地址

    CLD             ;CLD指令使DF=0,正向传输字
    MOV CX,9            ;连续的字数,此处“我的计算机工作正常”共9字
    MOV SI,TW           ;需写入汉字字模的首地址
    MOV DI,320*20
    DIS1:
        PUSH CX         ;多重循环,CX入栈
        PUSH SI
        PUSH DI
        MOV CX,16
        DISWORD1:
            MOVSW
            ADD DI,318   ;转到下一行字模写入位置,一个汉字16*16,故需写16行
        LOOP DISWORD1
        POP DI
        POP SI
        POP CX
        ADD SI,32       ;读取下一个汉字的字模数据,由于一个汉字占用32byte,故加上32
        ADD DI,10       ;开始写下一个汉字,默认写在上一个字右边
    LOOP DIS1

img

我找了很多的例子,大多都是这样的写法,但是用的都是masm,可能我用nasm就不行莫,那该怎么改呢?
有木有人可以解答呀,哭辽,搞了好久都搞不来这种办法的文字显示,徒手画太麻烦了~

在代码中,使用了一个名为 TW 的数据段,并将一些十六进制数存储在其中。还定义了一个名为 start 的位置,并使用 jmp 指令将程序转移到 start 位置。然而,没有在 start 位置提供任何代码,所以程序不会执行任何操作。

为了使代码能够正常工作,需要在 start 位置提供代码,使用 TW 数据段中的信息来显示汉字。这可能需要使用一些特定的指令或函数,具体取决于汉字显示器的类型和硬件平台。

此外可能需要使用汉字显示器提供的文档或其他资料来了解如何使用 TW 数据段中的信息来显示汉字。这些文档可能会提供更多有关如何使用 TW 数据段的信息以及如何使用其他指令或函数来完成任务的详细信息。
望采纳。

如果你在运行这个程序时遇到问题,可以尝试检查以下方面:

确保点阵数据的正确性。

确保程序的语法正确。

确保硬件设备正常工作。

nasm 与 masm 的语法可能略有不同,所以你可能需要对这个程序进行一些修改,才能在 nasm 中运行。

具体来说,你可以尝试以下方法来改写这个程序:

将所有的 masm 语法替换为对应的 nasm 语法。例如,mov ax,0A000h 可以改写为 mov ax,0A000。

将所有的 masm 内存修饰符替换为对应的 nasm 内存修饰符。例如,db 可以替换为 times。

检查所有的操作码是否与 nasm 兼容。例如,nasm 不支持 masm 中的 int 10h 指令。

确保所有的变量都被正确声明。

有关汉字系统的关键技术/纯汇编显示中文/汉字显示/Nasm源码
借鉴下
https://blog.csdn.net/jiaguoxinzhi/article/details/2918588