如何使用循环绘制正方形(int 10h)?

时间:2014-05-18 15:57:12

标签: assembly x86-16

你可以在10h的设置下使用21h的新线吗? 如果没有,那么如何通过8086设置10h的新线? 我试图做的是使用类似于正方形的循环。

org  100h

mov ah, 0   ; set display mode function.
mov al, 13h ; mode 13h = 320x200 pixels, 256 colors.
int 10h     ; set it!

mov cx, 10
mov dx, 10
mov ah, 0ch ; put pixel
int 10h

colcount:
inc cx
int 10h

cmp cx, 20
JNE colcount

rowcount:
inc cx
int 10h

cmp cx, 20
JNE rowcount

2 个答案:

答案 0 :(得分:4)

mov ah, 0   ; set display mode function.
mov al, 13h ; mode 13h = 320x200 pixels, 256 colors.
int 10h     ; set it!

mov cx, 10  ;col
mov dx, 10  ;row
mov ah, 0ch ; put pixel

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

mov cx, 10  ; reset to start of col
inc dx      ;next row
cmp dx, 30
JNE colcount

(根据您的代码) 这应该画一个正方形,

每次连续绘制20个像素(通过增加cx-col),然后转到下一行(增加dx-row) 并在该行中绘制20个像素。

这将通过在20行中每行绘制20个像素来创建一个正方形

答案 1 :(得分:1)

YonBruchim提出的答案确实在(11,10) - (30,29)绘制了一个20x20点的矩形,但是在(10,10)处加了一个额外的点! 此BIOS调用还需要您指定BH中的视频页码(大部分为0)和AL中的像素颜色(亮白色为15)。
正如Ruud已经指出的那样,永远不会假设任何API调用都会保留AX。

就我个人而言,我不喜欢像郎这样的结构 cmp cx,30 jne colcount
而是使用
cmp cx,30 jb colcount
如果CX'坐在后面,后者更宽容。在您期望的价值范围的错误一端!