Как я могу извлечь старшие 32 бита и нижние 32 бита 64-битного целого числа в сборке? - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу разделить верхнюю и нижнюю половину 64-битного целого числа и поместить их в два регистра.

1 Ответ

2 голосов
/ 15 февраля 2020

Ваш вопрос действительно неясен. Вы должны хотя бы указать, используете ли вы x86 или x64, и находится ли источник в регистре или в памяти.

Из переменной в памяти

        ; .u64 --> EDI:ESI
.u64    DQ      0x0123456789ABCDEF
        MOV     ESI, [.u64]
        MOV     EDI, [.u64 + 4]

x64, из регистра

        ; RBX --> EDI:ESI
        MOV     ESI, EBX
        MOV     RDI, RBX
        SHR     RDI, 32

x86, из пары регистров

        ; 64-bit numbers are stored in register pairs, usually EDX:EAX
        ; EDX:EAX --> EDI:ESI
        MOV     EDI, EDX
        MOV     ESI, EAX
...