tesma
Messages postés3Date d'inscriptionmardi 10 mai 2011StatutMembreDernière intervention31 mai 2011
-
10 mai 2011 à 16:42
BLUEBIBUBBLE
Messages postés116Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention10 avril 2013
-
5 nov. 2011 à 16:42
Bonjour, y'aurait-il un code pour le jeu du pendu en assembleur?? je dois réaliser un projet de ce type, mais je sais pas par ou commencer.
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 11 mai 2011 à 00:37
salut,
Facile, tu commences par le sol, ensuite tu fais l'échafaud et pour finir le bonhomme, mais tout projet commence par le papier ( surtout pour un pendu ;-).
Il faut que tu saches quel processeur et assembleur tu utiliseras. Connaitre un minimum le langage machine (doc intel, amd, instructions, mnémoniques, registres, ...)
Ensuite, tu devras déterminer avec quel système d'exploitation, ce qui te donneras le format de l'executable et l'API à utiliser pour acceder aux périphériques.
Puis viendras l'analyse du programme, les algorithmes et enfin, la programmation.
Sur que si tu trouves un code tout fait, meme en C, il y auras moins de boulot. Tu peux aussi savoir à peu près où tu vas et cherher des exemples d'utilisation d'API qui n'ont pas forcement de rapport avec un jeu du pendu.
Tu peux aussi regarder les "hello world" et autres codes pour mieux voir certaines choses.
tesma
Messages postés3Date d'inscriptionmardi 10 mai 2011StatutMembreDernière intervention31 mai 2011 31 mai 2011 à 10:06
Salut,
J'ai essayé de bidouiller un code pour le pendu en ASM X86, j'utiise le logiciel emu8086, mais le code me produit des erreurs, pourriez-vous m'aider à debugger ce dernier:
Code:
org 0x7C00
stack equ 0x7B80 ; stack (grows downwards, of course)
lives equ 0x7B80 ; place to store number of lives
target_word equ 0x7B82 ; place to store target word
max_target_len equ 60 ; maximum length of target word
guessed equ 0x7BC0 ; bitmap - one bit per ASCII char 0..127
; set if guessed
cli
; set the stack pointer
xor ax,ax
mov ss,ax
mov ds,ax
mov es,ax
mov sp,stack
.message: db " Hangman! ",0
newline: db 13,10,0
backspace: db 8,32,8,0
read_guess:
mov si,.message
call puts
mov di,target_word
; read keyboard presses until enter is pressed
.loop:
xor ah,ah
int 0x16
; now al=character
cmp al,8 ; backspace?
je .backspace
cmp al,13 ; enter?
je .enter
cmp di,(target_word+max_target_len)
je .loop
and al,0x7F
mov [di],al
inc di
call putc
jmp .loop
.backspace:
cmp di,target_word
je .loop
dec di
mov si,backspace
call puts
jmp .loop
.enter:
mov [di],byte 0 ; null-terminate string
call clear_line ; clear line to hide target
mov [lives],word 10 ; reset lives counter
; clear guessed bitmap
mov di,guessed
mov cx,16
xor al,al
rep stosb
mov [guessed+4],byte 1 ; space always revealed
jmp guess
.message: db "Target: ",0
.message_end:
guess:
mov si,.word_str
call puts
xor bp,bp
mov ax,bp
mov cx,bp
.print_word_loop:
; has this character been revealed?
mov al,[target_word+bp]
test al,al
jz .end
call split8
mov bl,[guessed+bx]
test bl,dl
jz .not_revealed
.is_revealed:
call putc
inc bp
jmp .print_word_loop
.not_revealed:
inc cl
mov al,'-'
call putc
inc bp
jmp .print_word_loop
.end:
mov si,.lives_str
call puts
mov ax,[lives]
call putint
test cl,cl ; neither putint nor puts clobbers cx
jz you_win
mov si,.guess_str
call puts
; read a guess character from the keyboard
xor ah,ah
int 0x16
and al,0x7F
; print it :)
call putc
; already guessed?
call split8
mov cl,[guessed+bx]
test cl,dl
jnz .already_guessed
or cl,dl
mov [guessed+bx],cl
; deduct a life if this char is not in the word
mov si,target_word
mov dl,al
.loop:
lodsb
test al,al
jz .fail
cmp al,dl
je .end2
jmp .loop
.fail:
; dec life counter
dec word [lives]
jz you_die
.already_guessed:
.end2:
call up_line
call up_line
jmp guess
.word_str: db "Word: ",0
.lives_str: db 13,10,"Lives: ",0
.guess_str: db 13,10,"Guess: ",0