Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; external functions from X11 library
- extern XOpenDisplay
- extern XDisplayName
- extern XCloseDisplay
- extern XCreateSimpleWindow
- extern XMapWindow
- extern XRootWindow
- extern XSelectInput
- extern XFlush
- extern XCreateGC
- extern XSetForeground
- extern XDrawLine
- extern XNextEvent
- ; external functions from stdio library (ld-linux-x86-64.so.2)
- extern printf
- extern exit
- %define StructureNotifyMask 131072
- %define KeyPressMask 1
- %define ButtonPressMask 4
- %define MapNotify 19
- %define KeyPress 2
- %define ButtonPress 4
- %define Expose 12
- %define ConfigureNotify 22
- %define CreateNotify 16
- %define QWORD 8
- %define DWORD 4
- %define WORD 2
- %define BYTE 1
- global trans
- trans:
- section .data
- zoff: dd 100
- xoff: dd 100
- yoff: dd 100
- df: dd 100
- section .text
- mov dword[x],edi
- mov dword[y],esi
- mov dword[z],edx
- mov ax,word[z]; axe Z
- mov bx,word[zoff]
- ;cmp dword[z],100
- ;je claque
- add ax, bx;Z off
- ;jmp ausol
- ;claque:
- ;add ax, 0
- ;ausol:
- mov word[z],ax
- mov ax,word[x]
- mov bx,word[df]
- mul bx;df * x
- mov bx,word[z] ; la division est ici
- div bx
- mov word[x],ax
- mov eax, dword[xoff]
- add dword[x],eax; ajout du Xoff
- mov edi,dword[x]
- mov ax,word[y]
- mov bx,word[df]
- mul bx;DF = 100
- mov bx,word[z] ; la division est ici
- div bx
- mov word[y],ax
- mov eax, dword[yoff]
- add dword[y],eax;ajout du y off
- mov esi,dword[y]
- ret
- ;gestion des angles
- global tourn
- tourn:
- section .data
- angx: dd 1
- angy: dd 0
- angz: dd 0
- section .text
- ;si angle x = 0 pas de rotation pareil pour y et z
- cmp dword[angx],0
- je noangx
- mov ecx,dword[angx]
- call tournx
- noangx:
- cmp dword[angy],0
- je noangy
- mov ecx,dword[angy]
- call tourny
- noangy:
- cmp dword[angz],0
- je noangz
- mov ecx,dword[angz]
- call tournz
- noangz:
- ret
- global tournx
- tournx:
- mov dword[angx],ecx
- mov dword[y],esi
- mov dword[z],edx
- ;allé on calcule y
- ;partie un : y*cos(angX)
- mov ax,word[y]
- fild dword[angx];on met l'angle dans st0
- fcos;consinutise st0
- fist dword[temp] ; on met cos angx dans y
- finit ; on flush le tous
- mov bx,word[temp]
- mul bx
- mov word[temp],ax;première patis de l'équation faites
- ;partis 2 z* sin(angx)
- fild dword[angx];on met l'angle dans st0
- fsin;on le sinusite ;)
- fist dword[temp2]
- finit;flushy
- mov ax,word[z]
- mov bx,word[temp2]
- mul bx;z*sin(angX)
- sub word[temp],ax;y*cos(angX) - z*sin(angX)
- mov esi,dword[temp];et hop ca repart vers la mort
- ;on calcule z
- ;partie un : y*sin(angX)
- mov ax,word[y]
- fild dword[angx];on met l'angle dans st0
- fsin;sin st0
- fist dword[temp] ; on met cos angx dans y
- finit ; on flush le tous
- mov bx,word[temp]
- mul bx
- mov word[temp],ax;première patis de l'équation faites y = y*sin(angX)
- ;partis 2 z*cos(angX)
- fild dword[angx];on met l'angle dans st0
- fcos;on le cos
- fist dword[temp2]
- finit;flushy
- mov ax,word[z]
- mov bx,word[temp2]
- mul bx;z*sin(angX)
- add word[temp],ax;y*sin(angX) + z*cos(angX)
- mov edx,dword[temp] ; z est envoyer
- ret
- ;#################################""""
- global tourny
- tourny:
- mov dword[angy],ecx
- mov dword[z],edx
- mov dword[x],edi
- ;allé on calcule x
- ;partie un : z*sin(angY)
- mov ax,word[z]
- fild dword[angy];on met l'angle dans st0
- fsin;sin st0
- fist dword[temp] ; on met sin dans temp
- finit ; on flush le tous
- mov bx,word[temp]
- mul bx
- mov word[temp],ax;première patis de l'équation faites
- ;partis 2 x*cos(angY)
- fild dword[angy];on met l'angle dans st0
- fcos;on le sinusite ;)
- fist dword[temp2]
- finit;flushy
- mov ax,word[x]
- mov bx,word[temp2]
- mul bx;x*cos(angY)
- add word[temp],ax;z*sin(angY) + x*cos(angY)
- mov edi,dword[temp];et hop ca repart vers la mort
- ;on calcule z
- ;partie un : z*cos(angY)
- mov ax,word[z]
- fild dword[angy];on met l'angle dans st0
- fcos;cos st0
- fist dword[temp] ; on met cos dans temp
- finit ; on flush le tous
- mov bx,word[temp]
- mul bx
- mov word[temp],ax;première patis de l'équation faites z*cos(angY)
- ;partis 2 x*sin(angY)
- fild dword[angy];on met l'angle dans st0
- fsin;on le sin
- fist dword[temp2]
- finit;flushy
- mov ax,word[x]
- mov bx,word[temp2]
- mul bx;x*sin(angY)
- mov edi,dword[x]
- sub word[temp],ax;z*cos(angY) - x*sin(angY)
- mov edx,dword[temp] ; z est envoyer
- ret
- global tournz
- tournz:
- mov dword[angz],ecx
- mov dword[y],esi
- mov dword[x],edi
- ;allé on calcule x
- ;partie un : x*cos(angZ)
- mov ax,word[x]
- fild dword[angz];on met l'angle dans st0
- fcos;cos st0
- fist dword[temp] ; on met cos dans temp
- finit ; on flush le tous
- mov bx,word[temp]
- mul bx
- mov word[temp],ax;première patis de l'équation faites
- ;partis 2 y*sin(angZ)
- fild dword[angz];on met l'angle dans st0
- fcos;on le sinusite ;)
- fist dword[temp2]
- finit;flushy
- mov ax,word[y]
- mov bx,word[temp2]
- mul bx;y*sin(angZ)
- sub word[temp],ax;x*cos(angZ) - y*sin(angZ)
- mov edi,dword[temp];et hop ca repart vers la mort
- ;on calcule y
- ;partie un : x*sin(angZ)
- mov ax,word[x]
- fild dword[angz];on met l'angle dans st0
- fsin;sin st0
- fist dword[temp] ; on met sin dans temp
- finit ; on flush le tous
- mov bx,word[temp]
- mul bx
- mov word[temp],ax;première patis de l'équation faites z*cos(angY)
- ;partis 2 y*cos(angZ)
- fild dword[angz];on met l'angle dans st0
- fcos;on le cos
- fist dword[temp2]
- finit;flushy
- mov ax,word[y]
- mov bx,word[temp2]
- mul bx;y*cos(angZ)
- sub word[temp],ax;x*sin(angZ) + y*cos(angZ)
- mov esi,dword[temp] ; y est envoyer
- ret
- global main
- section .bss
- display_name: resq 1
- screen: resd 1
- depth: resd 1
- connection: resd 1
- width: resd 1
- height: resd 1
- window: resq 1
- gc: resq 1
- section .data
- event: times 24 dq 0
- x1: dd 0
- x2: dd 0
- y1: dd 0
- y2: dd 0
- x: dd 0
- y: dd 0
- z: dd 0
- xp0: dd 0
- xp1: dd 0
- xp2: dd 0
- xp3: dd 0
- xp4: dd 0
- xp5: dd 0
- xp6: dd 0
- xp7: dd 0
- yp0: dd 0
- yp1: dd 0
- yp2: dd 0
- yp3: dd 0
- yp4: dd 0
- yp5: dd 0
- yp6: dd 0
- yp7: dd 0
- temp: dd 0
- temp2: dd 0
- section .text
- ;##################################################
- ;########### PROGRAMME PRINCIPAL ##################
- ;##################################################
- main:
- xor rdi,rdi
- call XOpenDisplay ; Création de display
- mov qword[display_name],rax ; rax=nom du display
- ; display_name structure
- ; screen = DefaultScreen(display_name);
- mov rax,qword[display_name]
- mov eax,dword[rax+0xe0]
- mov dword[screen],eax
- mov rdi,qword[display_name]
- mov esi,dword[screen]
- call XRootWindow
- mov rbx,rax
- mov rdi,qword[display_name]
- mov rsi,rbx
- mov rdx,10
- mov rcx,10
- mov r8,400 ; largeur
- mov r9,400 ; hauteur
- push 0xFFFFFF ; background 0xRRGGBB
- push 0x00FF00
- push 1
- call XCreateSimpleWindow
- mov qword[window],rax
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,131077 ;131072
- call XSelectInput
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- call XMapWindow
- mov rsi,qword[window]
- mov rdx,0
- mov rcx,0
- call XCreateGC
- mov qword[gc],rax
- mov rdi,qword[display_name]
- mov rsi,qword[gc]
- mov rdx,0x000000 ; Couleur du crayon
- call XSetForeground
- boucle: ; boucle de gestion des évènements
- mov rdi,qword[display_name]
- mov rsi,event
- call XNextEvent
- cmp dword[event],ConfigureNotify ; à l'apparition de la fenêtre
- je dessin ; on saute au label 'dessin'
- cmp dword[event],KeyPress ; Si on appuie sur une touche
- je closeDisplay ; on saute au label 'closeDisplay' qui ferme la fenêtre
- jmp boucle
- ;#########################################
- ;# DEBUT DE LA ZONE DE DESSIN #
- ;#########################################
- dessin:
- ; dessin de ligne
- ;POINT 0
- mov dword[x],50
- mov dword[y],150
- mov dword[z],0
- mov edi,dword[x]
- mov esi,dword[y]
- mov edx,dword[z]
- call trans
- mov dword[x],edi
- mov dword[y],esi
- mov eax,dword[x]
- mov ebx,dword[y]
- mov dword[xp0],eax ;POINT 0
- mov dword[yp0],ebx
- ;POINT 1
- mov dword[x],150
- mov dword[y],150
- mov dword[z],0
- mov edi,dword[x]
- mov esi,dword[y]
- mov edx,dword[z]
- call trans
- mov dword[x],edi
- mov dword[y],esi
- mov eax,dword[x]
- mov ebx,dword[y]
- mov dword[xp1],eax ;POINT 1
- mov dword[yp1],ebx
- ;POINT 2
- mov dword[x],150
- mov dword[y],50
- mov dword[z],0
- mov edi,dword[x]
- mov esi,dword[y]
- mov edx,dword[z]
- call trans
- mov dword[x],edi
- mov dword[y],esi
- mov eax,dword[x]
- mov ebx,dword[y]
- mov dword[xp2],eax ;POINT 2
- mov dword[yp2],ebx
- ;POINT 3
- mov dword[x],50
- mov dword[y],50
- mov dword[z],0
- mov edi,dword[x]
- mov esi,dword[y]
- mov edx,dword[z]
- call trans
- mov dword[x],edi
- mov dword[y],esi
- mov eax,dword[x]
- mov ebx,dword[y]
- mov dword[xp3],eax ;POINT 3
- mov dword[yp3],ebx
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp3] ; coordonnée source en x point 3
- mov r8d,dword[yp3] ; coordonnée source en y point 3
- mov r9d,dword[xp2] ; coordonnée destination en x point 2
- push qword[yp2] ; coordonnée destination en y point 2
- call XDrawLine
- ; dessin de ligne
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp2] ; coordonnée source en x point 2
- mov r8d,dword[yp2] ; coordonnée source en y point 2
- mov r9d,dword[xp1] ; coordonnée destination en x point 1
- push qword[yp1] ; coordonnée destination en y point 1
- call XDrawLine
- ; dessin de ligne
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp1] ; coordonnée source en x point 1
- mov r8d,dword[yp1] ; coordonnée source en y point 1
- mov r9d,dword[xp0] ; coordonnée destination en x point 0
- push qword[yp0] ; coordonnée destination en y point 0
- call XDrawLine
- ; dessin de ligne
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp0] ; coordonnée source en x point 0
- mov r8d,dword[yp0] ; coordonnée source en y point 0
- mov r9d,dword[xp3] ; coordonnée destination en x point 3
- push qword[yp3] ; coordonnée destination en y point 3
- call XDrawLine
- ;###########################"
- ;Point du fond
- ;Point 6
- mov dword[z],100
- mov edi,dword[xp3]
- mov esi,dword[yp3]
- mov edx,dword[z]
- call trans
- mov dword[x],edi
- mov dword[y],esi
- mov eax,dword[x]
- mov ebx,dword[y]
- mov dword[xp6],eax ;POINT 6
- mov dword[yp6],ebx
- ; dessin de ligne
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp6] ; coordonnée source en x point 6
- mov r8d,dword[yp6] ; coordonnée source en y point 6
- mov r9d,dword[xp3] ; coordonnée destination en x point 3
- push qword[yp3] ; coordonnée destination en y point 3
- call XDrawLine
- ;Point 7
- mov dword[z],100
- mov edi,dword[xp2]
- mov esi,dword[yp2]
- mov edx,dword[z]
- call trans
- mov dword[x],edi
- mov dword[y],esi
- mov edx,dword[z]
- mov eax,dword[x]
- mov ebx,dword[y]
- mov dword[xp7],eax ;POINT 7
- mov dword[yp7],ebx
- ; dessin de ligne
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp7] ; coordonnée source en x point 7
- mov r8d,dword[yp7] ; coordonnée source en y point 7
- mov r9d,dword[xp2] ; coordonnée destination en x point 2
- push qword[yp2] ; coordonnée destination en y point 2
- call XDrawLine
- ;Point 4
- mov dword[z],100
- mov edi,dword[xp1]
- mov esi,dword[yp1]
- mov edx,dword[z]
- call trans
- mov dword[x],edi
- mov dword[y],esi
- mov eax,dword[x]
- mov ebx,dword[y]
- mov edx,dword[z]
- mov dword[xp4],eax ;POINT 4
- mov dword[yp4],ebx
- ; dessin de ligne
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp4] ; coordonnée source en x point 4
- mov r8d,dword[yp4] ; coordonnée source en y point 4
- mov r9d,dword[xp1] ; coordonnée destination en x point 1
- push qword[yp1] ; coordonnée destination en y point 1
- call XDrawLine
- ;Point 5
- mov dword[z],100
- mov edi,dword[xp0]
- mov esi,dword[yp0]
- mov edx,dword[z]
- call trans
- mov dword[x],edi
- mov dword[y],esi
- mov eax,dword[x]
- mov ebx,dword[y]
- mov dword[xp5],eax ;POINT 5
- mov dword[yp5],ebx
- ; dessin de ligne
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp5] ; coordonnée source en x point 5
- mov r8d,dword[yp5] ; coordonnée source en y point 5
- mov r9d,dword[xp0] ; coordonnée destination en x point 0
- push qword[yp0] ; coordonnée destination en y point 0
- call XDrawLine
- ;LIGNE 6-7
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp6] ; coordonnée source en x point 6
- mov r8d,dword[yp6] ; coordonnée source en y point 6
- mov r9d,dword[xp7] ; coordonnée destination en x point 7
- push qword[yp7] ; coordonnée destination en y point 7
- call XDrawLine
- ;LIGNE 7-4
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp7] ; coordonnée source en x point 7
- mov r8d,dword[yp7] ; coordonnée source en y point 7
- mov r9d,dword[xp4] ; coordonnée destination en x point 4
- push qword[yp4] ; coordonnée destination en y point 4
- call XDrawLine
- ;LIGNE 4-5
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp4] ; coordonnée source en x point 4
- mov r8d,dword[yp4] ; coordonnée source en y point 4
- mov r9d,dword[xp5] ; coordonnée destination en x point 5
- push qword[yp5] ; coordonnée destination en y point 5
- call XDrawLine
- ;LIGNE 5-6
- mov rdi,qword[display_name]
- mov rsi,qword[window]
- mov rdx,qword[gc]
- mov ecx,dword[xp5] ; coordonnée source en x point 5
- mov r8d,dword[yp5] ; coordonnée source en y point 5
- mov r9d,dword[xp6] ; coordonnée destination en x point 6
- push qword[yp6] ; coordonnée destination en y point 6
- call XDrawLine
- ; ############################
- ; # FIN DE LA ZONE DE DESSIN #
- ; ############################
- jmp flush
- flush:
- mov rdi,qword[display_name]
- call XFlush
- jmp boucle
- mov rax,34
- syscall
- closeDisplay:
- mov rax,qword[display_name]
- mov rdi,rax
- call XCloseDisplay
- xor rdi,rdi
- call exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement