Assembly till C. Alternativt min förklaring till C.

Permalänk

Assembly till C. Alternativt min förklaring till C.

Följande kod. Jag vet vad den gör men jag vet inte hur jag ska skriva det i C(++)

I C ska typen vara unsigned __int64
x86 assembly

MOV EAX, DWORD PTR [ESI] MOV ECX, DWORD PTR [ESI+4H] SHLD ECX, EAX, 4H SHL EAX, 4H MOV DWORD PTR [ESI], EAX MOV DWORD PTR [ESI+4H], ECX

Förklaring:

HEX: 0C 0B 00 00 Sen efter den koden har körts så: HEX: C0 B0 00 00 Sen efter den koden har körts igen så: HEX: 00 0C 0B 00 Sen efter den koden har körts igen så: HEX: 00 C0 B0 00 Sen efter den koden har körts igen så: HEX: 00 00 0C 0B

osv...

Permalänk

Är det operatorn för väster/höger - shift du är ute efter? I så fall är det << eller >>

var = var << 4;

Permalänk

Jo, det var ju det jag trodde blev dock fel. Men jag hittade felet det var ett annat fel.

Permalänk
Glömsk

Jag anta ratt det är SHLD du har problem med. Du kan skriva

SHLD ECX, EAX, 4H

som

ecx = (ecx << 4) | (eax >> (sizeof(eax)*8 - 4));

Egentligen borde du inte göra såheller, lika bra att förutsätta att ecx och eax alltid är 32 bit eftersom den första shiftningen blir tokig annars såvida du inte ochar ut de nedre 32 bitsen. Så kör på

ecx = (ecx << 4) | (eax >> 28);

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.