Her er en trin-for-trin guide til, hvordan man skriver et program på assemblersprog for at tælle antallet af vokaler i en streng:
1. Konfigurer datasegmentet :
- Erklær strengen som en række tegn.
- Definer en hukommelsesplacering for at gemme antallet af vokaler.
2. Konfigurer kodesegmentet :
- Start med programmets indgangspunkt, normalt mærket "hoved" eller "start".
3. Initialiser vokaltællingen :
- Indstil vokalantallet til nul til at begynde med.
4. Loop gennem strengen :
- Brug en loop til at iterere over hvert tegn i strengen.
5. Søg efter vokaler :
- Inde i løkken skal du bruge betingede udsagn til at kontrollere, om det aktuelle tegn er en vokal.
- Almindelige vokaler i det engelske alfabet er 'A', 'E', 'I', 'O' og 'U', og deres ækvivalenter med små bogstaver.
6. Forøg vokaltallet :
- Hvis det aktuelle tegn er en vokal, øges vokalantallet.
7. Afslut løkken :
- Fortsæt løkken, indtil enden af strengen er nået.
8. Vis vokaltællingen :
- Brug systemopkald eller biblioteksfunktioner til at vise vokalantallet på konsollen.
9. Afslut programmet :
- Brug et systemkald til at afslutte programmet.
Her er et eksempel på, hvordan monteringskoden kan se ud:
``` samling
.data
str:.asciiz "Hej verden!"
vokalantal:.int 0
.tekst
.global main
hoved:
xor ebx, ebx; Initialiser vokaltal til 0
mov edi, str; String pointer
mov al, [edi]; Få første karakter
sløjfe:
cmp al, '$'; Slut på streng?
je display; Ja, hop for at vise vokalantal
cmp al, 'A'; Tjek om det nuværende tegn er 'A'
je stigning; Ja, hop til stigende vokalantal
cmp al, 'E'; Tjek om det nuværende tegn er 'E'
je stigning
cmp al, 'jeg'; Tjek om det nuværende tegn er 'jeg'
je stigning
cmp al, 'O'; Tjek om det nuværende tegn er 'O'
je stigning
cmp al, 'U'; Tjek om det nuværende tegn er 'U'
je stigning
cmp al, 'a'; Tjek om det nuværende tegn er 'a'
je stigning
cmp al, 'e'; Tjek om det nuværende tegn er 'e'
je stigning
cmp al, 'i'; Tjek om det nuværende tegn er 'i'
je stigning
cmp al, 'o'; Tjek om det nuværende tegn er 'o'
je stigning
cmp al, 'u'; Tjek om det nuværende tegn er 'u'
je stigning
stigning:
inc ebx; Forøg vokalantal
inc edi; Flyt til næste tegn
jmp loop; Hop til loop igen
vise:
mov eax, 4; Systemkald til at skrive
mov ebx, 1; Filbeskrivelse (stdout)
mov ecx, str; Besked at skrive
mov edx, 13; Meddelelseslængde + nylinjetegn
syscall; Foretag systemopkald
mov eax, 1; Systemkald for at afslutte
mov ebx, 0; Afslutningsstatus (succes)
syscall; Foretag systemopkald
```
Denne kode forudsætter et Linux-miljø og bruger System V kaldekonventioner. Den initialiserer vokalantallet til nul, itererer over strengen, tjekker hvert tegn for vokaler og øger tallet tilsvarende. Til sidst viser den vokalantallet og afslutter programmet med succes.