Я начал использовать ADD A, r набор кодов операций на моем ядре Z80. У меня была небольшая путаница в отношении флагов переноса и переполнения, которые, как мне кажется, я прибил, но я хотел сообщить об этом сообществу, чтобы проверить, что я прав.
В принципе, из того, что я вижу, ALU в Z80 не заботится о подписанных/неподписанных операциях, он просто добавляет биты. Это означает, что если два 8-битных значения добавляются вместе и вызывают 9-битное значение в результате их добавления, флаг переноса будет установлен. Это включает в себя добавление двух отрицательных двух номеров дополнений, например -20 (11101100) и -40 (11011000), так как результат равен -60 (11000100), результат на самом деле является 9-битным значением 1 1100 0100. Это, безусловно, означает если добавить два отрицательных значения двух дополнений, флаг переноса всегда будет установлен, даже если нет условия переполнения - я прав?
Во-вторых, я решил, что для обнаружения переполнения в этой инструкции я бы установил XOR бит 7 обоих операндов, и если результат был 10000000, то, безусловно, нет переполнения - если результатом этого является 00000000, тогда может быть переполнение, так как знаки одинаковы, и поэтому я должен иметь XOR бит 7 результата сложения с битом 7 любого операнда, и если результатом этого является 10000000, произойдет переполнение, и я установил переполнение P/V флаг. Я тоже здесь?
Извините за такой запутанный вопрос, я уверен, что я прав, но мне нужно знать, прежде чем я продолжу бесчисленные инструкции, основанные на этой логике. Большое спасибо.