为什么汇编语言绘制一个矩形,却只能显示一条边
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE
START:
push ds
mov ax,0
push ax
mov ah,06h ;清屏
mov al,0
mov cl,0
mov ch,0
mov dl,79
mov dh,24
int 10h
mov ah,0 ;设置320x200彩色图形模式
mov al,04h;04模式
int 10h
mov ah,09h ;设置颜色
mov bh,0
mov bl,02h
int 10h
;;;;;;;;
mov cx,50 ;设置初始列坐标0
mov dx,50;初始行坐标100
next:
mov al,bl ;设置颜色
mov ah,0ch ;写像素,显示一个点
int 10h
inc cx
cmp cx,150
jne next ;写下一个像素
ret
next1:
mov al,bl ;设置颜色
mov ah,0ch ;写像素,显示一个点
int 10h
inc dx
cmp dx,150
jne next1 ;写下一个像素
ret
MAIN ENDP
CODE ENDS
END MAIN
环境
VSCode 2022
MASM V5.00 on dosbox
以下回答参考GPT并且由Bony-整理:根据你提供的代码,可以看到你只绘制了一条水平线,这是因为你只在水平方向上进行了循环写像素点,没有在垂直方向上进行循环。如果你想绘制一个完整的矩形,可以使用两个循环,一个循环用于绘制水平线,另一个循环用于绘制垂直线。以下是修改后的代码:
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE
START:
push ds
mov ax,0
push ax
mov ah,06h ;清屏
mov al,0
mov cl,0
mov ch,0
mov dl,79
mov dh,24
int 10h
mov ah,0 ;设置320x200彩色图形模式
mov al,04h;04模式
int 10h
mov ah,09h ;设置颜色
mov bh,0
mov bl,02h
int 10h
;绘制水平线
mov cx,50 ;设置初始列坐标50
mov dx,50 ;设置初始行坐标50
next1:
mov al,bl ;设置颜色
mov ah,0ch ;写像素,显示一个点
int 10h
inc cx
cmp cx,150
jne next1 ;写下一个像素
;绘制垂直线
mov cx,50 ;设置初始列坐标50
mov dx,50 ;设置初始行坐标50
next2:
mov al,bl ;设置颜色
mov ah,0ch ;写像素,显示一个点
int 10h
inc dx
cmp dx,150
jne next2 ;写下一个像素
;绘制水平线
mov cx,50 ;设置初始列坐标50
mov dx,150 ;设置初始行坐标150
next3:
mov al,bl ;设置颜色
mov ah,0ch ;写像素,显示一个点
int 10h
inc cx
cmp cx,150
jne next3 ;写下一个像素
;绘制垂直线
mov cx,150 ;设置初始列坐标150
mov dx,50 ;设置初始行坐标50
next4:
mov al,bl ;设置颜色
mov ah,0ch ;写像素,显示一个点
int 10h
inc dx
cmp dx,150
jne next4 ;写下一个像素
ret
MAIN ENDP
CODE ENDS
END MAIN