8086程序集中文本用户界面的字符大小错误

时间:2017-05-21 20:08:58

标签: assembly nasm x86-16 dosbox

我尝试使用DOS的字符集进行简单的TUI但是当我写字符时它们是非常分离的:

enter image description here

我尝试了几种文本模式但没有成功。 (我使用此页面作为参考:http://www.ctyme.com/intr/rb-0069.htm

我使用DOSBOX和NASM。

pd:如果我的问题不明确

我有这个:enter image description here

我想要这个:enter image description here

这是我的代码:

[bits 16]
org  0x100

segment .text
    global main

main:
    ; Ajustamos el modo de video
    mov ah,00h
    mov al,04h ; I tried with 01h,03h
    int 10h

    ; Dibujamos el campo de juego
    call draw_ui

    ; Terminamos la apliacion
    mov ah,00h
    int 21h

draw_ui:
    mov ah,02h   ; Posicionamos el cursor
    mov dh,6     ; en la esquina superior
    mov dl,17    ; izquierda del campo de
    mov bh,0x0
    int 10h      ; juego.

    mov ah,02h   ; Imprimimos el caracter
    mov dl,0xc9  ; correspondiente a la
    int 21h      ; esquina del campo

    mov bl,6
    call draw_top_ui

    mov ah,03
    int 10h

    mov ah,02h
    inc dl
    mov bh,0x0
    int 10h

    mov ah,02h
    mov dl,0xbb
    int 21h

    ret

draw_top_ui:
    mov ah,03     ; Obtenemos la posicon
    int 10h       ; del cursor

    mov ah,02h    ; Movemos el cursor una
    inc dl        ; columna a la derecha
    mov bh,0x0
    int 10h

    mov ah,02h    ; Imprimimos el caracter
    mov dl,0xcd   ; de la parte superiro
    int 21h       ; del campo de juego

    dec bl        ; hacemos esto 6 veces
    jnz draw_top_ui
    ret

1 个答案:

答案 0 :(得分:4)

mov ah,00h
mov al,04h
int 10h

模式04h不是文本屏幕!
尝试01x,40x25文本屏幕。

mov ah,03
int 10h

mov ah,02h
inc dl
int 10h

读取和写入光标位置时,必须在BH寄存器中指定显示页面!使用BH = 0。

主要问题当然是用DOS输出字符 DOS已将光标移动到右侧!之后再次增加光标。这会在角色之间产生额外的空间。

如果您坚持自己管理光标位置,那么请使用BIOS字符输出功能0Ah。这个不会自动更新光标。