我的目标是使用汇编语言制作棋盘,所以我试图在一个白色的大盒子上打印一个小灰盒子,但是一旦在屏幕上打印出灰色框,白色盒子就会消失。我试过搜索谷歌但无法找到答案。另外,使用组装制作国际象棋棋盘有更好的方法吗?
这是我的代码。
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
答案 0 :(得分:2)
mov ah, 0 mov al, 11h int 10h ... mov ah, 0 mov al, 13h int 10h
您在操作之间重置视频模式!难怪第一个盒子消失了。
答案 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:
...