Решил написать криптовалку на пурике, столкнулся с неожиданными проблемами.
Нет команды верчения байтов в переменной, ладно, нашел в инете готовый пример Rola влево на асме:
Procedure Rol(num,count) ; rotate left
!MOV dword ECX,[p.v_count]
!ROL dword [p.v_num],cl
ProcedureReturn num
EndProcedure
Отлично работает, ладно.
Сдвиг влево и вправо есть, слава богу, НО! Влево работает зашибись а вправо фигня какая-то получается.
Пример - есть число типа лонг - D7 4C A7 A3, сдвигаю его право на пять бит. В баскоме все отлично, получается число 06 BA 65 3D, баском услужливо показывает это число в переменной во всех ракурсах - в десятичном - 112878909 и бинарном виде - все честно - сдвинуто на 5 бит.
Чертов PureBasic же упорно показывает результат сдвига того же числа на 5 как десятичное число X2 = -21338819, то есть FE BA 65 3D - после сдвига остаются еденицы а не ноли???
С горя я переделал вышеприведенную процедуру, на сдвиг вправо -
Procedure SAR(num,count) ; shift right
!MOV dword ECX,[p.v_count]
!SAR dword [p.v_num],cl
ProcedureReturn num
EndProcedure
Но и она, сука, возвращает -21338819 !!! Пипец. Жесть. В чем дело?
С горя загрузил виндовсседьмой калькулятор программиста, там есть подозрительные кнопки lsh и rsh но ОНИ НЕ РАБОТАЮТ! Блин, мегакорпорация, а описания кнопок во всем интернете нет, и в помощи, одни описание горячих клавиш, которое вообще мне не упирались в одно место.