### 汇编语言中的三角形绘制实验报告 #### 实验背景及目标 本次实验旨在通过编程实现从键盘输入三角形三个顶点的坐标,并在屏幕上输出由这三个顶点确定的三角形。实验主要涉及汇编语言编程以及利用DOS中断进行键盘输入和屏幕输出的操作。 #### 实验思路与分析 为了完成实验任务,本实验采用了模块化编程思想,将整个程序划分为两个主要部分: 1. **顶点坐标值输入模块**:负责接收用户从键盘输入的三个顶点坐标值。 2. **三角形绘制模块**:根据接收到的坐标值,在屏幕上绘制出相应的三角形。 ##### 顶点坐标值输入模块 该模块主要通过以下DOS中断实现功能: - 使用`INT 10H/03H`设置屏幕显示模式为字符模式。 - 使用`INT 16H/00H`从键盘获取输入的坐标值。 - 使用`INT 10H/0EH`将读取的坐标值打印到屏幕上。 在实际操作过程中,遇到的关键问题及其解决方案包括: - 如何判断用户输入的是几位数? - 解决方案:使用寄存器CX记录输入长度。如果CX等于1,则认为输入的是一个一位数;等于2则是两位数;等于3则是三位数。 - 如何确定当前输入的是哪一个坐标(x1、y1、x2、y2、x3或y3)? - 解决方案:使用SI寄存器来计数回车键的输入次数。例如,当SI等于1时,表明输入的是x1;当SI等于2时,表明输入的是y1,以此类推。 - 如何将ASCII码表示的数值转换为十进制数? - 解决方案:将从键盘读取的ASCII码值减去30H(即数字0的ASCII码),即可得到对应的十进制数值。 ##### 三角形绘制模块 该模块使用以下DOS中断来实现: - 使用`INT 10H/13H`设置屏幕显示模式为图形模式。 - 使用`INT 10H/0C15H`在屏幕上绘制线条。 在绘制过程中遇到的主要问题及其解决方案包括: - 当两点之间的坐标差值为负数时如何正确绘制? - 解决方案:使用带符号的乘除指令IMUL和IDIV来处理坐标差值,确保即使差值为负也能正确绘制出三角形。 #### 主体程序代码详解 下面是一段具体的主体程序代码示例,用于展示顶点坐标值输入模块的部分实现逻辑: ```assembly ; 设置视频模式 MOV AX, 3 INT 10H ; 设置文本模式 80x25, 16色,8页 START: LEA DX, MSG0 MOV AH, 9 INT 21H MOV CX, 0 MOV SI, 0 INPUTX1: ; 从键盘获取字符到AL寄存器 MOV AH, 00H INT 16H ; 打印字符 MOV AH, 0EH INT 10H MOV AH, 0 PUSH AX INC CX CMP AL, 0DH ; 检查是否是回车键 JE DD CMP AL, 30H ; 检查是否是数字0 JB LESS CMP AL, 39H ; 检查是否是数字9 JA LARGER JBE ENTER LESS: LEA DX, ERR1 JMP START LARGER: LEA DX, ERR1 JMP START ENTER: CMP AL, 0DH JNE INPUTX1 CMP CX, 2 JE DWX11 CMP CX, 3 JE DWX12 CMP CX, 4 JE DWX13 JA ERROR DWX11: POP BX POP BX SUB BX, 30H ; 将ASCII码转换为十进制 JMP XX DWX12: MOV BX, 0 POP AX POP BX SUB BX, 30H ; 将ASCII码转换为十进制 POP AX SUB AX, 30H ; 将ASCII码转换为十进制 MOV CL, 10 MUL CL ADD BX, AX JMP XX DWX13: POP AX MOV BX, 0 POP BX SUB BX, 30H ; 将ASCII码转换为十进制 MOV AX, 0 POP AX SUB AX, 30H ; 将ASCII码转换为十进制 MOV CL, 10 MUL CL ADD BX, AX MOV AX, 0 POP AX SUB AX, 30H ; 将ASCII码转换为十进制 MOV CL, 100 MUL CL ADD BX, AX XX: ; 判断输入的数字位数 CMP BX, 190 JA ERROR JMP DDX1 DDX1: CMP BL, 180 JA ERROR MOV X1, BL JMP INPUTY1 DY1: MOV Y1, BL JMP INPUTX2 DX2: CMP BL, 180 JA ERROR MOV X2, BL JMP INPUTY2 DY2: MOV Y2, BL JMP INPUTX3 ``` 这段代码展示了如何处理用户输入的坐标值,并将其转换为可用于计算的十进制数值。此外,还包括了错误检查机制,如超出范围的坐标值会触发错误处理流程。 本实验通过模块化的程序设计实现了从键盘输入三角形三个顶点的坐标,并在屏幕上输出由这三个顶点确定的三角形的功能。在整个过程中,不仅学习了汇编语言的基本编程技巧,还深入理解了DOS中断的应用以及如何解决实际编程中遇到的问题。
剩余10页未读,继续阅读
- ycp424c2012-06-28用masm运行不了啊。。。神马问题?
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助