Я работаю над личным проектом, чтобы улучшить свои знания о том, как работает процессор. Итак, я делаю эмулятор Intel 8080, который представляет собой 8-битный микропроцессор.
В реализации инструкции RRC, пример:
case 0x0f: {
uint8_t x = state->a;
state->a = ((x & 1) << 7) | (x >> 1);
state->cc.cy = (1 == (x&1));
}
Я не могу понять, как работает эта линия.
state->a = ((x & 1) << 7) | (x >> 1);
Я знаю, что он должен переместить все биты вправо на 1 позицию, но я не могу понять, как это сделать.
Я был бы признателен, если бы кто-нибудь мог предоставить мне пример того, что он на самом деле делает шаг за шагом.
state->a
— этоuint8_t
, который эмулирует регистр Intel 8080 с именем A.0x0f
— это шестнадцатеричное значение для RRC.Пример предоставлен на этой странице.
(x >> 1)
- двигаем все правильно.((x & 1) << 7)
перемещение самого правого бита в крайнее левое положение. циклический сдвиг вправо на 8 бит. - person Eugene Sh.   schedule 27.09.2017x >> 1
сдвигает (беззнаковую) величину вx
на один бит вправо, оставляя ноль в старшем бите.(x & 1) << 7)
перемещает младший значащий бит в самый старший (оставляя нули в младших значащих битах). Комбинация|
этих двух показателей достигла RRC. - person Jonathan Leffler   schedule 27.09.2017(x & 1) << 7)
. Если вы хотите, вы можете дать правильный ответ, чтобы я мог проголосовать за него. - person criw   schedule 27.09.2017