писал прогу, компилирую тасмом, но смотрю что-то не так работает. в турбо дебаггере потрассировал и оказалось что ROL работает точно также, как и SHL. прога использует 16-разрядные регистры, для дос, инструкции 8086 проца. ROL должен старший бит выдвигать, записывать его в флаг переноса и на место младшего бита, так ведь? а у меня почему-то просто выдвигается, и получается, что происходит умножение на 2. почему такое происходит? и есть ли какие-нибудь другие команды для выделения отдельных битов? помогите плиз, очень срочно, курсовик завтра надо сдавать а работает не правильно
Ну вот я очень сомневаюсь, что "современные процессоры" работают кривее современных программ. Потрассируй не в 16ти битном турбо дебаггере для доса. rcr,rcl,and,or,xor,shld,shrd.
Возможно, дело в этом: Воспользуйся альтернативой: ROL(reg,val) = (reg << val) | (reg >> (regsize-val)) ROR(reg,val) = (reg >> val) | (reg << (regsize-val))
IceStudent Это ж только на скорость влияет, т.к. либо вращать 1 раз либо 17 для 16 /или 33 для 32х/ битного регистра - результат один будет.
yudinetz А может из-за того что роловская остаточная часть тебе не видима! Ведь в досе ты же не все 32 бита или 64 бита регистра видишь, а только 16. Хотя смотря какаой дебагер или ты чтото не то делаешь
Аффтар ты куда делся? Или это шутка такая неудачная? :/ Показывай кусок кода и пиши что у тебя за процессор - только что проверил, всё работает как и должно.
Во! Нужно обменять младшее и старшее слово в регистре, на ум пришло только rol eax,16 А специальной командочки для этого нет?
Ykidia Угу.. Компилятор от 8й студии, кстати, распознаёт x = x << 16 | x >> 16 как ror x, 16, а вот от 7.1 не хотит - ему по душе shr/shl/or.