【问题标题】:How to print matrix with int10h?如何用 int10h 打印矩阵?
【发布时间】:2020-06-28 17:56:37
【问题描述】:

正如我的问题所说,我需要用 int10h 打印一个矩阵,但不仅如此,这个矩阵是 0 和 1,其中 0 必须代表蓝色,1 代表红色。所以我的问题是如何打印此矩阵以及如何在打印时使蓝色和红色变为红色?我正在使用 TASM,可以使用 16 位或 32 位寄存器。 这是一个例子:

oneMatrix db 00000000000
             00000110000
             00011110000
             00000110000
             00000110000
             00000110000
             00011111100
             00000000000

所以你可以在那里看到,1 形成了一个的形状。如何使用 int 10h 打印它,其中 0 是蓝色,1 是红色?

【问题讨论】:

  • 您想以文本模式还是图形模式执行此操作?如果在图形模式下,您想使用哪种模式?
  • 在图形模式和中断 10 中最适合此的模式

标签: assembly printing draw tasm real-mode


【解决方案1】:

使用 BIOS.WriteCharacterAndAttribute 函数 09h。根据手头的字符(从矩阵中读取),将蓝色或红色前景色放入 BL

    mov si, offset oneMatrix
    mov cx, 1    ; ReplicationCount
    mov bh, 0    ; DisplayPage
More:

    ... position the cursor where next character has to go

    lodsb
    mov bl, 01h  ; BlueOnBlack
    cmp al '0'
    je  Go
    mov bl, 04h  ; RedOnBlack
Go:
    mov ah, 09h  ; BIOS.WriteCharacterWithAttribute
    int 10h

    ... iterate as needed

看看this recent answer。有一些相似之处...


如果您需要输出来在图形屏幕上创建字形,那么下面的代码会有所帮助:

    mov  si, offset oneMatrix
    mov  bh, 0      ; DisplayPage

    mov  bp, 8      ; Height
    mov  dx, ...    ; UpperleftY
OuterLoop:

    mov  di, 11     ; Width
    mov  cx, ...    ; UpperleftX
InnerLoop:
    lodsb
    cmp al '0'
    mov al, 1      ; Blue
    je  Go
    mov al, 4      ; Red
Go:
    mov ah, 0Ch    ; BIOS.WritePixel
    int 10h
    inc cx         ; Next X
    dec di
    jnz InnerLoop

    inc dx         ; Next Y
    dec bp
    jnz OuterLoop

【讨论】:

  • 好的,谢谢,我会调查一下,如果这解决了我的问题,请告诉您
  • @DiegoEsquivel 对于图形屏幕,您可以使用 BIOS.WritePixel 从矩阵中的数据创建字符字形。编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
相关资源
最近更新 更多