Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .text
- .global useimmiten
- # RBP+8 paluuosoite (kutsussa laitettu)
- # RBP+0 edellisen kehyksen kanta (täytyy hoitaa täällä)
- # RBP-8 ensimmäinen parametri eli "FILE* fp", joka saadaan RDI:ssä
- # RBP-16 toinen parametri eli "int eofmarker", joka saadaan RSI:ssä
- # RBP-24 taulukko[255] merkin 255 esiintymismäärä lasketaan tähän
- # RBP-32 taulukko[254] merkin 254 esiintymismäärä lasketaan tähän
- # ...
- # RBP-2064 taulukko[0] (laskin kait oikein.. selviää debugatessa jos en)
- useimmiten:
- # Alkutoimet:
- pushq %rbp ;# Aiempi kanta pinon päälle
- movq %rsp, %rbp ;# Kiinnitetään uusi kanta
- subq $2064, %rsp ;# Varataan tarvittava tila
- movq %rdi, -8(%rbp) ;# Parametri talteen
- movq %rsi, -16(%rbp) ;# Parametri talteen
- # Aliohjelman varsinainen toiminnallisuus tulee tähän
- movq $0, %rax ;# käytetään vaikka RAXia indeksinä
- call nollaus
- movq $0, %rbx # Alustetaan muuttuja, joka kuvaa indeksiä, RBX, currentChar
- mov -8(%rbp), %rdi
- call fgetc # Linkkeri osaa laittaa osoitteeksi C:n fgetc():n alun.
- loom:
- cmpq %rax, -16(%rbp) # Testataan tuliko EOF vastaan
- je done # Hypätään jos tuli
- addq $1, -2064(%rbp,%rax,8) # array[currentChar]++;
- movq %rax, %rbx # currentChar = fgetc(input);
- movq -8(%rbp), %rdi
- call fgetc
- jmp loom
- done:
- # rax rdx rcx
- movq $0, %rax # Eniten esiintyvä luku, rax, highestCount
- movq $0, %rdx # Indeksi, jolla isoin luku, rdx, mostOccurringChar
- movq $0, %rcx # Seuraavan silmukan indeksimuuttuja, rcx
- loon: # Silmukassa selvitetään taulukon indeksi, jossa on isoin arvo
- cmpq $254, %rcx # Silmukan ehto, indeksi > 255
- jg dun # Silmukasta lennetään pihalle
- addq $1, %rcx # Silmukan indeksimuuttuja++
- cmpq -2064(%rbp,%rcx,8),%rax # array[i] > highestCount
- jg loon # Hypätään silmukan alkuun, koska nykyinen indeksi < suurin tähän mennessä nähty arvo
- # Tässä taulukon arvo indeksin kohdalla > suurin tähän mennessä nähty arvo
- movq -2064(%rbp,%rcx,8), %rax # highestCount = array[i]
- movq %rcx, %rdx # mostOccurringChar = i
- jmp loon
- dun:
- # Lopputoimet:
- movq %rdx, %rax # Paluuarvon asetus
- leaveq # Puretaan kehys
- ret
- # Nollataan taulukko
- nollaus:
- movq $0, -2064(%rbp,%rax,8) ;# nolla taulukkoon indeksin kohdalle
- addq $1, %rax ;# indeksi++
- cmpq $256, %rax ;# Onko indeksi...
- jl nollaus ;# ... pienempää (less) kuin 256? Ni uudestaan.
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement