DanRollins
asked on
300pt 80x86 ASM question
Actually, more of a challenge.
https://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=assembly&qid=20272901
Write it in C/C++ and I'll compile with full optimization and test your code against my soon-to-be-posted ASM solution. Whiner Take All!
-- Dan
https://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=assembly&qid=20272901
Write it in C/C++ and I'll compile with full optimization and test your code against my soon-to-be-posted ASM solution. Whiner Take All!
-- Dan
Here is the best I can do in short order!
#include<memory> //lazy me!
#include<cstdlib> //rand()
#include<ctime>
using namespace std;
double jtimer;
inline void start_time()
{
jtimer = (double)(clock());
}
inline void elapsed_time(char *ch)
{
jtimer = clock() - jtimer;
jtimer = jtimer/CLOCKS_PER_SEC;
printf("%s time %f seconds\n",ch, jtimer);
}
static unsigned char ascii[255]; //map '.' into the required ascii fields
static unsigned char *data;
//the data. you did not say well written, you said fast!
inline void f()
{
printf("%x %x %x %x %x %x %x %x-%x %x %x %x %x %x %x %x",
data[0],data[1],data[2],da ta[3],data [4],data[5 ],data[6],
data[7],data[8],data[9],da ta[10],dat a[11],data [12],data[ 13],
data[14],data[15]);
printf(" %c%c%c%c%c%c%c%c%c%c%c%c%c %c%c%c\n",
ascii[data[0]],
ascii[data[1]],
ascii[data[2]],
ascii[data[3]],
ascii[data[4]],
ascii[data[5]],
ascii[data[6]],
ascii[data[7]],
ascii[data[8]],
ascii[data[9]],
ascii[data[10]],
ascii[data[11]],
ascii[data[12]],
ascii[data[13]],
ascii[data[14]],
ascii[data[15]]);
}
int d[4];
int main()
{
memset(ascii,'.',255);
short i;
for(i = 32; i < 128; i++)
ascii[i] = i;
data = (unsigned char *)d;
i = 1;
start_time();
while(i++)
{
d[0] = rand();
d[1] = rand();
d[2] = rand();
d[3] = rand();
f();
}
elapsed_time("");
/*
I ran re-directed to a file
b > a.txt
the result was less than
0.98 seconds for 65535 of them
on a 1000 mhz AMD processor, win 2k.
all optimizations tweaked for this app
including:
no c++ exceptions
intel 386 exe format for speed
inline expansion
no debug stuff
maximize speed chosen
this can be faster still but for
30 min is all I can afford for today.
*/
return(3);
}
#include<memory> //lazy me!
#include<cstdlib> //rand()
#include<ctime>
using namespace std;
double jtimer;
inline void start_time()
{
jtimer = (double)(clock());
}
inline void elapsed_time(char *ch)
{
jtimer = clock() - jtimer;
jtimer = jtimer/CLOCKS_PER_SEC;
printf("%s time %f seconds\n",ch, jtimer);
}
static unsigned char ascii[255]; //map '.' into the required ascii fields
static unsigned char *data;
//the data. you did not say well written, you said fast!
inline void f()
{
printf("%x %x %x %x %x %x %x %x-%x %x %x %x %x %x %x %x",
data[0],data[1],data[2],da
data[7],data[8],data[9],da
data[14],data[15]);
printf(" %c%c%c%c%c%c%c%c%c%c%c%c%c
ascii[data[0]],
ascii[data[1]],
ascii[data[2]],
ascii[data[3]],
ascii[data[4]],
ascii[data[5]],
ascii[data[6]],
ascii[data[7]],
ascii[data[8]],
ascii[data[9]],
ascii[data[10]],
ascii[data[11]],
ascii[data[12]],
ascii[data[13]],
ascii[data[14]],
ascii[data[15]]);
}
int d[4];
int main()
{
memset(ascii,'.',255);
short i;
for(i = 32; i < 128; i++)
ascii[i] = i;
data = (unsigned char *)d;
i = 1;
start_time();
while(i++)
{
d[0] = rand();
d[1] = rand();
d[2] = rand();
d[3] = rand();
f();
}
elapsed_time("");
/*
I ran re-directed to a file
b > a.txt
the result was less than
0.98 seconds for 65535 of them
on a 1000 mhz AMD processor, win 2k.
all optimizations tweaked for this app
including:
no c++ exceptions
intel 386 exe format for speed
inline expansion
no debug stuff
maximize speed chosen
this can be faster still but for
30 min is all I can afford for today.
*/
return(3);
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
hi jonnin!
Thanks for your submission. I posted the core of it into the ASM question and will post the timimg results tomorrow. Check it out, and please post in that thread rather than this one. Thanks!
-- Dan
Thanks for your submission. I posted the core of it into the ASM question and will post the timimg results tomorrow. Check it out, and please post in that thread rather than this one. Thanks!
-- Dan
ASKER
Hi Pavlik,
I posted your code and timing of it on the other thread. You are looking good.
https://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=assembly&qid=20272901
You may want to go there and subscribe to that Q so you can get a notif of the final outcome.
-- Dan
I posted your code and timing of it on the other thread. You are looking good.
https://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=assembly&qid=20272901
You may want to go there and subscribe to that Q so you can get a notif of the final outcome.
-- Dan
ASKER
The original Assembly TA thread has been continued here:
http:Q.20280946.html
and then here:
http:Q.20283475.html
Join in the discussion, we are having fun!
-- Dan
http:Q.20280946.html
and then here:
http:Q.20283475.html
Join in the discussion, we are having fun!
-- Dan
ASKER
Hi Pavlik,
I added 100 points to this Q. Pleaase accept them with my complements for your excellent C++ code. Yours beet everyone until we started messing around with MMX operations.
You might want to check in on the thread. 'able' built a version with a 143MB lookup table. It's all too, too, tooo... well what the heck.
-- Dan
I added 100 points to this Q. Pleaase accept them with my complements for your excellent C++ code. Yours beet everyone until we started messing around with MMX operations.
You might want to check in on the thread. 'able' built a version with a 143MB lookup table. It's all too, too, tooo... well what the heck.
-- Dan
I'll give it a spin, but I know the result already...