View Single Post
  #1 (permalink)  
Old January 24th, 2007, 10:58 AM
Huskey Huskey is offline
Registered User
 
Join Date: Jan 2007
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Default inline assembly on VS2005 c++ PROBLEM

Hi!

I am just beginning my adventure with inline assembler and I encountered a problem. I tried to find some solution through google, but after a long time with no success I decided to write here. My problem is as follows: I am writing an application to blur images with box-blur; I have to load a bitmap and do some operation with it. I thought I would use SSE2 as it would speed-up my progam. I have two structs
__declspec(align(0x4)) struct ARGB{
//__m128 m;
char r;
char g;
char b;
char a;
};

__declspec(align(0x10)) struct pixel4{
//__m128;
ARGB p[4];
};
and I store the data in an array:
input = (pixel4*) _aligned_malloc(sizeof(pixel4)*length, 0x10);
Now I would like to load the first 128 bits ( in C++ input[0] ) into an xmm register:

MOV esi, input;
MOVAPS xmm0, XMMWORD PTR [esi];

but it won't work. I get an access violation error at line MOVAPS... .

I did watch the esi register in debug mode. Its value is 44 (0x0000002c)
and I get this error msg:

Unhandled exception at 0x0043deec in testBMP.exe: 0xC0000005: Access violation reading location 0xffffffff.

Shouldn't it be access violation at 0x0000002c ? (Maybe I'm wrong, but I'm no expert - just a beginner, so excuse me :) )

Another thing I noticed is that the esi register contains the value 0x0000002c which is NOT dividable by 16 :/ it's also weird to me, because I used _aligned_malloc with 0x10 (16) to allocate 'input'; so after
MOV esi, input
esi should store the address to input which should be divisible by 16 (should have a zero at the end of its address in hex) and it it not :(


I also tried the following code:

MOV esi, [input];
MOVAPS xmm0, XMMWORD PTR [esi]

and I tried MOVUPS the same way as well - it still wouldn't work.
What did compile was:
MOV esi, [input];
MOVAPS xmm0, esi;
but I don't think it gives the result I want to get...

If anyone could help I would be grateful!

Kind Regards,


Reply With Quote