CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[assembleur x86] probleme

herbeman
herbeman
Niveau 8
13 décembre 2009 à 12:00:24

voila je dois faire l'addition de 2 chiffre entre 0 et 4 (pour l'instant je n'ai pas fais de controle d saisie on verra ca plus tara chaque fois que je le teste celui ci m'affiche une tete blanche ou un coeur, voici mon code:

donnees segment 'data'

val1 DB ?
val2 DB ?
ch1 DB ?
ch2 DB ?

messaisie DB 0Dh,0Ah,0Ah,'Saisir un chiffre entre [1-4] : $'
messaisie2 DB 0Dh,0Ah,0Ah,'Saisir un 2eme chiffre entre [1-4] $'

meserreur DB 0Dh,0Ah,'saisie non valide !$'

donnees ends

;_-__-_-__-_-__-__-__-_-_-_-__-_-_-__-__-__-_-_-_-

inst segment 'code'
assume cs:inst, ds:donnees,ss:pile

debut:
mov ax,donnees
mov ds,ax
mov ax,pile
mov ss,ax
lea sp,sommet

saisie1:

mov ah,9
lea dx,messaisie
int 21h
mov ah,1
mov al,val1
mov ch1,al
int 21h

saisie2:

mov ah,9
lea dx,messaisie2
int 21h
mov ah,1
mov al,val2
mov ch2,al
int 21h

addition:

sub ch2,'0'
sub ch1,'0'
mov al,ch1
add ch2,al
add ch2,'0'

affichage:

mov ah,2
lea dx,ch2
int 21h

RetourSysteme:
MOV ah,4Ch
INT 21h
inst ends
end debut

herbeman
herbeman
Niveau 8
14 décembre 2009 à 17:46:00

voila j'ai une autre version:

pile segment 'stack'

base DB 100 DUP(?)
sommet DB ?

pile ends

;_-__-_-__-_-__-__-__-_-_-_-__-_-_-__-__-__-_-_-_-

donnees segment 'data'

val1 DB ?
val2 DB ?

messaisie DB 0Dh,0Ah,0Ah,'Saisir un chiffre entre [1-4] : $'
messaisie2 DB 0Dh,0Ah,0Ah,'Saisir un 2eme chiffre entre [1-4] $'

meserreur DB 0Dh,0Ah,'saisie non valide !$'

donnees ends

;_-__-_-__-_-__-__-__-_-_-_-__-_-_-__-__-__-_-_-_-

inst segment 'code'
assume cs:inst, ds:donnees,ss:pile

debut:
mov ax,donnees
mov ds,ax
mov ax,pile
mov ss,ax
lea sp,sommet

saisie1:

mov ah,9
lea dx,messaisie
int 21h
mov ah,1
mov al,val1
int 21h
sub val1,'0'

saisie2:

mov ah,9
lea dx,messaisie2
int 21h
mov ah,1
mov al,val2
int 21h
sub val2,'0'

addition:

mov al,val2
add val1,al
add val1,'0'

affichage:

mov ah,2
lea dx,val1
int 21h

RetourSysteme:
MOV ah,4Ch
INT 21h
inst ends
end debut

mais toujours le meme probleme :-(

dnob700
dnob700
Niveau 10
14 décembre 2009 à 23:59:56

L'assembleur, c'est horrible à écrire et bien plus encore à lire. Je ne te garantie pas que ça t'amène des réponses, mais si tu veux avoir une chance que quelqu'un prenne le temps d'essayer de comprendre ce qui se passe dans ton programme, il faudrait que tu commente presque chaque ligne de ton programme pour que l'on puisse suivre.

herbeman
herbeman
Niveau 8
15 décembre 2009 à 18:58:51

euh c'est pas des des instructions très compliquées la :hap:

godrik
godrik
Niveau 30
15 décembre 2009 à 19:45:08

herbeman, si ca fait plus d'un ecran c'est tres complique. L'assembleur, c'est vraiment pas fait pour etre lu.

dnob700
dnob700
Niveau 10
15 décembre 2009 à 23:10:08

C'est-à-dire que j'ai beau "connaître" à peu près l'assembleur. Je ne connais pas les convention de programmation. Là, il faudrait au moins que tu écrive pour chaque procédure l'état dans lequel elles s'attendent à trouver les registres et celui dans lequel elles les laissent par exemple. D'ailleurs, faire ça et vérifier que les conditions sont vérifiées pourrait te suffire à résoudre ton problème.

kufa
kufa
Niveau 9
16 décembre 2009 à 15:02:17

C'est ton utilisation de int 21h / 1 pour lire un charactere qui est fausse:
tu fais
mov ah,1
mov al,val1 ; <- ??
int 21h
alors que ca devrait etre
mov ah,1
int 21h
mov val1,al ; <- sauvegarde le resultat

En corrige, ca ressemble a ca:
http://codepaste.net/k8b5a8

Remarques: tu utilises quel compilo? pkoi ne pas utiliser .code,.data et .stack? D'ailleurs, t'as pas vraiment besoin de stack dans ce code, tu fais aucun call etc

kufa
kufa
Niveau 9
16 décembre 2009 à 15:06:26

Et au passage, il y a encore des gens qui font du 16bits?! Laisse moi deviner, c'est pour un cours..

@godrik & dnoob: l'assembleur peut se lire assez bien, quand on en a bien l'habitude, et surtout quand il fait qqchose qu'on connait. Par contre effectivement, quand on ne sait pas trop ce que le code doit faire, lire de l'asm est plus difficile que de lire du C/C++.

herbeman
herbeman
Niveau 8
16 décembre 2009 à 23:06:34

oui c'est pour un tp (merci pour vos réponses quand meme)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment