Assembly nyelvű program egy adott szám faktoriálisához?
```
BITS 16
; Határozza meg az adatszegmenst
ADATSZEGMENT
szám:DW ?; Az a szám, amelyhez a faktoriálist kell keresni
; Határozza meg a kódrészletet
KÓDSZEGMENT
indul:
mov ax, ADATOK; Töltse be a DS regisztert az adatszegmens címével
mov dx, num; Töltse be a számot a DX-be
cmp dx, 0; Ellenőrizze, hogy a szám 0-e
je nulla; Ha igen, ugorjon a „nulla” címkére
mov cx, 1; Inicializálja a faktoriálist (CX) 1-re
; Indítsa el a faktoriális számítási ciklust
hurok:
imul cx; Szorozzuk meg a CX-et az aktuális számmal DX-ben
inc dx; Növelje az aktuális számot
cmp dx, szám; Hasonlítsa össze a DX-et az eredeti számmal
jb hurok; Ha a DX kisebb, mint a szám, ugorjon vissza a hurokhoz
; A faktoriális megjelenítése
nulla:
mov ah, 4Ch; AH =4Ch a DOS "Print string" megszakításhoz
lea dx, str_result; Töltse be az "eredmény" karakterlánc címét a DX-be
int 21h; Hívja a 21h DOS megszakítást a karakterlánc megjelenítéséhez
ret; Térjen vissza az operációs rendszerhez
; Határozza meg az "eredmény" karakterláncot
str_result:DB "A faktoriális:$"
; A program vége
VÉGE kezdés
; Határozza meg a verem szegmenst
FOGALOM SZEGMENT
; Határozza meg a verem adatait
DW 0
FOGALOM VÉGE
```
A program magyarázata:
1. Adatszegmens:
- A "szám:" egy "szám" nevű szóváltozót (16 bites) határoz meg az adatszegmensben. Ez a változó tárolja azt a számot, amelyhez a faktoriálist meg akarjuk találni.
2. Kódszegmens:
- `start:` a program belépési pontja.
3. Inicializálás:
- `mov ax, DATA`:Az adatszegmens címét betölti az AX regiszterbe.
- `mov dx, num`:A `num` értékét betölti a DX regiszterbe.
4. Ellenőrizze a nullát:
- `cmp dx, 0`:Összehasonlítja a DX értéket 0-val.
- "je zero":Ha a DX egyenlő 0-val, ugorjon a "nulla" címkére.
5. Faktoriális számítási hurok:
- "hurok":
- `imul cx`:A CX-ben lévő aktuális értéket megszorozza a DX-ben lévő aktuális számmal.
- `inc dx`:Növeli az értéket DX-ben.
- `cmp dx, num`:Összehasonlítja a DX-et az eredeti számmal.
- "jb loop":Ha a DX kisebb, mint a szám, akkor a számítás folytatásához visszaugrik a "loop" címkére.
6. Jelenítse meg a faktorállapot:
- "nulla:" (címke)
- `mov ah, 4Ch`:Az AH-t 4Ch-ra állítja, ami a DOS megszakítása egy karakterlánc nyomtatásához.
- `lea dx, str_result`:Betölti az "eredmény" karakterlánc címét a DX-be.
- `int 21h`:Meghívja a 21h DOS megszakítást a karakterlánc megjelenítéséhez.
7. Visszaküldés:
- `ret`:Visszatér az operációs rendszerhez.
8. Verem szegmens:
- A veremszegmens egy duplaszó (2 bájt) mérettel van meghatározva, és 0-ra inicializálva.
Megjegyzés:Ez a program a DOS operációs rendszert használja az eredmény kinyomtatására, így csak DOS környezetben vagy DOS-t támogató emulátorban működik.