Работаю над эмулятором gameboy. Одна из операций ЦП, которую мне нужно реализовать, - это добавление байта n
к указателю стека sp
(код операции E8
). Флаг переноса должен быть установлен, если есть перенос из бита 7. Я рассмотрел две реализации этой операции, и обе они следуют одному и тому же логу обнаружения переноса c. Код для этого примерно следующий:
int result = (sp + n) & 0xFFFF
boolean carry = ((sp ^ n ^ result) & 0x100) != 0
Я проработал этот logi c с несколькими примерами, и он действительно работает, но я просто не понимаю как оно работает. Я понимаю, как работает xor
, но что за лог c здесь стоит его приложение? Спасибо.