Welkom op de Nederland Computer Kennisnetwerk!  
 
Zoeken computer kennis
Home Hardware Netwerken Programmering Software Computerstoring Besturingssysteem
Computer Kennis >> Programmering >> Computer Programming Languages >> Content
Een assemblagetaalprogramma schrijven om Fibonacci -serie te vinden?
De specifieke assemblagetaal hangt sterk af van de doelarchitectuur (bijv. X86, arm, MIPS). Ik zal een voorbeeld geven met behulp van X86-64-assemblage (met behulp van de NASM-assembler) voor Linux. Dit programma berekent en drukt de eerste 10 Fibonacci -nummers af.

`` `Assemblage

Sectie .DATA

fib_msg db "fibonacci cijfers:", 0

Newline DB 0xa, 0; Nieuwlijn karakter

Sectie .bs

fib_sequence Resd 10; Reserve ruimte voor 10 Fibonacci -nummers

sectie .text

globale _start

_begin:

; Initialiseer de eerste twee Fibonacci -nummers

mov dword [fib_sequence], 0

mov dword [fib_sequence + 4], 1

; Bereken de resterende Fibonacci -getallen

Mov Ecx, 8; Loop -teller (we hebben al de eerste twee)

Mov ESI, 8; Aanwijzer naar het volgende Fibonacci -nummer om te berekenen

loop_start:

MOV EAX, [FIB_SEVENCE + ESI - 8]; Ontvang het vorige nummer

EAX toevoegen, [fib_sequence + esi - 4]; Voeg daarvoor het nummer toe

MOV [fib_sequence + esi], eax; Bewaar het resultaat

ESI toevoegen, 4; Ga naar de locatie van het volgende Fibonacci -nummer

loop loop_start

; Druk de Fibonacci -reeks af

mov eax, 1; sys_write

Mov EDI, 1; stdout

mov rsi, fib_msg

mov rdx, 18

syscall

MOV ECX, 10; Loop teller voor afdrukken

mov esi, fib_sequence

print_loop:

mov eax, 1; sys_write

Mov EDI, 1; stdout

mov rdx, 11; Max-cijfers voor een 32-bits nummer + Space + Null

mov rdi, 1; stdout

; Converteer het nummer naar een tekenreeks (eenvoudige aanpak, geen foutafhandeling voor zeer grote getallen)

mov ebx, 10

Mov EDI, buffer; Gebruik een buffer om de string op te slaan

MOV R8D, 0; Initialiseer de index van de string

Convert_Loop:

XOR EDX, EDX

div ebx; Divide door 10

EDX toevoegen, '0'; Converteer de rest naar ascii

Dec r8d; Verplaats index

mov [edi+r8d*1], dl

CMP EAX, 0

JNE Convert_Loop

; Keer de tekenreeks om voor het afdrukken

mov r9d, r8d

mov rcx, 0

reverse_loop:

Mov al, [EDI + RCX]

Mov BL, [EDI + R9D]

mov [edi + rcx], bl

mov [edi + r9d], al

Inc RCX

december r9d

CMP RCX, R9D

JL Reverse_Loop

mov rsi, buffer

syscall

ESI toevoegen, 4; Ga naar het volgende Fibonacci -nummer

MOV EAX, 1

Mov EDI, 1

mov rsi, newline

mov rdx, 1

syscall

Loop print_loop

; Verlaat het programma

MOV EAX, 60; sys_exit

XOR EDI, EDI; Exit Code 0

syscall

Sectie .DATA

Buffer maal 11 dB 0; Buffer voor stringconversie

`` `

om deze code samen te stellen en uit te voeren:

1. Opslaan: Sla de code op als een `.asm' -bestand (bijv.` Fibonacci.asm`).

2. Monteren: Gebruik NASM om het te assembleren:`nasm -f elf64 fibonacci.asm`

3. link: Link het objectbestand aan:`ld -o fibonacci fibonacci.o`

4. Ren: Voer het programma uit:`./Fibonacci`

Deze verbeterde versie omvat:

* duidelijkere opmerkingen: Elke stap uitleggen.

* Stringconversie: Een basisalgoritme om de Fibonacci -nummers te converteren naar afdrukbare snaren. (OPMERKING:deze stringconversie is eenvoudig en verwerkt niet robuust van zeer grote getallen. Voor productiecode zou een meer geavanceerde aanpak nodig zijn.)

* Stringomkering: Het nummer wordt in omgekeerde volgorde naar een tekenreeks omgezet en vervolgens teruggedraaid voordat het wordt afgedrukt.

* NEWLINES: Voegt nieuwe lijnen toe tussen cijfers voor betere leesbaarheid.

* Foutafhandeling (ontbreekt): Productie-ready code zou moeten controleren op potentiële fouten (zoals bufferoverloop).

Vergeet niet dat assemblageprogrammering zeer laag en architectuurspecifiek is. Dit voorbeeld is afgestemd op X86-64 en Linux. Aanpassingen zouden nodig zijn voor andere systemen. Talen op een hoger niveau hebben over het algemeen de voorkeur voor de meeste programmeertaken vanwege hun verhoogde leesbaarheid, draagbaarheid en productiviteit van ontwikkelaars.

Previous: Next:
  Computer Programming Languages
·Hoe maak je een Joomla Templat…
·Hoe je tekst te verwijderen ui…
·Wat betekent Debugging Mean op…
·Het maken van een stroomdiagra…
·Hoe te setString gebruiken voo…
·Wat zijn de nadelen van een Qu…
·Hoe te voegen een afbeelding i…
·Hoe te coderen Black & White i…
·Hoe te Innovative Digital Inte…
  Related Articles
Welke rol speelt een tolk bij het progra…
Wat is de tijdscomplexiteit van een if-i…
Wat is het doel en de functionaliteit va…
Wat is de contextvrije grammatica voor t…
Waar wordt assemblage voor gebruikt in d…
Waar wordt assembleertaal voor gebruikt …
Wat is assembleertaal en hoe wordt het g…
Wat is assemblagecode en hoe wordt deze …
Wat is een voorbeeld van onbeslisbare ta…
  Programmering Articles
·Hoe je Object Property Namen in een arra…
·Welke Aziatische taal past het beste bij…
·Hoe maak je een HashTable gebruiken in e…
·Visual Basic Planning Process 
·Hoe te Lines in Netbeans Wikkel 
·Leg het voordeel van bidirectionele impl…
·Hoe maak je dubbele aanhalingstekens ver…
·Wat kunt u doen met computerprogrammerin…
·Hoe te gebruiken PHP om een Excel-bestan…
Copyright © Computer Kennis https://www.nldit.com