为什么汇编语言绘制一个矩形却只能显示一条边

为什么汇编语言绘制一个矩形,却只能显示一条边

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