Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.70 KB | None | 0 0
  1. ; external functions from X11 library
  2. extern XOpenDisplay
  3. extern XDisplayName
  4. extern XCloseDisplay
  5. extern XCreateSimpleWindow
  6. extern XMapWindow
  7. extern XRootWindow
  8. extern XSelectInput
  9. extern XFlush
  10. extern XCreateGC
  11. extern XSetForeground
  12. extern XDrawLine
  13. extern XNextEvent
  14.  
  15. ; external functions from stdio library (ld-linux-x86-64.so.2)
  16. extern printf
  17. extern exit
  18.  
  19. %define StructureNotifyMask 131072
  20. %define KeyPressMask 1
  21. %define ButtonPressMask 4
  22. %define MapNotify 19
  23. %define KeyPress 2
  24. %define ButtonPress 4
  25. %define Expose 12
  26. %define ConfigureNotify 22
  27. %define CreateNotify 16
  28. %define QWORD 8
  29. %define DWORD 4
  30. %define WORD 2
  31. %define BYTE 1
  32.  
  33.  
  34. global trans
  35. trans:
  36. section .data
  37. zoff: dd 100
  38. xoff: dd 100
  39. yoff: dd 100
  40. df: dd 100
  41.  
  42.  
  43.  
  44. section .text
  45. mov dword[x],edi
  46. mov dword[y],esi
  47. mov dword[z],edx
  48.  
  49. mov ax,word[z]; axe Z
  50. mov bx,word[zoff]
  51. ;cmp dword[z],100
  52. ;je claque
  53. add ax, bx;Z off
  54. ;jmp ausol
  55. ;claque:
  56. ;add ax, 0
  57. ;ausol:
  58. mov word[z],ax
  59.  
  60. mov ax,word[x]
  61. mov bx,word[df]
  62. mul bx;df * x
  63.  
  64.  
  65. mov bx,word[z] ; la division est ici
  66. div bx
  67. mov word[x],ax
  68. mov eax, dword[xoff]
  69. add dword[x],eax; ajout du Xoff
  70. mov edi,dword[x]
  71.  
  72. mov ax,word[y]
  73. mov bx,word[df]
  74. mul bx;DF = 100
  75.  
  76. mov bx,word[z] ; la division est ici
  77. div bx
  78. mov word[y],ax
  79. mov eax, dword[yoff]
  80. add dword[y],eax;ajout du y off
  81. mov esi,dword[y]
  82.  
  83.  
  84.  
  85. ret
  86.  
  87.  
  88. ;gestion des angles
  89. global tourn
  90. tourn:
  91. section .data
  92. angx: dd 1
  93. angy: dd 0
  94. angz: dd 0
  95. section .text
  96.  
  97. ;si angle x = 0 pas de rotation pareil pour y et z
  98. cmp dword[angx],0
  99. je noangx
  100. mov ecx,dword[angx]
  101. call tournx
  102. noangx:
  103.  
  104.  
  105. cmp dword[angy],0
  106. je noangy
  107. mov ecx,dword[angy]
  108. call tourny
  109. noangy:
  110.  
  111.  
  112. cmp dword[angz],0
  113. je noangz
  114. mov ecx,dword[angz]
  115. call tournz
  116. noangz:
  117.  
  118. ret
  119.  
  120. global tournx
  121. tournx:
  122. mov dword[angx],ecx
  123. mov dword[y],esi
  124. mov dword[z],edx
  125.  
  126. ;allé on calcule y
  127. ;partie un : y*cos(angX)
  128. mov ax,word[y]
  129. fild dword[angx];on met l'angle dans st0
  130. fcos;consinutise st0
  131. fist dword[temp] ; on met cos angx dans y
  132. finit ; on flush le tous
  133. mov bx,word[temp]
  134. mul bx
  135. mov word[temp],ax;première patis de l'équation faites
  136.  
  137. ;partis 2 z* sin(angx)
  138. fild dword[angx];on met l'angle dans st0
  139. fsin;on le sinusite ;)
  140. fist dword[temp2]
  141. finit;flushy
  142. mov ax,word[z]
  143. mov bx,word[temp2]
  144. mul bx;z*sin(angX)
  145. sub word[temp],ax;y*cos(angX) - z*sin(angX)
  146. mov esi,dword[temp];et hop ca repart vers la mort
  147.  
  148. ;on calcule z
  149. ;partie un : y*sin(angX)
  150. mov ax,word[y]
  151. fild dword[angx];on met l'angle dans st0
  152. fsin;sin st0
  153. fist dword[temp] ; on met cos angx dans y
  154. finit ; on flush le tous
  155. mov bx,word[temp]
  156. mul bx
  157. mov word[temp],ax;première patis de l'équation faites y = y*sin(angX)
  158.  
  159. ;partis 2 z*cos(angX)
  160. fild dword[angx];on met l'angle dans st0
  161. fcos;on le cos
  162. fist dword[temp2]
  163. finit;flushy
  164. mov ax,word[z]
  165. mov bx,word[temp2]
  166. mul bx;z*sin(angX)
  167.  
  168. add word[temp],ax;y*sin(angX) + z*cos(angX)
  169. mov edx,dword[temp] ; z est envoyer
  170. ret
  171. ;#################################""""
  172. global tourny
  173. tourny:
  174. mov dword[angy],ecx
  175. mov dword[z],edx
  176. mov dword[x],edi
  177.  
  178. ;allé on calcule x
  179. ;partie un : z*sin(angY)
  180. mov ax,word[z]
  181. fild dword[angy];on met l'angle dans st0
  182. fsin;sin st0
  183. fist dword[temp] ; on met sin dans temp
  184. finit ; on flush le tous
  185. mov bx,word[temp]
  186. mul bx
  187. mov word[temp],ax;première patis de l'équation faites
  188.  
  189. ;partis 2 x*cos(angY)
  190. fild dword[angy];on met l'angle dans st0
  191. fcos;on le sinusite ;)
  192. fist dword[temp2]
  193. finit;flushy
  194. mov ax,word[x]
  195. mov bx,word[temp2]
  196. mul bx;x*cos(angY)
  197.  
  198. add word[temp],ax;z*sin(angY) + x*cos(angY)
  199. mov edi,dword[temp];et hop ca repart vers la mort
  200.  
  201. ;on calcule z
  202. ;partie un : z*cos(angY)
  203. mov ax,word[z]
  204. fild dword[angy];on met l'angle dans st0
  205. fcos;cos st0
  206. fist dword[temp] ; on met cos dans temp
  207. finit ; on flush le tous
  208. mov bx,word[temp]
  209. mul bx
  210. mov word[temp],ax;première patis de l'équation faites z*cos(angY)
  211.  
  212. ;partis 2 x*sin(angY)
  213. fild dword[angy];on met l'angle dans st0
  214. fsin;on le sin
  215. fist dword[temp2]
  216. finit;flushy
  217. mov ax,word[x]
  218. mov bx,word[temp2]
  219. mul bx;x*sin(angY)
  220. mov edi,dword[x]
  221.  
  222. sub word[temp],ax;z*cos(angY) - x*sin(angY)
  223. mov edx,dword[temp] ; z est envoyer
  224. ret
  225.  
  226. global tournz
  227. tournz:
  228. mov dword[angz],ecx
  229. mov dword[y],esi
  230. mov dword[x],edi
  231.  
  232. ;allé on calcule x
  233. ;partie un : x*cos(angZ)
  234. mov ax,word[x]
  235. fild dword[angz];on met l'angle dans st0
  236. fcos;cos st0
  237. fist dword[temp] ; on met cos dans temp
  238. finit ; on flush le tous
  239. mov bx,word[temp]
  240. mul bx
  241. mov word[temp],ax;première patis de l'équation faites
  242.  
  243. ;partis 2 y*sin(angZ)
  244. fild dword[angz];on met l'angle dans st0
  245. fcos;on le sinusite ;)
  246. fist dword[temp2]
  247. finit;flushy
  248. mov ax,word[y]
  249. mov bx,word[temp2]
  250. mul bx;y*sin(angZ)
  251.  
  252. sub word[temp],ax;x*cos(angZ) - y*sin(angZ)
  253. mov edi,dword[temp];et hop ca repart vers la mort
  254.  
  255. ;on calcule y
  256. ;partie un : x*sin(angZ)
  257. mov ax,word[x]
  258. fild dword[angz];on met l'angle dans st0
  259. fsin;sin st0
  260. fist dword[temp] ; on met sin dans temp
  261. finit ; on flush le tous
  262. mov bx,word[temp]
  263. mul bx
  264. mov word[temp],ax;première patis de l'équation faites z*cos(angY)
  265.  
  266. ;partis 2 y*cos(angZ)
  267. fild dword[angz];on met l'angle dans st0
  268. fcos;on le cos
  269. fist dword[temp2]
  270. finit;flushy
  271. mov ax,word[y]
  272. mov bx,word[temp2]
  273. mul bx;y*cos(angZ)
  274.  
  275. sub word[temp],ax;x*sin(angZ) + y*cos(angZ)
  276. mov esi,dword[temp] ; y est envoyer
  277. ret
  278. global main
  279.  
  280. section .bss
  281. display_name: resq 1
  282. screen: resd 1
  283. depth: resd 1
  284. connection: resd 1
  285. width: resd 1
  286. height: resd 1
  287. window: resq 1
  288. gc: resq 1
  289.  
  290. section .data
  291.  
  292. event: times 24 dq 0
  293.  
  294. x1: dd 0
  295. x2: dd 0
  296. y1: dd 0
  297. y2: dd 0
  298. x: dd 0
  299. y: dd 0
  300. z: dd 0
  301. xp0: dd 0
  302. xp1: dd 0
  303. xp2: dd 0
  304. xp3: dd 0
  305. xp4: dd 0
  306. xp5: dd 0
  307. xp6: dd 0
  308. xp7: dd 0
  309.  
  310. yp0: dd 0
  311. yp1: dd 0
  312. yp2: dd 0
  313. yp3: dd 0
  314. yp4: dd 0
  315. yp5: dd 0
  316. yp6: dd 0
  317. yp7: dd 0
  318.  
  319. temp: dd 0
  320. temp2: dd 0
  321.  
  322. section .text
  323.  
  324. ;##################################################
  325. ;########### PROGRAMME PRINCIPAL ##################
  326. ;##################################################
  327.  
  328. main:
  329. xor rdi,rdi
  330. call XOpenDisplay ; Création de display
  331. mov qword[display_name],rax ; rax=nom du display
  332.  
  333. ; display_name structure
  334. ; screen = DefaultScreen(display_name);
  335. mov rax,qword[display_name]
  336. mov eax,dword[rax+0xe0]
  337. mov dword[screen],eax
  338.  
  339. mov rdi,qword[display_name]
  340. mov esi,dword[screen]
  341. call XRootWindow
  342. mov rbx,rax
  343.  
  344. mov rdi,qword[display_name]
  345. mov rsi,rbx
  346. mov rdx,10
  347. mov rcx,10
  348. mov r8,400 ; largeur
  349. mov r9,400 ; hauteur
  350. push 0xFFFFFF ; background 0xRRGGBB
  351. push 0x00FF00
  352. push 1
  353. call XCreateSimpleWindow
  354. mov qword[window],rax
  355.  
  356. mov rdi,qword[display_name]
  357. mov rsi,qword[window]
  358. mov rdx,131077 ;131072
  359. call XSelectInput
  360.  
  361. mov rdi,qword[display_name]
  362. mov rsi,qword[window]
  363. call XMapWindow
  364.  
  365. mov rsi,qword[window]
  366. mov rdx,0
  367. mov rcx,0
  368. call XCreateGC
  369. mov qword[gc],rax
  370.  
  371. mov rdi,qword[display_name]
  372. mov rsi,qword[gc]
  373. mov rdx,0x000000 ; Couleur du crayon
  374. call XSetForeground
  375.  
  376. boucle: ; boucle de gestion des évènements
  377. mov rdi,qword[display_name]
  378. mov rsi,event
  379. call XNextEvent
  380.  
  381. cmp dword[event],ConfigureNotify ; à l'apparition de la fenêtre
  382. je dessin ; on saute au label 'dessin'
  383.  
  384. cmp dword[event],KeyPress ; Si on appuie sur une touche
  385. je closeDisplay ; on saute au label 'closeDisplay' qui ferme la fenêtre
  386. jmp boucle
  387.  
  388. ;#########################################
  389. ;# DEBUT DE LA ZONE DE DESSIN #
  390. ;#########################################
  391.  
  392.  
  393.  
  394. dessin:
  395.  
  396. ; dessin de ligne
  397.  
  398. ;POINT 0
  399. mov dword[x],50
  400. mov dword[y],150
  401. mov dword[z],0
  402. mov edi,dword[x]
  403. mov esi,dword[y]
  404. mov edx,dword[z]
  405.  
  406. call trans
  407. mov dword[x],edi
  408. mov dword[y],esi
  409.  
  410. mov eax,dword[x]
  411. mov ebx,dword[y]
  412.  
  413. mov dword[xp0],eax ;POINT 0
  414. mov dword[yp0],ebx
  415.  
  416.  
  417. ;POINT 1
  418. mov dword[x],150
  419. mov dword[y],150
  420. mov dword[z],0
  421. mov edi,dword[x]
  422. mov esi,dword[y]
  423. mov edx,dword[z]
  424.  
  425. call trans
  426. mov dword[x],edi
  427. mov dword[y],esi
  428.  
  429. mov eax,dword[x]
  430. mov ebx,dword[y]
  431.  
  432. mov dword[xp1],eax ;POINT 1
  433. mov dword[yp1],ebx
  434.  
  435. ;POINT 2
  436.  
  437. mov dword[x],150
  438. mov dword[y],50
  439. mov dword[z],0
  440. mov edi,dword[x]
  441. mov esi,dword[y]
  442. mov edx,dword[z]
  443.  
  444. call trans
  445. mov dword[x],edi
  446. mov dword[y],esi
  447.  
  448. mov eax,dword[x]
  449. mov ebx,dword[y]
  450.  
  451. mov dword[xp2],eax ;POINT 2
  452. mov dword[yp2],ebx
  453.  
  454. ;POINT 3
  455.  
  456. mov dword[x],50
  457. mov dword[y],50
  458. mov dword[z],0
  459. mov edi,dword[x]
  460. mov esi,dword[y]
  461. mov edx,dword[z]
  462.  
  463. call trans
  464. mov dword[x],edi
  465. mov dword[y],esi
  466.  
  467. mov eax,dword[x]
  468. mov ebx,dword[y]
  469.  
  470. mov dword[xp3],eax ;POINT 3
  471. mov dword[yp3],ebx
  472.  
  473. mov rdi,qword[display_name]
  474. mov rsi,qword[window]
  475. mov rdx,qword[gc]
  476. mov ecx,dword[xp3] ; coordonnée source en x point 3
  477. mov r8d,dword[yp3] ; coordonnée source en y point 3
  478. mov r9d,dword[xp2] ; coordonnée destination en x point 2
  479. push qword[yp2] ; coordonnée destination en y point 2
  480. call XDrawLine
  481.  
  482.  
  483.  
  484. ; dessin de ligne
  485.  
  486. mov rdi,qword[display_name]
  487. mov rsi,qword[window]
  488. mov rdx,qword[gc]
  489. mov ecx,dword[xp2] ; coordonnée source en x point 2
  490. mov r8d,dword[yp2] ; coordonnée source en y point 2
  491. mov r9d,dword[xp1] ; coordonnée destination en x point 1
  492. push qword[yp1] ; coordonnée destination en y point 1
  493. call XDrawLine
  494.  
  495. ; dessin de ligne
  496.  
  497. mov rdi,qword[display_name]
  498. mov rsi,qword[window]
  499. mov rdx,qword[gc]
  500. mov ecx,dword[xp1] ; coordonnée source en x point 1
  501. mov r8d,dword[yp1] ; coordonnée source en y point 1
  502. mov r9d,dword[xp0] ; coordonnée destination en x point 0
  503. push qword[yp0] ; coordonnée destination en y point 0
  504. call XDrawLine
  505.  
  506.  
  507. ; dessin de ligne
  508.  
  509. mov rdi,qword[display_name]
  510. mov rsi,qword[window]
  511. mov rdx,qword[gc]
  512. mov ecx,dword[xp0] ; coordonnée source en x point 0
  513. mov r8d,dword[yp0] ; coordonnée source en y point 0
  514. mov r9d,dword[xp3] ; coordonnée destination en x point 3
  515. push qword[yp3] ; coordonnée destination en y point 3
  516. call XDrawLine
  517. ;###########################"
  518. ;Point du fond
  519. ;Point 6
  520.  
  521. mov dword[z],100
  522. mov edi,dword[xp3]
  523. mov esi,dword[yp3]
  524. mov edx,dword[z]
  525.  
  526. call trans
  527. mov dword[x],edi
  528. mov dword[y],esi
  529.  
  530. mov eax,dword[x]
  531. mov ebx,dword[y]
  532.  
  533. mov dword[xp6],eax ;POINT 6
  534. mov dword[yp6],ebx
  535.  
  536. ; dessin de ligne
  537.  
  538. mov rdi,qword[display_name]
  539. mov rsi,qword[window]
  540. mov rdx,qword[gc]
  541. mov ecx,dword[xp6] ; coordonnée source en x point 6
  542. mov r8d,dword[yp6] ; coordonnée source en y point 6
  543. mov r9d,dword[xp3] ; coordonnée destination en x point 3
  544. push qword[yp3] ; coordonnée destination en y point 3
  545.  
  546. call XDrawLine
  547.  
  548.  
  549. ;Point 7
  550.  
  551. mov dword[z],100
  552. mov edi,dword[xp2]
  553. mov esi,dword[yp2]
  554. mov edx,dword[z]
  555.  
  556. call trans
  557. mov dword[x],edi
  558. mov dword[y],esi
  559. mov edx,dword[z]
  560.  
  561. mov eax,dword[x]
  562. mov ebx,dword[y]
  563.  
  564. mov dword[xp7],eax ;POINT 7
  565. mov dword[yp7],ebx
  566.  
  567. ; dessin de ligne
  568.  
  569. mov rdi,qword[display_name]
  570. mov rsi,qword[window]
  571. mov rdx,qword[gc]
  572. mov ecx,dword[xp7] ; coordonnée source en x point 7
  573. mov r8d,dword[yp7] ; coordonnée source en y point 7
  574. mov r9d,dword[xp2] ; coordonnée destination en x point 2
  575. push qword[yp2] ; coordonnée destination en y point 2
  576. call XDrawLine
  577.  
  578.  
  579.  
  580. ;Point 4
  581.  
  582. mov dword[z],100
  583. mov edi,dword[xp1]
  584. mov esi,dword[yp1]
  585. mov edx,dword[z]
  586.  
  587. call trans
  588. mov dword[x],edi
  589. mov dword[y],esi
  590.  
  591. mov eax,dword[x]
  592. mov ebx,dword[y]
  593. mov edx,dword[z]
  594.  
  595. mov dword[xp4],eax ;POINT 4
  596. mov dword[yp4],ebx
  597.  
  598. ; dessin de ligne
  599.  
  600. mov rdi,qword[display_name]
  601. mov rsi,qword[window]
  602. mov rdx,qword[gc]
  603. mov ecx,dword[xp4] ; coordonnée source en x point 4
  604. mov r8d,dword[yp4] ; coordonnée source en y point 4
  605. mov r9d,dword[xp1] ; coordonnée destination en x point 1
  606. push qword[yp1] ; coordonnée destination en y point 1
  607. call XDrawLine
  608.  
  609.  
  610.  
  611.  
  612. ;Point 5
  613.  
  614. mov dword[z],100
  615. mov edi,dword[xp0]
  616. mov esi,dword[yp0]
  617. mov edx,dword[z]
  618.  
  619. call trans
  620. mov dword[x],edi
  621. mov dword[y],esi
  622.  
  623. mov eax,dword[x]
  624. mov ebx,dword[y]
  625.  
  626. mov dword[xp5],eax ;POINT 5
  627. mov dword[yp5],ebx
  628.  
  629.  
  630. ; dessin de ligne
  631.  
  632. mov rdi,qword[display_name]
  633. mov rsi,qword[window]
  634. mov rdx,qword[gc]
  635. mov ecx,dword[xp5] ; coordonnée source en x point 5
  636. mov r8d,dword[yp5] ; coordonnée source en y point 5
  637. mov r9d,dword[xp0] ; coordonnée destination en x point 0
  638. push qword[yp0] ; coordonnée destination en y point 0
  639. call XDrawLine
  640.  
  641. ;LIGNE 6-7
  642.  
  643. mov rdi,qword[display_name]
  644. mov rsi,qword[window]
  645. mov rdx,qword[gc]
  646. mov ecx,dword[xp6] ; coordonnée source en x point 6
  647. mov r8d,dword[yp6] ; coordonnée source en y point 6
  648. mov r9d,dword[xp7] ; coordonnée destination en x point 7
  649. push qword[yp7] ; coordonnée destination en y point 7
  650.  
  651.  
  652. call XDrawLine
  653.  
  654.  
  655. ;LIGNE 7-4
  656.  
  657. mov rdi,qword[display_name]
  658. mov rsi,qword[window]
  659. mov rdx,qword[gc]
  660. mov ecx,dword[xp7] ; coordonnée source en x point 7
  661. mov r8d,dword[yp7] ; coordonnée source en y point 7
  662. mov r9d,dword[xp4] ; coordonnée destination en x point 4
  663. push qword[yp4] ; coordonnée destination en y point 4
  664. call XDrawLine
  665.  
  666. ;LIGNE 4-5
  667.  
  668. mov rdi,qword[display_name]
  669. mov rsi,qword[window]
  670. mov rdx,qword[gc]
  671. mov ecx,dword[xp4] ; coordonnée source en x point 4
  672. mov r8d,dword[yp4] ; coordonnée source en y point 4
  673. mov r9d,dword[xp5] ; coordonnée destination en x point 5
  674. push qword[yp5] ; coordonnée destination en y point 5
  675.  
  676. call XDrawLine
  677.  
  678. ;LIGNE 5-6
  679.  
  680. mov rdi,qword[display_name]
  681. mov rsi,qword[window]
  682. mov rdx,qword[gc]
  683. mov ecx,dword[xp5] ; coordonnée source en x point 5
  684. mov r8d,dword[yp5] ; coordonnée source en y point 5
  685. mov r9d,dword[xp6] ; coordonnée destination en x point 6
  686. push qword[yp6] ; coordonnée destination en y point 6
  687.  
  688. call XDrawLine
  689.  
  690.  
  691. ; ############################
  692. ; # FIN DE LA ZONE DE DESSIN #
  693. ; ############################
  694. jmp flush
  695.  
  696. flush:
  697. mov rdi,qword[display_name]
  698. call XFlush
  699. jmp boucle
  700. mov rax,34
  701. syscall
  702.  
  703. closeDisplay:
  704. mov rax,qword[display_name]
  705. mov rdi,rax
  706. call XCloseDisplay
  707. xor rdi,rdi
  708. call exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement