Sorteringsalgoritme i VBA oversat fra assembler hjælp?
Sådan ser assembler koden ud.... Det er det jeg vil have oversat til VBAdata.
num[100] tal
num antal 0
num i 0
num J 0
num Min 0
num iMin 0
code.
//indlæsning af tabel.
int r1 10 //indlæser fra tastatur til r1(indlæser hvor mange tal vi vil indlæse)
store r1 antal //gemmer indholdet fra r1 i antal (tastatur inputtet)
loada r1 tal //henter det første tal i "tal"
sub r1 #1 r1 //trækker 1 til tals adresse som ligger i r1 og gemmer i r1
load r3 antal //henter indholdet af antal ind i r3
a. Peter:
sub r3 #1 r3 //trækker 1 fra r3 og gemmer i r3 (altså en fra antal)
add r1 #1 r1 //ligger en til tals adresse, hele foregår i r1
int r2 10 //indlæser et af de før bestemte antal tal fra tastaturet.
store r2 r1 //gemmer det indlæste tal på tals adresse i r1. Altså på variablen tals plads 1,2,3..
jmpnz r3 Peter //Programmet hopper forfra indtil det har talt ned til 0 i antal, altså når der ikke skal indlæses flere tal.
//sorter
1. store r0 i //gemmer r0 i, "i". Altså nulstiller i.
b. niels:
2a. load r3 i //henter i ind i r3
load r2 r3+tal // henter i+tal=T(i) ind i r2
store r2 Min //gemmer r2 i T(i) og dermed sætter T(i)=i
load r1 i // henter "i" ind i r1
2b. store r1 iMin //gemmer indholdet i r1(i) i iMin og dermed sætter i=iMin
add r1 #1 r1 //Ligger 1 til i
3. store r1 J //gemmer i+1 i J og dermed sætter i+1=J
c. thor:
4. load r1 J //henter indholdet af J ind i r1
load r2 r1+tal //henter J+tal=T(J) ind i r2
load r3 Min //henter indholdet af Min ind i r3
sub r3 r2 r1 //trækker r2 fra r3 (T(j)-Min) Og gemmer i r1
jmplt r1 franz // hopper til franz hvis r1 er mindre end 0
5a. store r2 Min // gemmer indholdet af r2(T(j))i Min T(j)=Min
5b. load r2 J // henter J ind i r2
store r2 iMin // gemmer r2(J) i iMin og dermed sætter J=iMin
d. franz:
6. load r2 J // henter J ind i r2
add r2 #1 r2 //Ligger 1 til J i r2
store r2 J //gemmer r2 i J. Altså har bare lagt 1 til J
7. load r3 antal // henter antal ind i r3
sub r2 r3 r1 // trækker r3 fra r2 altså antal fra J og gemmer i r1
jmplt r1 thor // hvis r1 er mindre end 0 hopper den til thor
8a. load r1 i // henter i ind i r1
load r2 r1+tal // henter r1(i)+tal=T(i) ind i r2.
load r3 iMin // Henter iMin ind i r3
store r2 r3+tal // gemmer r2 på lageradressen r3(iMin)+tal=T(iMin) og dermed sætter T(iMin)=T(i)
8b. load r1 Min //henter Min ind i r1
load r2 i // henter i ind i r2
store r1 r2+tal // gemmer r1(Min) på lageradressen r2(i)+tal=T(i) og dermed sætter T(i)=Min
9. add r2 #1 r2 // ligger 1 til i.
store r2 i // gemmer r2 i "i"
10. load r3 antal // henter antal ind i r3
load r2 i //henter i ind i r2
add r2 #1 r2
sub r2 r3 r1 // trækker r3(antal) fra r2(i) og gemmer i r1. Tester om i<N
jmplt r1 niels // hvis r1 er mindre end 0 hopper den til niels
//udskriv
loada r1 tal //henter adressen på det første tal i "tal" og gemmer i r1.
load r2 r1 //henter indholdet på adressen fra r1 ind i r2
int r2 11 // udskriver r2 til skærmen
load r3 antal //henter antal ind i r3
sub r3 #1 r3 //trækker 1 fra r3 og gemmer i r3(antal)
e. jaeger:
sub r3 #1 r3 //trækker en fra r3 og gemmer i r3(antal)
add r1 #1 r1 //ligger 1 til r1 og gemmer i r1(tal)
load r2 r1 //henter indholdet på adressen fra r1 ind i r2
int r2 11 //udskriver r2 til skærmen
jmpnz r3 jaeger //hopper til jaeger hvis r3 ikke er 0.
int r0 0 //afslutter maskinen fuldstændigt.
Dette er nogenlunde hvad jeg har i VBA, hvad skal jeg mere have og er der sågar nogen der kan løse denne opgave?
Option Compare Database
Option Explicit
Public Sub assembsort(ByRef data() As Long, ByVal venstre As Long, ByVal højre As Long)
Dim i, j As Long
Dim elem As Long
Dim min As Long
Dim iMin As Long
Dim tal(100) As Long
i = 0
Do
min = t(i)
iMin = i
j = i + 1
If t(j) < min Then
min = t(j)
iMin = j
End If
j = j + 1
End Sub
Kort sagt hjælp mig med en sorteringsalgoritme i VBA som skal ligne en sorteringsalgoritme fra assembler..
HVis der er nogen der mangler tabeller etc for at løse opgaven har jeg det i et .doc
