如何用汇编语言在另一个盒子的顶部打印一个盒子?

时间:2016-03-26 14:11:36

标签: assembly

我的目标是使用汇编语言制作棋盘,所以我试图在一个白色的大盒子上打印一个小灰盒子,但是一旦在屏幕上打印出灰色框,白色盒子就会消失。我试过搜索谷歌但无法找到答案。另外,使用组装制作国际象棋棋盘有更好的方法吗?

这是我的代码。

dosseg
.model small
.stack 0100h
.data
.code

    mov ax, @data
    mov ds, ax

    mov ah, 0
    mov al, 11h
    int 10h

    mov ah, 02h
    mov bh, 00h
    mov dh, 0Ch
    mov dl, 28h
    int 10h

    mov cx, 10
    mov dx, 10
    mov ah, 0ch

    colcount:
    inc cx
    int 10h
    cmp cx, 450
    JNE colcount

    mov cx, 10
    inc dx
    cmp dx, 450
    JNE colcount


    mov ax, @data
    mov ds, ax

    mov ah, 0
    mov al, 13h
    int 10h

    mov ah, 02h
    mov bh, 00h
    mov dh, 0Ch
    mov dl, 28h
    int 10h

    mov cx, 10
    mov dx, 10
    mov ah, 0ch

    colcount2:
    inc cx
    int 10h
    cmp cx, 30
    JNE colcount2

    mov cx, 10
    inc dx
    cmp dx, 30
    JNE colcount2

end

2 个答案:

答案 0 :(得分:2)

mov ah, 0
mov al, 11h
int 10h
...
mov ah, 0
mov al, 13h
int 10h

您在操作之间重置视频模式!难怪第一个盒子消失了。

  • 如果你只是在屏幕上放置图形像素,为什么还要设置光标呢?
  • 您似乎无法在任何地方设置颜色。进入AL进行功能0Ch。

答案 1 :(得分:1)

您已选择640x350 2色屏幕 您绘制的第一个框必须是白色的。现在你偶然得到这个!正如@Fifoernik所说,你需要在AL寄存器中指定一种颜色。

mov cx, 10
mov dx, 10
mov ah, 0ch
mov al, 1    ;This is white on a 2-color screen!
colcount:
...

要解决此问题,请先删除以下5行:

mov ax, @data
mov ds, ax
mov ah, 0
mov al, 13h
int 10h

现在通过指定AL = 0

来绘制较小的黑框
mov cx, 10
mov dx, 10
mov ah, 0ch
mov al, 0    ;This is black on a 2-color screen!
colcount2:
...