>> Électroniques Technologie >  >> téléphones >> Stations de conférence

Programme en langage assembleur pour factorielle d'un nombre donné ?

Voici un exemple de programme en langage assembleur (syntaxe NASM) pour calculer la factorielle d'un nombre donné :

```

BITS 16

; Définir le segment de données

SEGMENT DE DONNÉES

num : DW ?; Le nombre pour trouver la factorielle de

; Définir le segment de code

SEGMENT DE CODE

commencer:

hache de déplacement, DONNÉES ; Charger le registre DS avec l'adresse du segment de données

mouvement dx, num; Chargez le numéro dans DX

cmp dx, 0; Vérifiez si le numéro est 0

je zéro; Si c'est le cas, passez à l'étiquette "zéro"

mouvement cx, 1 ; Initialiser la factorielle (CX) à 1

; Démarrer la boucle de calcul factoriel

boucle:

imul cx; Multipliez CX par le nombre actuel dans DX

inc dx ; Incrémenter le nombre actuel

cmp dx, num; Comparez DX au numéro d'origine

boucle jb ; Si DX est inférieur au nombre, revenez à la boucle

; Afficher la factorielle

zéro:

mouvement ah, 4Ch; AH =4Ch pour l'interruption DOS "Print string"

lea dx, str_result; Charger l'adresse de la chaîne "résultat" dans DX

int 21h; Appelez l'interruption DOS 21h pour afficher la chaîne

retraité; Retour au système d'exploitation

; Définir la chaîne "résultat"

str_result :DB "La factorielle est :$"

; Fin du programme

FIN début

; Définir le segment de pile

SEGMENT DE PILE

; Définir les données pour la pile

DW 0

FINS DE LA PILE

```

Explication du programme :

1. Segment de données :

- `num :` définit une variable de mot (16 bits) appelée `num` dans le segment de données. Cette variable stockera le nombre pour lequel on veut trouver la factorielle.

2. Segment de code :

- `start:` est le point d'entrée du programme.

3. Initialisation :

- `mov ax, DATA` :charge l'adresse du segment de données dans le registre AX.

- `mov dx, num` :Charge la valeur de `num` dans le registre DX.

4. Vérifiez zéro :

- `cmp dx, 0` :Compare la valeur en DX avec 0.

- `je zéro` :Si DX est égal à 0, passez au label `zéro`.

5. Boucle de calcul factoriel :

- 'boucle' :

- `imul cx` :Multiplie la valeur actuelle dans CX par le nombre actuel dans DX.

- `inc dx` :Incrémente la valeur en DX.

- `cmp dx, num` :Compare DX avec le numéro d'origine.

- `jb loop` :Si DX est inférieur au nombre, revient à l'étiquette `loop` pour continuer le calcul.

6. Affichez la factorielle :

- `zéro :` (Étiquette)

- `mov ah, 4Ch` :définit AH sur 4Ch, qui est l'interruption DOS pour l'impression d'une chaîne.

- `lea dx, str_result` :Charge l'adresse de la chaîne "result" dans DX.

- `int 21h` :Appelle l'interruption DOS 21h pour afficher la chaîne.

7. Retour :

- `ret` :renvoie au système d'exploitation.

8. Segment de pile :

- Le segment de pile est défini avec une taille d'un double mot (2 octets) et initialisé à 0.

Remarque :ce programme utilise le système d'exploitation DOS pour imprimer le résultat, il ne fonctionnera donc que dans un environnement DOS ou un émulateur prenant en charge DOS.

Stations de conférence