参考了一位大佬的博客

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)画三角形等图形的实现的更多相关文章

  1. assembly x86(nasm)画三角形等图形的实现(升级版)

    https://www.cnblogs.com/lanclot-/p/10962702.html接上一篇 本来就有放弃的想法,可是有不愿退而求次, 然后大神室友写了一个集海伦公式计算三角形面积, 三点 ...

  2. CSS深入了解border:利用border画三角形等图形

    三角形实际上是border的产物 我们正常使用的border都是四边一个颜色,当我们把四边换上不同颜色 那么你就会发现,三角来了~! <!DOCTYPE html> <html la ...

  3. assembly x86(nasm)修改后的日常

    data segment ENG db 'SUNdayS Coming I Wanna Drive My Car,SUN,SUN$' ;9,3 sun1 db 'SUN' swcount db 0ah ...

  4. assembly x86(nasm)子程序1

    T: 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来.要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示. 思路: Main主调程 ...

  5. assembly x86(nasm)的日常

    cs的日常打卡. data segment ENG db 'SUNdayS Coming I Wanna Drive My Car,SUN,SUN$' ;43,35 sun1 db 'SUN' swc ...

  6. assembly x86(nasm)串比较

    预留字符串口令,输入口令串与预留密码串比较.若匹配则显示“MATCH!CONGRATULATION”,否则显示“NOMATCH!”,并让用户重新输入,程序能对口令进行测试,但测试次数最多3次,若3次输 ...

  7. assembly x86(nasm)选择排序

    有一个首地址为NUM的N字无序无符号整数数组,编制程序采用选择排序法使该数组中的数按照从小到大的次序排序输出. 选择排序: data segment message db 'This is a pro ...

  8. css3画三角形的原理

    以前用过css3画过下拉菜单里文字后面的“下拉三角符号”,类似于下面这张图片文字后面三角符号的效果 下面是一个很简单的向上的三角形代码 #triangle-up { width: 0; height: ...

  9. iOS开发UI-利用Quartz2D 实现基本绘图(画三角形、矩形、圆、圆弧)

    1.画三角形  运行结果如下 1.1具体实现步骤 1.1.1首先新建一个project,然后自定义一个view 1.2代码 #import "htingShapeView.h" @ ...

随机推荐

  1. 九度OJ 1091:棋盘游戏 (DP、BFS、DFS、剪枝)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1497 解决:406 题目描述: 有一个6*6的棋盘,每个棋盘上都有一个数值,现在又一个起始位置和终止位置,请找出一个从起始位置到终止位置代 ...

  2. ora-12170 与 Oracle lsnrctl

    在startup 启动数据库后,使用plsql去连接数据库时, 出现ora-12170 错误:   在启动.关闭或者重启oracle监听器之前确保使用lsnrctl status命令检查oracle监 ...

  3. Chain of Responsibility Pattern

    1.Chain of Responsibility模式:将可能处理一个请求的对象链接成一个链,并将请求在这个链上传递,直到有对象处理该请求(可能需要提供一个默认处理所有请求的类,例如MFC中的Cwin ...

  4. [2017-10-26]Abp系列——DTO入参验证使用方法及经验分享

    本系列目录:Abp介绍和经验分享-目录 声明式的入参验证逻辑 声明式入参验证主要使用了System.ComponentModel.DataAnnotations中提供的各种验证参数的Attribute ...

  5. 消息handler message 线程通信 空消息

    空消息的使用 private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { ...

  6. 动态注册BroadcastReceiver

    1. [代码][Java]代码      package com.zjt.innerreceiver;   import android.app.Service; import android.con ...

  7. hibernate入门(-)

    1.struts2的支持 在web.xml中配置struts2的支持 <?xml version="1.0" encoding="UTF-8"?> ...

  8. web.xml中classpath 解释

    经过我在对 web.xml 的配置测试: web.xml 中classpath 所指的路径是项目工程路径下的 classes 文件夹

  9. 2016.4.23浙江省赛(zoj3936 zoj3938 zoj3940 zoj3944 zoj3946 zoj3947 )

    A      Apples and Ideas Time Limit: 2 Seconds      Memory Limit: 65536 KB "If you have an apple ...

  10. NMS 原理 了解

    NMS 原理:对于Bounding Box的列表B及其对应的置信度S,采用下面的计算方式.选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的I ...