> а то, как и что сдвигает циклически опкод ROL
Я думаю, что для подобных вещей такие форумы и существуют.
Если в регистре 0, значит
флаг переноса никогда не выставится,
потому что все биты нули.
Если не взаимосвязаны 2 команды - ASL и ROL.
Вот отсюда
http://www.romhacking.net/docs/%5B110%5D6502asm.htmописание:
+-+-+-+-+-+-+-+-+
C <- |7|6|5|4|3|2|1|0| <- C ROL
+-+-+-+-+-+-+-+-+
7 бит сдвигается во флаг переноса, а флаг переноса переходит в нулевой бит.
Получается, если
до операции флаг переноса был выставлен в 1,
то он перейдет в младший разряд, ВНЕ зависимости от того, что было в старшем?
А раньше там стоит команда сдвига влево на 2. Из мануала, команда ASL:
+-+-+-+-+-+-+-+-+
C <- |7|6|5|4|3|2|1|0| <- 0 ASL
+-+-+-+-+-+-+-+-+
также может воздействовать на флаг переноса.
Я извиняюсь за дотошность, но очень хочется понять, что же там происходит,
если в $0003 ВСЕГДА стоит 0 и меняется только содержимое регистра А.
Проверил. Если старший бит равен 1, то
после выполнения ASL - ROL он перейдет в ячейку памяти $0003.
Значит догадка подтвердилась. Зачем такое может потребоваться 4 раза?
Может для того, чтобы УМНОЖАТЬ числа, занимающие БОЛЬШЕ 1 байта?