https://www.cnblogs.com/lanclot-/p/10962702.html接上一篇

本来就有放弃的想法,可是有不愿退而求次,

然后大神室友写了一个集海伦公式计算三角形面积,

三点坐标计算的程序,

data segment
message db 'Please input 3 numbers',0dh,0ah,'$'
message1 db 'These numbers can not make up a triangle','$'
num db ?,?,?
zuobiao dw ?,?,?,?,?,?
n db ?,?,?,?
m db 'area=',?,?,?,?,?
crlf db 0dh,0ah,'$'
d dw ?,?,?,?
a db ?,?,?

data ends
stack segment para stack'stack'
db 50 dup(?)
code segment
assume ds:data,ss:stack,cs:code
start:mov ax,data
mov ds,ax
mov dx,offset message
mov ah,9
int 21h
mov di,0
again:mov ah,1 ;输入3个数(ps:为了设计的方便,只能输入3个10以内的整数)
int 21h
and al,00001111b
mov num[di],al
mov dx,offset crlf
mov ah,9
int 21h
inc di
cmp di,3
jb again

mov al,num[1] ;将输入的数按从大到小排序
cmp al,num[2]
jb continue
mov bl,num[2]
mov num[1],bl
mov num[2],al
mov al,bl
continue:cmp al,num[0]
jnb inspect
mov bl,num[0]
mov num[0],al
mov num[1],bl
cmp bl,num[2]
jb inspect
mov al,num[2]
mov num[1],al
mov num[2],bl

inspect:mov al,num[0] ;检查是否满足形成三角形的条件
add al,num[1]
cmp al,num[2]
jna tip
mov al,num[2]
sub al,num[1]
cmp al,num[0]
jnb tip
jmp area
tip:mov dx,offset message1
mov ah,9
int 21h
jmp exit
;利用海伦公式求三角形面积
area:mov al,num[0] ;a+b+c=?
add al,num[1]
add al,num[2]
mov n[0],al
mov al,num[0] ;a+b-c=?
add al,num[1]
sub al,num[2]
mov n[1],al
mov al,num[0] ;a+c-b=?
add al,num[2]
sub al,num[1]
mov n[2],al
mov al,num[1] ;b+c-a=?
add al,num[2]
sub al,num[0]
mov n[3],al
mov al,n[0] ;(a+b+c)*(a+b-c)*(a+c-b)*(b+c-a)=?
mov bl,n[1]
mul bl
mov cx,ax
mov al,n[2]
mov bl,n[3]
mul bl
mul cx

output:mov bx,16 ;上述值除以16
div bx
mov bx,ax
mov ax,dx
mov cx,625
mul cx
mov d[0],ax
mov d[2],dx
mov ax,bx
mov bx,10000
mul bx
add d[0],ax
adc d[2],dx

mov bx,0
sqrt1: inc bx ;开根号
mov ax,bx
mul bx
cmp dx,d[2]
jna sqrt1
sqrt2:dec bx
mov ax,bx
mul bx
cmp ax,d[0]
ja sqrt2

mov ax,bx
mov d[0],bx
mov bl,100
div bl
mov cl,ah
cbw
mov bl,10
div bl
or al,00110000b
mov m[6],al
or ah,00110000b
mov m[7],ah
mov m[8],'.'
mov al,cl
cbw
mov bl,10
div bl
or al,00110000b
mov m[9],al
or ah,00110000b
mov m[10],ah
mov m[11],'$'

mov dx,offset m
mov ah,9
int 21h

graph:mov ax,d[0]
mov bx,2
mul bx
mov d[0],ax
mov d[2],dx
mov al,num[2]
cbw
mov n[0],al
mov n[1],ah
mov ax,d[0]
mov dx,d[2]
mov bl,n[0]
mov bh,n[1]
div bx
mov zuobiao[10],ax
mul ax
mov d[0],ax
mov d[2],dx
mov al,num[1]
mul al
mov bx,10000
mul bx
mov d[4],ax
mov d[6],dx

mov bx,0
heng1:inc bx
mov ax,bx
mul bx
add ax,d[0]
adc dx,d[2]
cmp dx,d[6]
jna heng1
heng2:dec bx
mov ax,bx
mul bx
add ax,d[0]
adc dx,d[2]
cmp ax,d[4]
ja heng2

mov zuobiao[8],bx ;bx的值为横坐标
mov zuobiao[0],0
mov zuobiao[2],0
mov al,num[2]
mov bl,100
mul bl
mov zuobiao[4],ax
mov zuobiao[6],0

exit:mov ah,4ch
int 21h
code ends
end start

于是,

把他封装成我的子程序fdw,

debug了许久

就成了!?!

先看结果:

完整版:

data    segment
message db 'Please input 3 numbers(0~9)',0dh,0ah,'$'
message1  db 'These numbers can not make up a triangle','$'
message2  db 0dh,0ah,'Please press any key to display graphics',0dh,0ah,'$'
a1          dw  3 dup(?)
b1          dw  3 dup(?)
num     db  ?,?,?
n       db  ?,?,?,?
m       db  'area=',?,?,?,?,?,?,?
d       dw  ?,?,?,?
crlf    db  0dh,0ah,'$'
buf1        db  5db  ?db  5 dup('$')
x1            dw    ?
y1            dw    ?
x2            dw    ?
y2            dw    ?
s2            dw    ?
s1            dw    ?
p            dw    ?
xd            dw    ?
yd            dw    ?
data    ends
code    segment
assume    cs:code,ds:data
;------------------------------------------------------------------------------------------------------------------------------------------
main proc
start:        mov    ax,datamov    ds,axcall fdwmov al,12h                      ;320*200 256色的图形模式:mov ah,0                        ;是用来设定显示模式的服务程序int 10hmov ax,a1[0]mov bx,b1[0]mov x1,axmov y1,bxmov ax,a1[2]mov bx,b1[2]mov x2,axmov y2,bxcall rowmov ax,a1[0]mov bx,b1[0]mov x1,axmov y1,bxmov ax,a1[4]mov bx,b1[4]mov x2,axmov y2,bxcall chosemov ax,a1[2]mov bx,b1[2]mov x1,axmov y1,bxmov ax,a1[4]mov bx,b1[4]mov x2,axmov y2,bxcall chosexor si,simov    ah,4ch                        int    21h
main endp
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
fdw procmov dx,offset messagemov ah,9int 21hmov di,0
again:mov ah,1             ;输入3个数(ps:为了设计的方便,只能输入3个10以内的整数)int 21hand al,00001111bmov num[di],almov dx,offset crlfmov ah,9int 21hinc dicmp di,3jb againmov al,num[1]          ;将输入的数按从大到小排序cmp al,num[2] jb continuemov bl,num[2]mov num[1],blmov num[2],almov al,bl
continue:cmp al,num[0]jnb inspectmov bl,num[0]mov num[0],almov num[1],blcmp bl,num[2]jb  inspectmov al,num[2]mov num[1],almov num[2],blinspect:mov al,num[0]         ;检查是否满足形成三角形的条件add al,num[1]cmp al,num[2]jna tipmov al,num[2]sub al,num[1]cmp al,num[0]jnb tipjmp area
tip:mov dx,offset message1mov ah,9int 21hjmp exitf;利用海伦公式求三角形面积
area:mov al,num[0]             ;a+b+c=?add al,num[1]add al,num[2]mov n[0],almov al,num[0]             ;a+b-c=?add al,num[1]sub al,num[2]mov n[1],almov al,num[0]             ;a+c-b=?add al,num[2]sub al,num[1]mov n[2],almov al,num[1]             ;b+c-a=?add al,num[2]sub al,num[0]mov n[3],almov al,n[0]               ;(a+b+c)*(a+b-c)*(a+c-b)*(b+c-a)=?mov bl,n[1]mul blmov cx,axmov al,n[2]mov bl,n[3]mul blmul cxoutput:mov bx,16              ;上述值除以16div bxmov bx,axmov ax,dxmov cx,625mul cxmov d[0],axmov d[2],dxmov ax,bxmov bx,10000mul bxadd d[0],axadc d[2],dxmov bx,0
sqrt1: inc bx                ;开根号mov ax,bxmul bxcmp dx,d[2]jna  sqrt1sqrt2:dec bxmov ax,bxmul bxcmp ax,d[0]ja sqrt2mov ax,bxmov d[0],bxmov bl,100div blmov cl,ahcbwmov bl,10div blor al,00110000bmov m[6],alor ah,00110000bmov m[7],ahmov m[8],'.'mov al,clcbwmov bl,10div blor al,00110000bmov m[9],alor ah,00110000bmov m[10],ahmov m[11],'$'mov dx,offset mmov ah,9int 21hgraph:mov ax,d[0]mov bx,2mul bxmov d[0],axmov d[2],dxmov al,num[2]cbw mov n[0],almov n[1],ahmov ax,d[0]mov dx,d[2]mov bl,n[0]mov bh,n[1]div bxmov b1[4],axmul axmov d[0],axmov d[2],dxmov al,num[1]mul almov bx,10000mul bxmov d[4],axmov d[6],dxmov bx,0
heng1:inc bxmov ax,bxmul bxadd ax,d[0]adc dx,d[2]cmp dx,d[6]jna heng1
heng2:dec bxmov ax,bxmul bxadd ax,d[0]adc dx,d[2]cmp ax,d[4]ja  heng2mov a1[4],bx         ;bx的值为横坐标mov a1[0],0mov b1[0],0mov al,num[2]mov bl,100mul blmov a1[2],axmov b1[2],0mov ax,a1[0]mov cl,2shr ax,cladd ax,20mov a1[0],axmov ax,b1[0]mov cl,2shr ax,cladd ax,80mov b1[0],axmov ax,a1[2]mov cl,2shr ax,cladd ax,20mov a1[2],axmov ax,b1[2]mov cl,2shr ax,cladd ax,80mov b1[2],axmov ax,b1[4]mov cl,2shr ax,cladd ax,80mov b1[4],axmov ax,a1[4]mov cl,2shr ax,cladd ax,20mov a1[4],ax lea dx,message2mov ah,9                                int 21h mov ah,1                                int 21hxor al,al     ret
exitf:      mov ah,4ch                      int 21h
fdw endp
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
row procmov cx,20mov bx,x2mov dx,80int 10h
pheng:mov al,1100b         ;淡红色mov ah,0ch           ;写入点像inc cx                ;
        cmp cx,bxint 10hjne phengret
row endp
;------------------------------------------------------------------------------------------------------------------------------------------
line procmov dx,y1mov bx,y2cmp dx,bxjb nextlxchg dx,bx
nextl:    mov cx,x1int 10h
pshu:mov al,1100b        ;淡红色mov ah,0ch          ;写入点像inc dx                ;
        cmp dx,bxint 10hjne pshuret
line endp;------------------------------------------------------------------------------------------------------------------------------------------
paint proccall compare1mov ax,x2mov bx,x1cmp ax,bxjae dpos1sub bx,axmov s1,-1mov xd,bxjmp d1
dpos1:sub ax,bxmov s1,1mov xd,ax
d1: mov ax,y2mov bx,y1cmp ax,bxjae dpos2            ;y2>=y1sub bx,ax            ;y2<y1mov s2,-1 mov yd,bxjmp d2
dpos2:sub ax,bxmov s2,1mov yd,ax
d2:  add ax,axmov bx,xd sub ax,bx  mov p,ax               ;2dy-dx           mov cx,x1         mov dx,y1
pxie: mov al,1100b        ;淡红色mov ah,0ch          ;写入点像int 10hmov ax,pmov bx,0cmp ax,bxjge ppos            ;p>=0jl pneg             ;p<0
ppos:   mov ax,xdmov bx,ydcmp ax,bxja ddpos1           ;xd>ydjbe ddneg1          ;xd<=yd
ddpos1:                 ;0<k<1  或者  -1<k<0  同时  p>=0mov ax,x1            ;x=x+1mov bx,s1add ax,s1mov x1,ax   mov ax,s2            ;y=y+1mov bx,y1add bx,axmov y1,bx   mov ax,p            ;Pn+1=Pn+2(dy-dx)mov bx,xdmov cx,ydadd bx,bxadd cx,cxsub cx,bxadd ax,cxmov p,ax  jmp plot
ddneg1:                    ;k>1  或者  k<-1   同时  p>=0mov ax,y1             ;y=y+1inc axmov y1,axmov ax,s1            ;x=x+1  或者  x=x-1mov bx,x1add bx,axmov x1,bxmov ax,p            ;Pn+1=Pn+2(dx-dy)mov bx,xdmov cx,ydadd bx,bxadd cx,cxsub bx,cxadd ax,bxmov p,axjmp plot
pxie1:jmp pxie
pneg:mov ax,xdmov bx,ydcmp ax,bxja     ddpos2           ;xd>ydjbe ddneg2          ;xd<=yd
ddpos2:                    ;0<k<1  或者  -1<k<0  同时  p<0mov ax,x1            ;x=x+1mov bx,s1add ax,s1mov x1,axmov ax,p            ;Pn+1=Pn+2dymov bx,ydadd bx,bxadd ax,bxmov p,axjmp plot
ddneg2:                 ;k>1  或者  k<-1   同时  p<0mov ax,y1             ;y=y+1inc axmov y1,axmov ax,p            ;Pn+1=Pn+2dxmov bx,xdadd bx,bxadd ax,bxmov p,axjmp plot
plot:mov cx,x1            ;X坐标mov dx,y1            ;Y坐标cmp cx,x2            ;是否绘图完毕jne pxie1ret
paint endp
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
compare1 procmov ax,y1mov bx,y2cmp ax,bxjna unchmov y1,bxmov y2,axmov ax,x1mov bx,x2mov x1,bxmov x2,ax
unch:ret
compare1 endp
;------------------------------------------------------------------------------------------------------------------------------------------
moving procmov ax,a1[si]mov bx,b1[si]mov x1,axmov y1,bxmov ax,a1[si]mov bx,b1[si]mov x1,axmov y1,bxadd si,2ret
moving endp
;------------------------------------------------------------------------------------------------------------------------------------------
chose procmov ax,x1cmp ax,x2je line1mov ax,y1cmp ax,y2je row1call paintjmp exitc
row1:call rowjmp exitc
line1:call linejmp exitc
exitc:ret
chose 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)]

简直了

转载于:https://www.cnblogs.com/lanclot-/p/10967699.html

assembly x86(nasm)画三角形等图形的实现(升级版)相关推荐

  1. assembly x86(nasm)串比较

    预留字符串口令,输入口令串与预留密码串比较.若匹配则显示"MATCH!CONGRATULATION",否则显示"NOMATCH!",并让用户重新输入,程序能对口 ...

  2. splitpane如何设置竖条的宽度_如何用 CSS 画三角形和箭头

    三角形和箭头这两个图标在网页中经常会用到,例如:下拉选择框.排序.返回到上一页.导航条,分页都会用到三角形或者箭头,当然是用图片的方式的确可以实现这一样式,但是是用图片如果调整颜色那就比较困难了,除非 ...

  3. 前端怎么画三角形_css如何画三角形?

    我们在平时的前端开发的时候,有时候是需要一些小图形来丰富一下页面效果,比如:下拉列表的倒三角图形.那么这样的一个三角形是如何制作出来的.下面本篇文章就来给大家介绍一下使用css如何画三角形的方法,希望 ...

  4. css画直角三角形,关于CSS画三角形的那些事

    用CSS画一个三角形,是不难的问题,但我却掌握的不够熟练,例如当要求为画一个直角三角形或者等腰三角形,我就有点反应不过来.所以,在这篇中点透它,以后再见,不含糊. 原理分析 用CSS画三角形,实际上就 ...

  5. h5画三角形_如何利用css或html5画出一个三角形?两种不同的制作三角形方法(代码实例)...

    我们在平时的前端开发的时候,有时候是需要一些小图形来丰富一下页面效果,比如:下拉列表的倒三角图形.那么这样的一个三角形是如何制作出来的,本章给大家介绍如何利用css或html画出一个三角形?两种不同的 ...

  6. 百度前端笔试题 css3画三角形

    昨天做了百度2015年前端研发笔试卷,总体感受是比较看重html和css功底,对JavaScript的考察反而更少一些,貌似阿里也是比较看重css这一块.其中有一道用css实现的布局问题,是在一个大矩 ...

  7. vue3.0 + typescript openlayers实现地图标点、移动、画线、显示范围、测量长度、测量面积、画三角形、画正方形、画圆、线选、画笔、清除测量、清除、地图上展示弹窗等功能

    vue3.0 + typescript openlayers实现地图标点.移动.画线.显示范围.测量长度.测量面积.画三角形.画正方形.画圆.线选.画笔.清除测量.清除地图所有等功能 由于最近项目中用 ...

  8. 这样画三角形的内心很方便,数学老师必会技能!

    中学时代,接触的数学分为代数和几何两个分支,学习几何的时候会认识到好多几何图形,也会学习这些图形的特征和性质.比如在三角形中,三个内角的三条角平分线相交于一点,这个点叫做三角形的内心.这个点也是这个三 ...

  9. 计算机图形学 画三角形、圆等(入门代码)

    [要求] 实现自己的三角形线框显示算法,能够将三角形的各个顶点经过坐标变换后变换到屏幕坐标,并以连线的方式将三角形的各个边显示出来.要求连线不使用Windows API,而是利用自己的2D Line算 ...

最新文章

  1. Nature子刊:古菌基因组的标准化物种分类方法
  2. 神竜出击 合三为一!
  3. isAlive()方法的作用
  4. Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)
  5. JAVA类的继承、覆写和final关键字
  6. Bootstrap框架学习
  7. 四旋翼双环PID控制
  8. java下载上传远程文件
  9. OpenGL+VS2012环境搭建
  10. C++基础——用C++实例理解UML类图
  11. 20140608 科技脉搏 -下半身需求是人类共同需求,有多少人就有多大市场
  12. EF 操作数据库中的表
  13. 初学者怎么自学python编程_编程零基础初学者应当如何开始学习 Python?
  14. 基于stm32及sim800c sim868 实现的远程控制 小程序控制模块 源码 移植过程简介
  15. php使用ffmpeg将音乐wav格式转为mp3格式
  16. 接入翼支付的php,翼支付-天翼账号开放平台
  17. Complex Multiplier IP 使用教程(源码)
  18. Training!!!
  19. 博士在读,在家无法科研的你,在忙些什么?
  20. 文本生成任务常见评估指标

热门文章

  1. 【CodeForces】576 C. Points on Plane
  2. FastReport使用
  3. 增长黑盒:零代码基础做智能电商网站,不要重复发明轮子
  4. 500 OOPS:cannot change directory:/root 问题
  5. 多种分布式文件系统简介
  6. python IDE- IDLE
  7. 研发过程管理导图-第一稿(转)
  8. Android 3.0 r1中文API文档(104) —— ViewTreeObserver
  9. 步入DevExpress的使用(VS)
  10. 第二步 (仅供参考) sencha touch + PhoneGap(cordova 2.9 及其以下版本) 使用 adt eclipse进行打包...