80X86汇编_绘制五角星程序
DATAS SEGMENT
mode  dw 0
COLOR DW 12
BKCOLOR DW 15
POINT dw 160,200,480,200,480,200,220,380
      dw 220,380,320,80,320,80,420,380
      dw 420,380,160,200
DATAS ENDS

STACKS SEGMENT
DW 200 DUP(0)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
   mov dx,datas
   mov ds,ax
   mov ah,0fh
   int 10h
   mov ah,0
   mov mode,ax;保存原显示模式
   MOV AX,0012H
   INT 10H ;设置640*480*16图形模式
   nop
Q6:MOV AX,DATAS
MOV DS,AX
MOV AX,0A000H
MOV ES,AX
MOV AL,2
CALL SET_WRITE_MODE
MOV AX,BKCOLOR
CALL CLEAR
MOV CX,5
MOV SI,OFFSET POINT
DDD: PUSH CX
PUSH SI
MOV AX,[SI]
PUSH AX
MOV AX,[SI+2]
PUSH AX
MOV AX,[SI+4]
PUSH AX
MOV AX,[SI+6]
PUSH AX
CALL LINE
POP SI
ADD SI,8
POP CX
LOOP DDD
mov ah,0
int 16h
mov ax,mode;恢复原显示模式
int 10h
MOV AX,4C00H
INT 21H

;设置写模式
SET_WRITE_MODE:
PUSH AX
MOV DX,3CEH
MOV AL,5
OUT DX,AL
MOV DX,3CFH
POP AX
OUT DX,AL
MOV DX,3CEH
MOV AL,8
OUT DX,AL
MOV DX,3CFH
MOV AL,0FFH
OUT DX,AL
RET
;* * * 清屏 * * *
CLEAR:
MOV BX,0
CLR1: MOV ES:[BX],AL
INC BX
CMP BX,80*480
jb CLR1
RET
;计算线上各点坐标
LINE:
PUSH BP
MOV BP,SP
SUB SP,16
MOV WORD PTR[BP-6],0 ;X=0
MOV WORD PTR[BP-8],0 ;Y=0
MOV WORD PTR[BP-14],1 ;INCX=1
MOV WORD PTR[BP-16],1 ;INCY=1
MOV AX,WORD PTR[BP+6] ;AX<=X2
SUB AX,WORD PTR[BP+10] ;AX<=X2-X1
JNC L1 ;IF X2>=X1,JMP L1
NEG AX ;IF X2<X1,DELTA_X=-DELTA_X
MOV WORD PTR[BP-14],-1 ;INCX<=-1
L1: CMP AX,0 ;IF DELTA_X!=0,JMP L11
JNE L11 ;
MOV WORD PTR[BP-14],0 ;INCX<=0
L11: MOV WORD PTR[BP-10],AX ;DELTA_X<=AX SP-> | |
MOV AX,WORD PTR[BP+4] ;AX<=Y2 | INCY |
SUB AX,WORD PTR[BP+8] ;AX<=Y2-Y1 | INCX |<-BP-14
JNC L2 ;IF Y2>=Y1,JMP L2 | DELTA_Y|<-BP-12
NEG AX ;IF Y2<Y1,DELTA_Y=-DELTA_Y | DELTA_X|<-BP-10
MOV WORD PTR[BP-16],-1 ;INCY<=-1 | Y |<-BP-8
L2: CMP AX,0 ;IF DELTA_Y!=0,JMP L22 | X |<-BP-6
JNE L22 ; |DISTANCE|<-BP-4
MOV WORD PTR[BP-16],0 ;INCY<=0 | T |<-BP-2
L22: MOV WORD PTR[BP-12],AX ;DELTA_Y<=AX | BP |<-BP
LP4: MOV AX,WORD PTR[BP-10] ;AX<=DELTA_X |返回地址|<-BP+2
CMP AX,WORD PTR[BP-12] ; | Y2 |<-BP+4
JG LP5 ;DELTA_X>DELTA_Y | X2 |<-BP+6
MOV AX,WORD PTR[BP-12] ; | Y1 |<-BP+8
MOV WORD PTR[BP-4],AX ;DISTANCE<=DELTA_Y | X1 |<-BP+10
JMP LP51 ; | |
LP5: MOV AX,WORD PTR[BP-10] ; LINE堆栈结构
MOV WORD PTR[BP-4],AX ;DISTANCE<=DELTA_X
LP51: INC AX
MOV WORD PTR[BP-2],AX
LP6: PUSH WORD PTR[BP+10]
PUSH WORD PTR[BP+8]
PUSH COLOR
CALL PIXEL
MOV AX,WORD PTR[BP-6] ;AX<=X
ADD AX,WORD PTR[BP-10] ;AX<=X+DELTA_X
MOV WORD PTR[BP-6],AX ;X=X+DELTA_X
MOV AX,WORD PTR[BP-8] ;AX<=Y
ADD AX,WORD PTR[BP-12] ;AX<=Y+DELTA_Y
MOV WORD PTR[BP-8],AX ;Y=Y+DELTA_Y
MOV AX,WORD PTR[BP-6] ;AX<=X
CMP AX,WORD PTR[BP-4]
JLE LP7 ;IF X<=DISTANCE,JMP LP7
MOV AX,WORD PTR[BP-6] ;X>DISTANCE
SUB AX,WORD PTR[BP-4] ;AX<=X-DISTANCE
MOV WORD PTR[BP-6],AX ;X=X-DISTANCE
MOV AX,WORD PTR[BP+10] ;AX<=X1
ADD AX,WORD PTR[BP-14] ;AX<=X1+INCX
MOV WORD PTR[BP+10],AX ;X1=X1+INCX
LP7: MOV AX,WORD PTR[BP-8] ;AX<=Y
CMP AX,WORD PTR[BP-4]
JLE LP8 ;IF Y<=DISTANCE,JMP LP8
MOV AX,WORD PTR[BP-8] ;Y>DISTANCE
SUB AX,WORD PTR[BP-4] ;AX<=Y-DISTANCE
MOV WORD PTR[BP-8],AX ;Y=Y-DISTANCE
MOV AX,WORD PTR[BP+8] ;AX<=Y1
ADD AX,WORD PTR[BP-16] ;AX<=Y1+INCY
MOV WORD PTR[BP+8],AX ;Y1=Y1+INCY
LP8: DEC WORD PTR[BP-2] ;IF T!=0,JMP LP6
jnz LP6
LP9: MOV SP,BP
POP BP
RET 8
;* * * 画点 * * *
PIXEL:
PUSH BP
PUSH BX
PUSH CX
PUSH DS
MOV BP,SP
MOV AX,80
MOV BX,WORD PTR[BP+12] ;BX<=Y
MUL BX ;(DX:AX)<=80*Y
MOV BX,AX ;
MOV AX,WORD PTR[BP+14] ;AX<--X
MOV CL,8 ; | |
DIV CL ;AL<=商(X/8),AH<=余数(X%8) SP-> | |
MOV CL,AH ;CL<=AH | DS |<-BP
MOV AH,0 ; | CX |<-BP+2
ADD BX,AX ;BX(OFFSET)<=80*Y+X/8 | BX |<-BP+4
MOV AL,80H ; | BP |<-BP+6
SHR AL,CL ;AL(MASK)<=(80H>>CL) |返回地址|<-BP+8
PUSH AX ; | COLOR |<-BP+10
MOV DX,3CEH ; | Y |<-BP+12
MOV AL,8 ; | X |<-BP+14
OUT DX,AL ; | |
MOV DX,3CFH ; PIXEL堆栈结构
POP AX
OUT DX,AL
MOV AL,ES:[BX]
MOV AX,WORD PTR[BP+10] ;AX<=COLOR
MOV BYTE PTR ES:[BX],AL
POP DS
POP CX
POP BX
POP BP
RET 6

CODES ENDS
END START

80X86汇编_绘制五角星程序相关推荐

  1. python五角星教程_绘制五角星_清华尹成python入门教程_少儿编程视频-51CTO学院

    此课程与<清华编程高手.尹成.带你实战python入门>大体相同,只需购买其中的一门课程. 本课程由清华大学尹成老师录制,课程的特色在于讲解原理的同时引入了每个程序员都热衷的黑客技术.py ...

  2. python画五角星为什么144度_使用turtle绘制五角星、分形树

    本文实例为大家分享了使用turtle绘制五角星和分形树的具体代码,供大家参考,具体内容如下 turtle 库 与之前程序的区别: 没有显示的input()与output() 没有赋值语句 大部分语句为 ...

  3. 怎么用python海龟画五角星_海龟编辑器五角星怎么画 绘制五角星就是这么简单...

    海龟编辑器作为一款面向少儿的Python编辑器,它可以让孩子通过图形化的方式学习Python,很多用户在刚开始使用时不知道怎么绘制最基本的图形,小编将绘制五角星的方式通过两种方法进行讲解,想知道的赶快 ...

  4. 如何用python的turtle画五角星_海龟编辑器五角星怎么画 绘制五角星就是这么简单...

    海龟编辑器作为一款面向少儿的Python编辑器,它可以让孩子通过图形化的方式学习Python,很多用户在刚开始使用时不知道怎么绘制最基本的图形,小编将绘制五角星的方式通过两种方法进行讲解,想知道的赶快 ...

  5. python画五角星为什么144度_海龟编辑器五角星怎么画 绘制五角星就是这么简单...

    海龟编辑器作为一款面向少儿的Python编辑器,它可以让孩子通过图形化的方式学习Python,很多用户在刚开始使用时不知道怎么绘制最基本的图形,小编将绘制五角星的方式通过两种方法进行讲解,想知道的赶快 ...

  6. python画五角星和六角星程序_Python绘制五角星!

    问题描述: python中运用turtle图形模块绘制五角星 问题分析: Python资源共享群:626017123 turtle绘制图形时,得知图形中重要点的坐标非常重要. 于是,绘制五角星问题转化 ...

  7. 80X86汇编—存储器的变址寻址

    前言 本博文将讲解 80X86汇编中的 变址寻址,缘由是笔者对照 <80X86汇编语言程序设计_王元珍.pdf>学习时 遇到的困惑.比例因子 含义是啥 为啥要乘以它? 基本概念 相关概念和 ...

  8. python画五角星-Python第八课 绘制五角星1.0

    第八课 绘制五角星1.0 学习目标: 1. 了解并学会使用turtle库. 2. 复习while循环. 教学重难点: turtle库的使用. 学习内容: 案例2: 使用turtle 库在Python中 ...

  9. Win32汇编_基础

    Win32汇编_基础 包含全部段的源程序结构: .386 .model flat, stdcall Option casemap:none ;<一些include语句> .stack [堆 ...

最新文章

  1. MSSQL扫盲系列(4)-系统函数
  2. 面试官:啥是集群策略啊?
  3. systemd设置静态IP
  4. Day 13: Dropwizard —— 非常棒的Java REST服务器栈
  5. 2016.6.23 随笔———— AJAX
  6. cvs有机添加剂检测_汽车到底有没有必要添加燃油添加剂,如果需要加从什么时间开始用...
  7. [转载]ASPNET MVC表格呈现利器:MvcContrib.UI.Grid
  8. 2021年大学计算机基础,2021年大学计算机基础试题题库及答案-20210418080659.doc-原创力文档...
  9. 下载站mime属性设置(让文件可下载)
  10. 10月份都有哪些好看的韩剧?
  11. dfuse 现在正式面向商业部署
  12. golang sync.Map和map+mutex性能比较
  13. 帝国织梦和各种php网页将局部广告进行屏蔽搜索引擎蜘蛛
  14. python数据可视化学习
  15. 线程和线程间通信(C语言)
  16. 解决IDEA报错:Could not find resource mybatis-config.xml
  17. BATT集体发力搜索,争夺下一代搜索平台的“引路人”
  18. 卡尔曼滤波的五个公式
  19. Stall Reservations POJ
  20. 某城市的出租车计费标准为起步价10元(3公里内含3公里),在3公里到10公里(含10公里)之间每公里2.1元,超过10公里部分每公里3元。编写程序,用Python实现输入行车距离x,输出车费。

热门文章

  1. 面试典籍(整理于6.17-6.23)
  2. Javascript实现AES算法
  3. 施耐德M580系统时间的获取
  4. Pose Animator:使用实时TensorFlow.js模型的SVG动画工具
  5. Python爬虫之美丽的汤——BeautifulSoup
  6. UNI-APP小程序登录功能
  7. 足球历史上最成功的教练之一
  8. (超详细)互补格雷码+相移码求解包裹相位(Python实现)
  9. 三天学会网络爬虫之Day01
  10. 品味扬州的诗画美境界