汉疆唐土34 2023-05-02 21:34 采纳率: 100%
浏览 22
已结题

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

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

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

  • 写回答

1条回答 默认 最新

  • Bony- 2023-05-03 17:34
    关注

    以下回答参考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
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月11日
  • 已采纳回答 5月3日
  • 创建了问题 5月2日

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算