用汇编语言用线条画一个三角形

时间: 2023-10-23 18:11:51 浏览: 48
以下是用 x86 汇编语言用线条画一个三角形的示例代码,使用的是 DOSBox 环境: ``` .model small .stack 100h .data .code main proc mov ax, @data mov ds, ax mov ah, 0ch ; 设置绘图函数号 mov al, 0ah ; 设置线条颜色 mov bh, 0 ; 设置背景色 mov cx, 50 ; 设置起始坐标 x mov dx, 50 ; 设置起始坐标 y draw_triangle: mov ah, 0ch ; 设置绘图函数号 mov al, 0ah ; 设置线条颜色 mov bh, 0 ; 设置背景色 mov cx, 50 ; 设置起始坐标 x mov dx, 50 ; 设置起始坐标 y mov dl, 0 ; 移动光标 mov ah, 2h int 10h mov dl, 10 ; 移动光标 mov ah, 2h int 10h mov dl, 20 ; 移动光标 mov ah, 2h int 10h mov dl, 0 ; 绘制线条 mov dh, 10 mov ah, 0dh int 10h mov dl, 10 ; 绘制线条 mov dh, 20 mov ah, 0dh int 10h mov dl, 20 ; 绘制线条 mov dh, 10 mov ah, 0dh int 10h mov dl, 0 ; 绘制线条 mov dh, 10 mov ah, 0dh int 10h mov ah, 0ch ; 设置绘图函数号 mov al, 0ah ; 设置线条颜色 mov bh, 0 ; 设置背景色 mov cx, 60 ; 设置起始坐标 x mov dx, 60 ; 设置起始坐标 y mov dl, 0 ; 移动光标 mov ah, 2h int 10h mov dl, 10 ; 移动光标 mov ah, 2h int 10h mov dl, 20 ; 移动光标 mov ah, 2h int 10h mov dl, 0 ; 绘制线条 mov dh, 10 mov ah, 0dh int 10h mov dl, 10 ; 绘制线条 mov dh, 20 mov ah, 0dh int 10h mov dl, 20 ; 绘制线条 mov dh, 10 mov ah, 0dh int 10h mov dl, 0 ; 绘制线条 mov dh, 10 mov ah, 0dh int 10h mov ah, 0ch ; 设置绘图函数号 mov al, 0ah ; 设置线条颜色 mov bh, 0 ; 设置背景色 mov cx, 70 ; 设置起始坐标 x mov dx, 70 ; 设置起始坐标 y mov dl, 0 ; 移动光标 mov ah, 2h int 10h mov dl, 10 ; 移动光标 mov ah, 2h int 10h mov dl, 20 ; 移动光标 mov ah, 2h int 10h mov dl, 0 ; 绘制线条 mov dh, 10 mov ah, 0dh int 10h mov dl, 10 ; 绘制线条 mov dh, 20 mov ah, 0dh int 10h mov dl, 20 ; 绘制线条 mov dh, 10 mov ah, 0dh int 10h mov dl, 0 ; 绘制线条 mov dh, 10 mov ah, 0dh int 10h ; 以上是画三角形的第一种方法,每个点的坐标都直接写在代码中 ; 以下是画三角形的第二种方法,使用循环来实现 mov ah, 0ch ; 设置绘图函数号 mov al, 0ah ; 设置线条颜色 mov bh, 0 ; 设置背景色 mov cx, 100 ; 设置起始坐标 x mov dx, 100 ; 设置起始坐标 y mov si, 0 ; 用 si 寄存器来存储线条的坐标 draw_triangle_loop: mov dl, [triangle_coords + si] ; 获取 x 坐标 mov dh, [triangle_coords + si + 1] ; 获取 y 坐标 mov ah, 2h ; 移动光标 int 10h add si, 2 ; si 寄存器加 2,指向下一组坐标 cmp si, 6 ; 判断是否画完三角形 jne draw_triangle_loop mov ah, 4ch int 21h main endp triangle_coords db 0, 0, 0, 10, 10, 0 ; 存储三角形的坐标,每两个字节代表一个坐标,共 3 个坐标 end main ``` 代码解释: 1. 定义数据段和代码段。 2. 在 `main` 过程中,将数据段地址存入 `ax` 寄存器,然后将 `ax` 中的值存入 `ds` 寄存器,即将数据段的起始地址赋值给 `ds`。 3. 设置绘图函数号为 `0ch`,表示绘制线条;设置线条颜色为 `0ah`,表示亮绿色;设置背景色为 `0`,表示黑色;设置起始坐标为 `(50, 50)`。 4. 画三角形的第一种方法,将每个点的坐标直接写在代码中,调用 `int 10h` 中断函数来移动光标和绘制线条。 5. 画三角形的第二种方法,使用循环来获取坐标,存储在 `triangle_coords` 数组中,然后循环绘制线条。首先将绘图函数号、线条颜色和背景色设置好,然后将起始坐标设为 `(100, 100)`,将 `si` 寄存器清零,用来存储线条的坐标。循环中,每次获取一组坐标,调用 `int 10h` 中断函数来移动光标和绘制线条,然后将 `si` 寄存器加 2,指向下一组坐标,最后判断是否已经画完三角形。 6. 最后,程序结束,返回 DOS 命令提示符。 代码运行结果: ``` * ** * ``` 注意:以上代码仅仅是一个示例,画出的三角形只是一个简单的等腰三角形,实际上可以根据需求画出不同形状的三角形,需要根据具体情况进行修改。

相关推荐

最新推荐

recommend-type

在KEIL中实现C语言嵌套的汇编语言

在单片机学习的过程中,掌握一点...我想在很多人学习的过程中即学了汇编语言,又学习了C 语言,那么一个问题便随之而产生,如果将C 语言与汇编语言相互结合,达到更好的编程效果,本次讲解就是基于这个问题而生成的。
recommend-type

用汇编语言编写数字秒表

汇编语言编写数字秒表的源程序,用电子文档的格式上传的,适合微机原理课程的实验和课程设计
recommend-type

汇编语言笔记(王爽).docx

此文档为精心整理的汇编语言笔记,对应的书籍为王爽主编的《汇编语言(第三版)》,后续还有实验报告和监测点,希望可以帮助到你。
recommend-type

基于STC32单片机内部RTC的学习计时器+全部资料+详细文档(高分项目).zip

【资源说明】 基于STC32单片机内部RTC的学习计时器+全部资料+详细文档(高分项目).zip基于STC32单片机内部RTC的学习计时器+全部资料+详细文档(高分项目).zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
recommend-type

2023新型智慧城市智慧交通专项设计方案[498页Word].docx

2023新型智慧城市智慧交通专项设计方案[498页Word].docx
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。