1
Я хочу, чтобы bsr работал на 64-битном номере. Тем не менее, нижеследующее работает только на младших 32 битах ввода:64-битный бит asm обрезает верхние 32 бита
function BSR64(const Val: Int64): Integer;
begin
asm
bsr eax, [Val]
...
Как это сделать?
Я компилирую в 64-разрядном режиме, используя Lazarus.
Это сработало, спасибо. Но тогда у меня есть недоразумение. Я думал, что результат написан в eax, поэтому eax будет от 0 до 63. – IamIC
Я не совсем уверен, что вы имеете в виду здесь. Результат записывается в 'eax', но' eax' - это только младшие 32 бита (бит от 0 до 31). Я не уверен, что ваш ассемблер будет делать в этом случае, так как 'val' выглядит как 64-битное значение, но я предполагаю, что он обрезает его, копируя только младшие 32 бита' [val] '. – Tim
Я имею в виду, результат bsr от 0 до 63 на 64-битном входе. Я думал, что «0» до «63» вводится в eax с помощью bsr op, а его диапазон всего 6 бит легко вписывается в eax. Поэтому я подумал, что «0» до «63» записывается в dest, а не в том, что dest должен соответствовать размеру источника. – IamIC