2015-02-05 3 views
-1

Я пытаюсь выполнить арифметический сдвиг прямо в Delphi. Я не могу заставить его работать, но он продолжает давать неправильные ответы.Арифметический сдвиг вправо, а не логический сдвиг вправо

Это мой код;

lValue := offset; 
    asm 
    mov cl,32 
    sar lValue,cl 
    end; 
    hgh := lValue and $FFFFFFFF; 

offset Когда установлен в 1024 и сдвиг вправо устанавливается в 32, hgh должна равняться 0. В моем коде hgh = 1024.

+3

Если я правильно помню, инструкция поддерживает только изменения до 31 (значение 5-битного смещения). –

+0

@ 500-InternalServerError - как бы я мог сделать больше? –

+0

@ Замечание 500-InternalServerError абсолютно верно: «... все другие процессоры IA-32 (начиная с процессора Intel 286) маскируют счетчик сдвига до 5 бит, в результате чего максимальный счет 31." Нет ничего плохого в смешивании Pascal и BASM, но вы должны быть очень осторожны с ассемблером (как обычно). –

ответ

0

Вы должны условно сместится на 31 бита для чисел, больших или равных 32

Смежные вопросы