Hello beautiful ASM people. :eusa_dance:
Today I downloaded the MASM32 package for win10, the old one is missed with old disk
and not anymore functioning probably.
The installation process was ok, the help file WIN32.HLP put online for MASM Editor.
So let's start with the first episode of the ASM FUN SAGA.
As I mentioned elsewhere, I want to find a fast way to:
1) convert 1 million strings into INTEGER numbers
2) compare the first one of them with the following until I find a gap of 10 units or more (bigger number)
or less (smaller number).
3) display the number of occurrences of the bigger, and smaller numbers found, so that when one is found
the process restart from that point forward in the list (an array probably).
Let's start with the first part "Conversion of 1 million strings into INTEGER numbers.
Any suggestion is welcome
:thumbsup:
What format are the string in ?
Quote from: frktons on November 08, 2021, 11:10:02 PMI want to find a fast way to:
1) convert 1 million strings into INTEGER numbers
2) compare the first one of them with the following until I find a gap of 10 units or more (bigger number)
or less (smaller number).
Roughly half a second for a Million numbers, with a non-specialised algo. What do you mean with "fast", and why does it have to be fast?
Quote from: hutch-- on November 09, 2021, 12:05:26 AM
What format are the string in ?
Hi Steve,
just four ASCII bytes: "1234" to convert into an integer.
Quote from: jj2007 on November 09, 2021, 01:21:18 AM
Quote from: frktons on November 08, 2021, 11:10:02 PMI want to find a fast way to:
1) convert 1 million strings into INTEGER numbers
2) compare the first one of them with the following until I find a gap of 10 units or more (bigger number)
or less (smaller number).
Roughly half a second for a Million numbers, with a non-specialised algo. What do you mean with "fast", and why does it have to be fast?
Hi JJ.
I have to perform the comparison many times, even if the conversion could be done just once
and store the INTEGER numbers into an array.
Thanks guys. always kind and helpful.
In pseudocode it could be expressed like:
START TIME
DO UNITIL 1M times
number = convert(string)
END DO
END TIME
PRINT "Time count is "; TIME_USED
deleted
Quote from: nidud on November 09, 2021, 04:35:38 AM
mov ecx,[rcx]
and ecx,not '0000'
movzx eax,cl
movzx edx,ch
imul eax,eax,1000
imul edx,edx,100
add eax,edx
shr ecx,16
movzx edx,cl
shr ecx,8
imul edx,edx,10
add eax,edx
add eax,ecx
Thanks my friend, I am going to study the code to understand what exactly you do
with this serie of multiplications and additions, shift right and moving around registers, I have some intuition though.
:-)
Hi Frank,
It sounds like you are doing some form of integer sort algorithm. 4 digits numbers in the range of 0000 to 9999 should in fact be very simple and really fast if you do it right. Something like a "letterbox" sort which is basically an array of 9999 members which you just write each number to its array index then scan from one end of the array to the other optionally dropping any blanks.
Hi Steve.
My goal is not to sort the array of strings, but to convert a fixed length string of 4 bytes
into an Integer (4 bytes as well).
I have about 8 millions strings of 4 bytes with values between "0000" to "9999" but the two extreme are not there.
I think storing the 8 millions strings into an array, convert them into 8 millions INTEGER of 4 bytes
is taking quite a while.
I am going to test it in PowerBasic, that I somehow remember how to code and find the needed info.
After I will do a loop in ASM 1 to 8 millions times and find a better solution in speed and, why not, elegance.
When finished I will post the results, and try to make it FUN and useful. Then the optimization will start.
:thumbsup: