NASM

tiger360
NASM

salut

j'aimerai savoir les commandes pour compiler et faire l'édition les liens
si je met ds mon code oie.asm

global main
extern printw
...


call printw

est ce comme ceci

              nasm -f elf oie.asm
              ld oie.o -o oie -e main 
fredericmazue

Salut tiger360 :)

Quote:
si je met ds mon code oie.asm

C'est pas le contraire ? Le code dans oie.asm ;)

Tu programmes un jeu de l'oie en assembleur ? ;)

Quote:
nasm -f elf oie.asm
ld oie.o -o oie -e main

Ma foi tout cela me paraît très bien :)

tiger360

oui mais ... non c est faux ce que j'ai mis

au fait c etait

nasm oie.asm -o oie.o -f elf
ld oie.o printw.o -o oie -e main

mais merci quand meme

Quote:
Tu programmes un jeu de l'oie en assembleur ?

et oui et j trouve que c est tres different et tres difficile sous linux que sous dos ou bien c est parce que c est la premiere fois qu on travaille sous linux

fredericmazue

Ah oui, il manquait -o oie. Mais en fait je n'avais pas regardé dans le détail, je l'avoue :oops:
Je croyais que tu posais la question sur la démarche, compilation, édition de liens et point d'entrée, et sur le principe c'était bon :)

Bon courage pour tes travaux sous Linux. En effet c'est autre chose que DOS, puisque c'est un vrai système d'exploitation. Du coup tu peux être fier de faire de la vraie programmation :-)

tiger360

voici l'enonce http://www.yaronet.com/mirari/get.php?c=78JS

j ai pas fais grand chose
mais j galere un peu pour la mise a jour du plateau
en fait il faut que lorsque le pion ecrase une valeur
qu il la remette a sa place :
au depart le pion est est a la premiere case
ensuite le pion avance et remet bien le nombre precedent
mais apres ca foire


  $  2  3  4  5  6  7  8  9 10
 36 37 38 39 40 41 42 43 44 11
 35 64 65 66 67 68 69 70 45 12
 34 63 84 85 86 87 88 71 46 13
 33 62 83 96 97 98 89 72 47 14
 32 61 82 95 *  99 90 73 48 15
 31 60 81 94 93 92 91 74 49 16
 30 59 80 79 78 77 76 75 50 17
 29 58 57 56 55 54 53 52 51 18
 28 27 26 25 24 23 22 21 20 19
 Introduisez une valeur entre 1 et 6
5
  1  2  3  4  5 $   7  8  9 10
 36 37 38 39 40 41 42 43 44 11
 35 64 65 66 67 68 69 70 45 12
 34 63 84 85 86 87 88 71 46 13
 33 62 83 96 97 98 89 72 47 14
 32 61 82 95 *  99 90 73 48 15
 31 60 81 94 93 92 91 74 49 16
 30 59 80 79 78 77 76 75 50 17
 29 58 57 56 55 54 53 52 51 18
 28 27 26 25 24 23 22 21 20 19
 Introduisez une valeur entre 1 et 6
1
  1  2  3  4  5 $  $   8  9 10
 36 37 38 39 40 41 42 43 44 11
 35 64 65 66 67 68 69 70 45 12
 34 63 84 85 86 87 88 71 46 13
 33 62 83 96 97 98 89 72 47 14
 32 61 82 95 *  99 90 73 48 15
 31 60 81 94 93 92 91 74 49 16
 30 59 80 79 78 77 76 75 50 17
 29 58 57 56 55 54 53 52 51 18
 28 27 26 25 24 23 22 21 20 19

et voila le fichier


section .data

plateau  db   "  1","  2","  3","  4","  5","  6","  7","  8","  9"," 10","  ",10
		   db	" 36"," 37"," 38"," 39"," 40"," 41"," 42"," 43"," 44"," 11","  ",10
		   db	" 35"," 64"," 65"," 66"," 67"," 68"," 69"," 70"," 45"," 12","  ",10
		   db	" 34"," 63"," 84"," 85"," 86"," 87"," 88"," 71"," 46"," 13","  ",10
		   db	" 33"," 62"," 83"," 96"," 97"," 98"," 89"," 72"," 47"," 14","  ",10
		   db   " 32"," 61"," 82"," 95"," * "," 99"," 90"," 73"," 48"," 15","  ",10
		   db	" 31"," 60"," 81"," 94"," 93"," 92"," 91"," 74"," 49"," 16","  ",10
	      db	" 30"," 59"," 80"," 79"," 78"," 77"," 76"," 75"," 50"," 17","  ",10
		   db	" 29"," 58"," 57"," 56"," 55"," 54"," 53"," 52"," 51"," 18","  ",10
		   db	" 28"," 27"," 26"," 25"," 24"," 23"," 22"," 21"," 20"," 19","  ",10

taille   equ $-plateau

parcours db 0,1,2,3,4,5,6,7,8,9,20,31,42,53,64,75,86,97,108,107,
         db 106,105,104,103,102,101,100,99,88,77,66,55,44,33,22,11,12,13,14,
			db 15,16,17,18,19,30,41,52,63,74,85,96,95,94,93,92,91,90,89,78,
			db 67,56,45,34,23,24,25,26,27,28,29,40,51,62,73,84,83,82,81,80,
			db	79,68,57,46,35,36,37,38,39,50,61,72,71,70,69,58,47,48,49,60,59
																

phr   	db	" Introduisez une valeur entre 1 et 6 ", 10
tai      equ $-phr
TROIS    equ 3 
position  db  0


section .bss

valde	resb	1		
;position resb	1
tmp resw  1

section .code

global main

main: 

;******************************** 
; pour la sauvegarde du plateau initiale                                            
xor ebp,ebp                                                                     
mov  ebp,[plateau]                                                            
;********************************																		 
mov  ebp,[plateau] 																	
; plateau avec le pion a la case 0
mov bh,'$'
mov bl,' '
mov eax,0
mov [plateau],bl
mov [plateau+1],bl
mov [plateau+2],bh

mov eax, 4           ;  affichage du plateau
mov ebx, 1
mov ecx,plateau
mov edx,taille
int 0x80



NOK:

mov [plateau],ebp

mov eax, 4           ;  affichage  de la phrase 
mov ebx, 1				
mov ecx,phr		
mov edx,tai		
int 0x80			

mov eax,3           ; lecture au clavier de la valeur du de
mov ebx,0		
mov ecx,valde 			
mov edx,100			
int 0x80


@si:
    
	cmp eax,2
	ja NOK
	cmp byte[valde],'1'
   jb NOK
	suite:
	cmp byte[valde],'6'
   ja NOK


mov bh,'$'
mov bl,' '

;mov byte [position],0
mov al,byte [valde]
sub byte al ,30h   ; Permet le passage du code ascii au code normal
add byte [position],al 
mov al,byte [position]


; parcours du tableau "parcours"
xor ecx,ecx
mov cl,[parcours+eax]   


mov [plateau+ecx*TROIS],bl
mov [plateau+ecx*TROIS+1],bh
mov [plateau+ecx*TROIS+2],bl

mov eax, 4           ;  affichage du plateau
mov ebx, 1
mov ecx,plateau
mov edx,taille
int 0x80


jmp NOK

mov eax,1
mov ebx,0
int 0x80
fredericmazue

Et pourquoi pas ne définir une zone mémoire "vide" de la taille du plateau de jeu ?
Au moment de jouer tu remplis la zone avec le plateau modèle, celui qui est dans ton code, (juste une boucle à faire) tu places le pion, et tu affiche ce nouveau plateau ainsi constitué. Comme ça le plateau qui te sert de modèle reste intact. Au prochain coup , tu fais de même et comme ça tu n'as pas besoin de te préoccuper de restituer la case où se trouvais le pion le coup d'avant, ça sera fait automatiquement ;)

J'aime bien cet exercice :)
Et puis ruser avec les pions c'est bien la seule chose que je savais vraiment faire quand j'allais à l'école :lol:

tiger360

j avais deja essayer ca
et je l ai encore refait mais le pion persiste
il veut pas s en aller :evil:

Introduisez une valeur entre 1 et 6
1
1 $ $ $ $ 6 7 8 9 10
36 37 38 39 40 41 42 43 44 11
35 64 65 66 67 68 69 70 45 12
34 63 84 85 86 87 88 71 46 13
33 62 83 96 97 98 89 72 47 14
32 61 82 95 * 99 90 73 48 15
31 60 81 94 93 92 91 74 49 16
30 59 80 79 78 77 76 75 50 17
29 58 57 56 55 54 53 52 51 18
28 27 26 25 24 23 22 21 20 19

fredericmazue

Quote:
et je l ai encore refait mais le pion persiste
il veut pas s en aller

Soit tu n'as pas compris ce que j'ai voulu te dire, soit tu t'es trompé quelque part.
A partir du moment où tu recopies tout le plateau *initial* dans ta zone tampon, tu écrases forcément la position du pion au coup précédent. Ensuite tu places le pion à sa nouvelle position dans le tampon (jamais dans le plateau initial n'est-ce pas). A ce moment le plateau de jeu à l'instant t est constitué et c'est ce plateau que tu affiches.
Le procédé est tout simple, et archi ultra classique, c'est le moins que l'on puisse dire.
tiger360

chui trop con :lol: c etait une bete erreur

ca marche maintenant merci

voici un petit programme qui permet d'afficher en couleur et d effacer l'ecran .

C'est un prof de 2eme qui nous l'a filé.
Le probleme c est que je n est jamais fait de C
et j aimerai que qqun le transcrive en assembleur si ca vous derange pas

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcnt1.h>

int main (void) {
       int h;
       char bleu[] = "\033[0;34m";     // O;3X;4Y  ou 1;3X;4Y  X et Y = 0..7 
       char normal [] = "\033[0m";
       char clear = "\033[H\033[2J";  //curseur en haut et effacer
 
        h=open("/dev/tty" , O_WRONLY);
        write(h,clear,sizeof(clear));
        write(h,bleu,sizeof(bleu));
        write(h,(coucou\n",7);
        write(h,normal,sizeof(normal));
        exit(0);
 }
fredericmazue

Quote:
chui trop c

Mais non :)
Quote:
c etait une bete erreur

Comme la plupart des erreurs ;)

Quote:
Le probleme c est que je n est jamais fait de C
et j aimerai que qqun le transcrive en assembleur si ca vous derange pa

Pas un dimanche après midi. ...
Mais en fait tu n'en as pas besoin.
Regarde: tu as écrit du code en assembleur qui écrit avec write (appel système) dans le terminal courant.
Le programme C que tu montres, il ne fait rien d'autre que la même chose. Appels système open, write.
Exit tu n'en as même pas besoin, juste tu mets xor eax,eax avant de quitter ton programme.
Le write C c'est comme celui de ton code. Les caractères bizarres "\033[0;34m", etc, sont des codes Ansi pour les couleurs (ou autres commandes), mais ce n'est ni plus ni moins que des caractères à écrire avec write, et en fait tu sais déjà tout faire. Et je suis sûr que tu peux transposer le programme C en assembleur, mais sans connaître le C .

Ah au fait. Qu'est-ce qui se passe avec ton programme quand le joueur approche de la dernière case (*) et que le nombre du dé est plus grand que le nombre de cases qu'il reste à parcourir ? ;)

tiger360

transposer le programme C en assembleur :shock:

oh non ca j crois pas

Et si la valeur est plus grande que la distance séparant le dé de l’arrivée, et bin le pion avance jusqu’à l’arrivée et recule ensuite d’un nombre de cases égal à la
différence entre la valeur initiale du dé et la distance (en nombre de case) jusqu’à
l’arrivée. :P

fredericmazue

Quote:
transposer le programme C en assembleur :Shocked:
oh non ca j crois pas

Je t'assure que pour le bout de code C que tu as donné, il n'y a aucune difficulté.
Quote:
Et si la valeur est plus grande que la distance séparant le dé de l’arrivée, et bin le pion avance jusqu’à l’arrivée et recule ensuite d’un nombre de cases égal à la
différence entre la valeur initiale du dé et la distance (en nombre de case) jusqu’à
l’arrivée.

Oui ça c'est la règle du jeu :D
Mais ce que je voulais dire, c'est que je n'ai pas l'impression que ton code fait ça. Je me trompe ?
Enfin évidemment je parle du code que tu as donné l'autre fois sur ce forum. Tu as peut être avancé depuis :)
tiger360

Quote:
Mais ce que je voulais dire, c'est que je n'ai pas l'impression que ton code fait ça. Je me trompe ?
Enfin évidemment je parle du code que tu as donné l'autre fois sur ce forum. Tu as peut être avancé depuis

Ah ok , oui oui je l ai terminer.