assembly x86(nasm)画三角形等图形的实现
参考了一位大佬的博客
https://blog.csdn.net/qq_40298054/article/details/84496944传送门
https://blog.csdn.net/qq_40818798/article/details/83758281
事情是这样的,原本愉快的一天因为一道题目而被毁掉
原题:

就很头疼(于是改成了输入三个坐标)

看一下成果:

代码如下:
data segment
message db 'This is a sample program of keyboard and display'
db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'
buf1 db
db ?
db dup('$')
x1 dw ?
y1 dw ?
x2 dw ?
y2 dw ?
a1 dw dup(?)
b1 dw dup(?)
s2 dw ?
s1 dw ?
p dw ?
xd dw ?
yd dw ?
area dw ?
data ends
code segment
assume cs:code,ds:data
;------------------------------------------------------------------------------------------------------------------------------------------
main proc
start:
mov ax,data
mov ds,ax
mov dx,offset message ;dxhang,cxshu
mov ah,
int 21h
mov al,12h ;320*200 256色的图形模式:
mov ah, ;是用来设定显示模式的服务程序
int 10h
xor di,di
mov cx,
loop0: push cx
call cin
mov a1[di],ax
call cin
mov b1[di],ax
add di,
pop cx
loop loop0
call area1
xor di,di
xor si,si
mov ax,a1[]
mov bx,b1[]
mov x1,ax
mov y1,bx
mov ax,a1[]
mov bx,b1[]
mov x2,ax
mov y2,bx
add si,
call chose
mov ax,a1[]
mov bx,b1[]
mov x1,ax
mov y1,bx
mov ax,a1[]
mov bx,b1[]
mov x2,ax
mov y2,bx
add si,
call chose
mov ax,a1[]
mov bx,b1[]
mov x1,ax
mov y1,bx
mov ax,a1[]
mov bx,b1[]
mov x2,ax
mov y2,bx
add si,
call chose
xor si,si
; mov x1,100 ;(10,100)
; mov y1,250
; mov x2,10 ;(100,250)
; mov y2,100
mov ah,4ch
int 21h
main endp
;------------------------------------------------------------------------------------------------------------------------------------------
row proc
mov cx,x1
mov bx,x2
cmp cx,bx
jb nextr
xchg cx,bx
nextr: mov dx,y1
; mov cx,10 ;x坐标
; mov bx,100 ;终止x坐标
; mov dx,250 ;y坐标
int 10h
pheng:
mov al,1100b ;淡红色
mov ah,0ch ;写入点像
inc cx ;
cmp cx,bx
int 10h
jne pheng
ret
row endp
;------------------------------------------------------------------------------------------------------------------------------------------
line proc
mov dx,y1
mov bx,y2
cmp dx,bx
jb nextl
xchg dx,bx
nextl: mov cx,x1
; mov cx,10 ;x坐标
; mov bx,250 ;终止y坐标
; mov dx,100 ;y坐标
int 10h
pshu:
mov al,1100b ;淡红色
mov ah,0ch ;写入点像
inc dx ;
cmp dx,bx
int 10h
jne pshu
ret
line endp
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
paint proc
call compare1
mov ax,x2
mov bx,x1
cmp ax,bx
jae dpos1
sub bx,ax
mov s1,-
mov xd,bx
jmp d1
dpos1:
sub ax,bx
mov s1,
mov xd,ax
d1:
mov ax,y2
mov bx,y1
cmp ax,bx
jae dpos2 ;y2>=y1
sub bx,ax ;y2<y1
mov s2,-
mov yd,bx
jmp d2
dpos2:
sub ax,bx
mov s2,
mov yd,ax
d2:
add ax,ax
mov bx,xd
sub ax,bx
mov p,ax ;2dy-dx
mov cx,x1
mov dx,y1
pxie:
mov al,1100b ;淡红色
mov ah,0ch ;写入点像
int 10h
mov ax,p
mov bx,
cmp ax,bx
jge ppos ;p>=0
jl pneg ;p<0
ppos:
mov ax,xd
mov bx,yd
cmp ax,bx
ja ddpos1 ;xd>yd
jbe ddneg1 ;xd<=yd
ddpos1: ;0<k<1 或者 -1<k<0 同时 p>=0
mov ax,x1 ;x=x+1
mov bx,s1
add ax,s1
mov x1,ax
mov ax,s2 ;y=y+1
mov bx,y1
add bx,ax
mov y1,bx
mov ax,p ;Pn+1=Pn+2(dy-dx)
mov bx,xd
mov cx,yd
add bx,bx
add cx,cx
sub cx,bx
add ax,cx
mov p,ax
jmp plot
ddneg1: ;k>1 或者 k<-1 同时 p>=0
mov ax,y1 ;y=y+1
inc ax
mov y1,ax
mov ax,s1 ;x=x+1 或者 x=x-1
mov bx,x1
add bx,ax
mov x1,bx
mov ax,p ;Pn+1=Pn+2(dx-dy)
mov bx,xd
mov cx,yd
add bx,bx
add cx,cx
sub bx,cx
add ax,bx
mov p,ax
jmp plot
pxie1:
jmp pxie
pneg:
mov ax,xd
mov bx,yd
cmp ax,bx
ja ddpos2 ;xd>yd
jbe ddneg2 ;xd<=yd
ddpos2: ;0<k<1 或者 -1<k<0 同时 p<0
mov ax,x1 ;x=x+1
mov bx,s1
add ax,s1
mov x1,ax
mov ax,p ;Pn+1=Pn+2dy
mov bx,yd
add bx,bx
add ax,bx
mov p,ax
jmp plot
ddneg2: ;k>1 或者 k<-1 同时 p<0
mov ax,y1 ;y=y+1
inc ax
mov y1,ax
mov ax,p ;Pn+1=Pn+2dx
mov bx,xd
add bx,bx
add ax,bx
mov p,ax
jmp plot
plot:
mov cx,x1 ;X坐标
mov dx,y1 ;Y坐标
cmp cx,x2 ;是否绘图完毕
jne pxie1
ret
paint endp
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
;compare0 proc ;trangle
; xor si,si
; mov ax,a1[]
; mov bx,a2
; cmp ax,bx
; je test1
; jmp test2
;test1:
; mov ax,a1
; mov bx,a3
; cmp ax,bx
; je Utrangle
;test2:
; mov ax,b1
; mov bx,b2
; cmp ax,bx
; je text3
; jmp exit
;test3:
; mov ax,b1
; mov bx,b3
; cmp ax,bx
; je text3
; jmp exit
;Utrangle:
; mov ah,4ch
; int 21
;exit:
; ret
;compare0 endp
;------------------------------------------------------------------------------------------------------------------------------------------
compare1 proc
mov ax,y1
mov bx,y2
cmp ax,bx
jna unch
mov y1,bx
mov y2,ax
mov ax,x1
mov bx,x2
mov x1,bx
mov x2,ax
unch:
ret
compare1 endp
;------------------------------------------------------------------------------------------------------------------------------------------
cin proc
xor cx,cx
xor si,si
again: mov dx,offset buf1 ;dxhang,cxshu
mov ah,0ah
int 21h
mov cl,buf1[si+]
push cx
change:
mov al,buf1[si+]
and al,00001111b ;根据ascii,减去30h
mov buf1[si+],al
inc si
loop change
sum:
xor ax,ax
mov si,
pop cx
loopc: mov bl,
mul bl
add al,buf1[si]
inc si
loop loopc
push ax
mov ah,02h ;回车换行
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop ax
ret
cin endp
;------------------------------------------------------------------------------------------------------------------------------------------
moving proc
mov ax,a1[si]
mov bx,b1[si]
mov x1,ax
mov y1,bx
mov ax,a1[si]
mov bx,b1[si]
mov x1,ax
mov y1,bx
add si,
ret
moving endp
;------------------------------------------------------------------------------------------------------------------------------------------
chose proc
mov ax,x1
cmp ax,x2
je line1
mov ax,y1
cmp ax,y2
je row1
call paint
jmp exitc
row1:
call row
jmp exitc
line1:
call line
jmp exitc
exitc:
ret
chose endp
;------------------------------------------------------------------------------------------------------------------------------------------
area1 proc ;2.S=1/2[(x1y2-x2y1)+(x2y3-x3y2)+(x3y1-x1y3)]65,536
mov ax,a1[];
mov bx,b1[];
mul bx
mov area,ax
mov ax,a1[];
mov bx,b1[];
mul bx
sub area,ax
mov ax,a1[];
mov bx,b1[];
mul bx
add area,ax
mov ax,a1[];
mov bx,b1[];
mul bx
sub area,ax
mov ax,a1[];
mov bx,b1[];
mul bx
add area,ax
mov ax,a1[];
mov bx,b1[];
mul bx
sub area,ax
mov ax,area
cmp ax,8000h ;与0比较
jb to
neg ax
to: mov bx,
div bx
mov area,ax
loopb1:
xor dx,dx
inc cl
mov bx,
div bx ;ax商,dx余
push dx ;余数入栈
cmp ax,
jne loopb1
loopc1:
pop dx
or dl,00110000b
mov ah,
int 21h
loop loopc1
ret
area1 endp
;------------------------------------------------------------------------------------------------------------------------------------------
code ends
end start
;1.p=1/2(a+b+c) s=gp(p-a)(p-b)(p-c)
;2.S=1/2[(x1y2-x2y1)+(x2y3-x3y2)+(x3y1-x1y3)]
还好,也就400来行。。。。
assembly x86(nasm)画三角形等图形的实现的更多相关文章
- assembly x86(nasm)画三角形等图形的实现(升级版)
https://www.cnblogs.com/lanclot-/p/10962702.html接上一篇 本来就有放弃的想法,可是有不愿退而求次, 然后大神室友写了一个集海伦公式计算三角形面积, 三点 ...
- CSS深入了解border:利用border画三角形等图形
三角形实际上是border的产物 我们正常使用的border都是四边一个颜色,当我们把四边换上不同颜色 那么你就会发现,三角来了~! <!DOCTYPE html> <html la ...
- assembly x86(nasm)修改后的日常
data segment ENG db 'SUNdayS Coming I Wanna Drive My Car,SUN,SUN$' ;9,3 sun1 db 'SUN' swcount db 0ah ...
- assembly x86(nasm)子程序1
T: 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来.要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示. 思路: Main主调程 ...
- assembly x86(nasm)的日常
cs的日常打卡. data segment ENG db 'SUNdayS Coming I Wanna Drive My Car,SUN,SUN$' ;43,35 sun1 db 'SUN' swc ...
- assembly x86(nasm)串比较
预留字符串口令,输入口令串与预留密码串比较.若匹配则显示“MATCH!CONGRATULATION”,否则显示“NOMATCH!”,并让用户重新输入,程序能对口令进行测试,但测试次数最多3次,若3次输 ...
- assembly x86(nasm)选择排序
有一个首地址为NUM的N字无序无符号整数数组,编制程序采用选择排序法使该数组中的数按照从小到大的次序排序输出. 选择排序: data segment message db 'This is a pro ...
- css3画三角形的原理
以前用过css3画过下拉菜单里文字后面的“下拉三角符号”,类似于下面这张图片文字后面三角符号的效果 下面是一个很简单的向上的三角形代码 #triangle-up { width: 0; height: ...
- iOS开发UI-利用Quartz2D 实现基本绘图(画三角形、矩形、圆、圆弧)
1.画三角形 运行结果如下 1.1具体实现步骤 1.1.1首先新建一个project,然后自定义一个view 1.2代码 #import "htingShapeView.h" @ ...
随机推荐
- 为编译器的实现者提供一个精确的定义:ANSI C
编译器的实现 常用C++编译器推荐_w3cschool https://www.w3cschool.cn/cpp/cpp-zxm72ps8.html 常用C++编译器推荐 由 Alma 创建, 最后一 ...
- MySQL常用语句汇总--持续更新(2017-08-10)
修改表的字段结构: 表:mission_picture,新增字段:content,字段类型:text ALTER TABLE mission_picture ADD content text:
- 《打造Facebook》
王淮的<打造Facebook>一书不厚,花半天时间轻松读完.书中没有大段的说教,只有近乎流水的陈述.正如作者所说,打造Facebook这本书由巴克伯格来写再合适不过.可惜他至少在近几年内没 ...
- PPTP&L2TP&PPPOE client and server configure
一. PPPOE 1. server(参考http://laibulai.iteye.com/blog/1171898) (1)安装rp-pppoe:yum install rp-pppoe (2)配 ...
- (转)windows一台电脑添加多个git账号
版权声明:技术总结来自互联网,书籍,以及工作积累.如果觉得我的总结有帮助,欢迎分享. https://blog.csdn.net/qq1332479771/article/details/701496 ...
- APP上线审核注意事项
基本要点 · 不能导致手机故障(比如崩溃或屏幕问题) · 长时间/过度使用之后反应仍然很快 · 应用内的所有价格信息中不能用固定值代替可变变量 · ...
- ffmpeg入门基础知识
获取ffmpeg源代码 如果你是在Windows环境下,则可以先装SVN的一个客户端TortoiseSVN(非常好用,强烈推荐),他安装完成后会集成在右键菜单中,点Checkout菜单,在弹出的界面中 ...
- 用php描述二分查找法
//二分查找 $arr = array(0,1,2,3,4,5,6,7,8,9); function bin_sch($array, $low, $high, $k){ if ($low <= ...
- 如何应用 AutoIt 修改本机的防火墙配置?(开启,关闭防火墙,添加程序信任到防火墙)
以前,公司的实施人员配置好项目之后,不同的机器之间经常性的无法建立链接,后来发现是防火墙的设置.虽然是个小问题,但是经常性的忘记这个配置. 现在,我决定把对防火墙的设置,加入到我给实施人员的配置工具中 ...
- 关于yolov3 训练输出值
Region xx: cfg文件中yolo-layer的索引: Avg IOU:当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1: Class: 标注物体的分类准确率,越大越 ...