Program v zbirnem jeziku za faktoriel danega števila?
```
BITSI 16
; Določite segment podatkov
PODATKOVNI SEGMENT
št.:DW ?; Število, za katerega najdemo faktorijel
; Določite segment kode
KODA SEGMENT
začetek:
mov sekira, PODATKI; Naložite register DS z naslovom segmenta podatkov
mov dx, num; Naloži številko v DX
cmp dx, 0; Preverite, ali je številka 0
je zero; Če je tako, skočite na oznako "nič".
mov cx, 1; Inicializirajte faktorial (CX) na 1
; Zaženite zanko izračuna faktorjev
zanka:
imul cx; Pomnožite CX s trenutno številko v DX
inc dx; Povečaj trenutno številko
cmp dx, št.; Primerjajte DX z izvirno številko
jb zanka; Če je DX manjši od števila, skočite nazaj v zanko
; Prikažite faktorijel
nič:
mov ah, 4Ch; AH =4Ch za prekinitev DOS "Print string".
lea dx, str_rezultat; Naložite naslov niza "result" v DX
int 21h; Za prikaz niza pokličite prekinitev DOS 21h
ret; Vrnite se v operacijski sistem
; Določite niz "rezultat".
str_result:DB "Faktorial je:$"
; Konec programa
KONEC začetek
; Določite segment sklada
SEGMENT SKLADA
; Določite podatke za sklad
DW 0
KONCI SKLOPOV
```
Razlaga programa:
1. Podatkovni segment:
- `num:` definira besedno (16-bitno) spremenljivko, imenovano `num` v segmentu podatkov. Ta spremenljivka bo shranila število, za katerega želimo najti faktorial.
2. Segment kode:
- `start:` je vstopna točka programa.
3. Inicializacija:
- `mov ax, DATA`:Naloži naslov segmenta podatkov v register AX.
- `mov dx, num`:naloži vrednost `num` v register DX.
4. Preverite nič:
- `cmp dx, 0`:primerja vrednost v DX z 0.
- `je zero`:Če je DX enak 0, skoči na oznako `zero`.
5. Faktorska računska zanka:
- `zanka`:
- `imul cx`:pomnoži trenutno vrednost v CX s trenutnim številom v DX.
- `inc dx`:Poveča vrednost v DX.
- `cmp dx, num`:Primerja DX z izvirno številko.
- `jb loop`:Če je DX manjši od števila, skoči nazaj na oznako `loop` za nadaljevanje izračuna.
6. Prikaži faktorial:
- `zero:` (oznaka)
- `mov ah, 4Ch`:Nastavi AH na 4Ch, kar je prekinitev DOS za tiskanje niza.
- `lea dx, str_result`:Naloži naslov niza "result" v DX.
- `int 21h`:kliče prekinitev DOS 21h za prikaz niza.
7. Vrnitev:
- `ret`:vrne se v operacijski sistem.
8. Segment sklada:
- Segment sklada je definiran z velikostjo ene dvojne besede (2 bajta) in inicializiran na 0.
Opomba:Ta program za tiskanje rezultatov uporablja operacijski sistem DOS, zato bo deloval samo v okolju DOS ali emulatorju, ki podpira DOS.