Langage d'assemblage if et else
Comment puis-je convertir cette assemblée?
donné j'ai ce menu
LEA SI, MSG1
call PRINT_STRING
gotoxy 0,1
LEA SI, MSG2
call PRINT_STRING
gotoxy 0,2
LEA SI, MSG3
call PRINT_STRING
gotoxy 0,3
LEA SI, MSG4
call PRINT_STRING
gotoxy 0,4
LEA SI, MSG5
call PRINT_STRING
gotoxy 0,5
et de définir
MSG1 DB 'Choose Arithmetic Operation ' , 0
MSG2 DB '(1) Addition ',0
MSG3 DB '(2) Subtraction', 0
MSG4 DB '(3) Multiplication',0
MSG5 DB '(4) Division',0
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM_UNS
et je veux insérer cette fi
if( x == 1)
puis ajouter
else if(x==2)
puis soustraire
else if(x==3)
puis, multiplier
else if(x == 4)
ensuite, divisez
donné que j'ai les fonctions de chaque opération arithmétique.
quelqu'un ? je suis nouveau à l'assemblée et je trouve if et else bizarre, au moins si je apprendre le truc, alors ce serait parfait. haha merci en passant.
- La solution la plus simple:
cmp x, 1; je add; cmp x, 2; je subtract
et ainsi de suite. Où avez-vous coincé ...
Vous devez vous connecter pour publier un commentaire.
permettez-moi de le décrire avec un exemple
Pour si(ax==bx) alors ... :
Pour si(ax!=bx) alors ... :
Également envisager de 2 points!
1 - placez votre code (IL n': MOV CL,07H) après
2 - choisir une étiquette pour le reste du code pour revenir là où vous avez sauté de. comme:
Voici un exemple de code:
Pour 8086 assemblée, quelque chose comme ceci:
Allait devenir quelque chose comme ceci:
C'est comme si vous ne pouvez le faire
if(something) goto somewhere
(oùgoto
est la seule chose que vous pouvez avoir après laif()
). Bien sûr, cela devient malpropre quand il y a beaucoup de branches (et sur les Processeurs modernes avec la direction de la mauvaise prédiction de sanctions "de nombreuses branches" peut être beaucoup plus lent).Pour votre cas particulier (où les chiffres sont séquentiels); une façon plus intelligente serait d'utiliser un tableau. Par exemple, quelque chose comme ceci:
Pourrait devenir ce: