asm woes...

Era Scarecrow via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri May 27 03:14:31 PDT 2016


On Friday, 27 May 2016 at 10:00:40 UTC, Era Scarecrow wrote:
> On Friday, 27 May 2016 at 09:51:56 UTC, rikki cattermole wrote:
>> struct Foo {
>>   int x;
>>
>>   void foobar() {
>>     asm {
>>       mov EAX, this;
>>       inc [EAX+Foo.x.offsetof];
>>     }
>>   }
>> }
>>
>> You have to reference the field via a register.
>
>  This is good progress. Using the assembler doesn't have many 
> documentation examples of how to do things

  Hmmm actually this is incorrect...

void main() {
   import std.stdio;

   Foo foo = Foo(-1);
   writeln(foo.x);
   foo.foobar;
   writeln(foo.x);
}

-1
-256

  It's assuming a byte obviously for the size. So this is the 
correct instruction:

   inc dword ptr [EAX+Foo.x.offsetof];

  However trying it with a long and a qword shows it reverts to a 
byte again, meaning 64 bit instructions are inaccessible.


More information about the Digitalmars-d-learn mailing list