Interact with local variables in asm block

confuzzled con at fuzzled.com
Fri Jul 4 16:46:44 UTC 2025


On 7/5/25 1:06 AM, confuzzled wrote:
> ulong rdtsc() {
>      ulong result;
>      uint* res = cast(uint*) &result;
>      asm {
>          rdtsc;  // Puts result in edx:eax
> 
>          // Cast our ulong's address to a 32-bit integer pointer
>          // and move the register values into the correct memory locations.
>          mov EAX, res[0]; // Low 32 bits
>          mov EDX, res[1]; // High 32 bits
>      }
>      return result;
> }

Got it:

ulong rdtsc() {
     ulong result;
     asm {
         rdtsc;  // Puts result in edx:eax
         mov [result], EAX; // Low 32 bits
         mov [result + 4], EDX; // High 32 bits
     }
     return result;
}

Thanks.


More information about the Digitalmars-d-learn mailing list