Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
`` `Zostava
sekcia .data
Fib_msg db "Fibonacci čísla:", 0
NEWLINE DB 0XA, 0; znak novej línie
sekcia .BSS
FIB_Squence Resd 10; Rezervný priestor pre 10 fibonacci čísel
sekcia .text
globálny _start
_start:
; Inicializujte prvé dve fibonacci čísla
MOV DWORD [FIB_Squence], 0
MOV DWORD [FIB_Squence + 4], 1
; Vypočítajte zostávajúce čísla fibonacci
MOV ECX, 8; Slučka (už máme prvé dve)
Mov Esi, 8; Ukazovateľ na ďalšie číslo fibonacci na výpočet
loop_start:
MOV EAX, [FIB_SESSECENCE + ESI - 8]; Získajte predchádzajúce číslo
Pridať EAX, [FIB_Squence + ESI - 4]; Pridajte číslo pred tým
MOV [FIB_Squence + ESI], EAX; Uložiť výsledok
Pridať ESI, 4; Prejdite na miesto nasledujúceho čísla Fibonacci
slučka loop_start
; Vytlačte sekvenciu fibonacci
Mov Eax, 1; sys_write
MOV EDI, 1; sýti
Mov rsi, fib_msg
MOV RDX, 18
syscall
MOV ECX, 10; Pult slučky na tlač
Mov Esi, fib_ sequence
print_loop:
Mov Eax, 1; sys_write
MOV EDI, 1; sýti
MOV RDX, 11; Maximálne číslice pre 32-bitové číslo + priestor + null
Mov rdi, 1; sýti
; Konvertovať číslo na reťazec (jednoduchý prístup, žiadne spracovanie chýb pre veľmi veľké čísla)
Mov Ebx, 10
MOV EDI, vyrovnávacia pamäť; Na uloženie reťazca použite vyrovnávaciu pamäť
MOV R8D, 0; Inicializujte index reťazca
convert_loop:
XOR EDX, EDX
Div Ebx; Rozdeľte 10
Pridať edx, '0'; Konvertovať zvyšok na ASCII
december R8D; Index
MOV [EDI+R8D*1], DL
CMP EAX, 0
jne convert_loop
; Pred tlačkou obráťte reťazec
MOV R9D, R8D
MOV RCX, 0
reverzná_lór:
Mov Al, [EDI + RCX]
MOV BL, [EDI + R9D]
MOV [EDI + RCX], BL
MOV [EDI + R9D], AL
Inc RCX
december R9D
CMP RCX, R9D
jl reverzný_lór
Mov RSI, vyrovnávacia pamäť
syscall
Pridať ESI, 4; Prejdite na ďalšie číslo fibonacci
Mov Eax, 1
Mov Edi, 1
MOV RSI, NEWLINE
Mov rdx, 1
syscall
slučka
; Opustiť program
Mov Eax, 60; sys_exit
XOR EDI, EDI; výstupný kód 0
syscall
sekcia .data
Časy vyrovnávacej pamäte 11 dB 0; Vyrovnávacia pamäť pre konverziu reťazca
`` `
Zostaviť a spustiť tento kód:
1. uložiť: Uložte kód ako súbor `.asm` (napr.` Fibonacci.asm`).
2. Zostavte: Na zostavenie použite NASM:`NASM -f elf64 fibonacci.asm`
3. odkaz: Prepojenie súboru objektu:`ld -o fibonacci fibonacci.o`
4. Run: Vykonajte program:`./Fibonacci`
Táto vylepšená verzia obsahuje:
* Clear Commens: Vysvetlenie každého kroku.
* konverzia reťazca: Základný algoritmus na konverziu čísel fibonacci na reťazce na tlač. (Poznámka:Táto konverzia reťazca je jednoduchá a nevyrieši veľmi veľké počty robustne. Pre výrobný kód by bol potrebný sofistikovanejší prístup.)
* refal: Číslo sa prevedie na reťazec v opačnom poradí a potom sa pred tlakom obráti.
* Newlines: Pridáva nové línie medzi číslami pre lepšiu čitateľnosť.
* manipulácia s chybou (chýbajú): Kód pripravený na výrobu by musel skontrolovať potenciálne chyby (napríklad preteky vyrovnávacej pamäte).
Pamätajte, že programovanie montáže je veľmi nízke a špecifické pre architektúru. Tento príklad je prispôsobený X86-64 a Linux. Pre iné systémy by boli potrebné úpravy. Jazyky na vyššej úrovni sú vo všeobecnosti uprednostňované pre väčšinu programovacích úloh z dôvodu ich zvýšenej čitateľnosti, prenosnosti a produktivity vývojárov.