Program u asemblerskom jeziku za faktorijel zadanog broja?
```
BITOVI 16
; Definirajte segment podataka
SEGMENT PODATAKA
broj:DW ?; Broj za iznalaženje faktorijela
; Definirajte segment koda
SEGMENT KODA
start:
mov sjekira, PODACI; Učitajte DS registar s adresom segmenta podataka
mov dx, broj; Učitajte broj u DX
cmp dx, 0; Provjerite je li broj 0
je zero; Ako je tako, skočite na oznaku "nula".
mov cx, 1; Inicijalizirajte faktorijel (CX) na 1
; Pokrenite petlju izračuna faktorijela
petlja:
imul cx; Pomnožite CX s trenutnim brojem u DX
inc dx; Povećaj trenutni broj
cmp dx, broj; Usporedite DX s izvornim brojem
jb petlja; Ako je DX manji od broja, skočite natrag na petlju
; Prikažite faktorijel
nula:
mov ah, 4Ch; AH =4Ch za DOS prekid "Ispiši niz".
lea dx, str_rezultat; Učitajte adresu niza "rezultata" u DX
int 21h; Pozovite DOS prekid 21h za prikaz niza
ret; Povratak na operativni sustav
; Definirajte niz "rezultata".
str_result:DB "Faktorijel je:$"
; Kraj programa
KRAJ početak
; Definirajte segment stoga
SEGMENT STOGA
; Definirajte podatke za stog
DW 0
KRAJEVI STOGA
```
Objašnjenje programa:
1. Segment podataka:
- `num:` definira riječnu (16-bitnu) varijablu koja se zove `num` u segmentu podataka. Ova varijabla će pohraniti broj za koji želimo pronaći faktorijel.
2. Segment koda:
- `start:` je ulazna točka programa.
3. Inicijalizacija:
- `mov ax, DATA`:Učitava adresu segmenta podataka u AX registar.
- `mov dx, num`:učitava vrijednost `num` u DX registar.
4. Provjerite nulu:
- `cmp dx, 0`:Uspoređuje vrijednost u DX-u s 0.
- `je zero`:Ako je DX jednak 0, skočite na oznaku `zero`.
5. Petlja izračuna faktorijela:
- `petlja`:
- `imul cx`:Množi trenutnu vrijednost u CX s trenutnim brojem u DX.
- `inc dx`:Povećava vrijednost u DX-u.
- `cmp dx, num`:uspoređuje DX s izvornim brojem.
- `jb petlja`:ako je DX manji od broja, vraća se na oznaku `petlja` za nastavak izračuna.
6. Prikažite faktorijel:
- `nula:` (oznaka)
- `mov ah, 4Ch`:postavlja AH na 4Ch, što je DOS prekid za ispis niza.
- `lea dx, str_result`:Učitava adresu niza "rezultata" u DX.
- `int 21h`:poziva DOS prekid 21h za prikaz niza.
7. Povratak:
- `ret`:Povratak na operativni sustav.
8. Segment hrpe:
- Segment stoga definiran je veličinom jedne dvostruke riječi (2 bajta) i inicijaliziran na 0.
Napomena:Ovaj program koristi DOS operativni sustav za ispis rezultata, tako da će raditi samo u DOS okruženju ili emulatoru koji podržava DOS.