byte x = 0x0c;
byte y = 0x05;
System.out.println((x&0xf) + (y&0xf)); // if > 15 then af on
System.out.println((b&0xf) - (c&0xf));
System.out.println((int)(b&0xff) + (c&0xff)); // if > 255 then cf on
System.out.println(((int)(b&0xff) + (c&0xff)) & 0b10000000); // if 128 sign flag set
System.out.println((int)(b&0xff) - (c&0xff)); // if less than 0 then cf set
System.out.println(((int)(b&0xff) - (c&0xff)) & 0b10000000); //if 128 then sign flag set
Я строю симулятор 8085, и в соответствии с Арифметическими и Логическими инструкциями я пытался найти надежный способ проверки, когда устанавливать или снимать 5 флагов.
Из 5, флаг знака, флаг нуля и флаг четности легко проверить, однако флаг переноса и вспомогательного переноса становится сложным.Мой метод приближения к проверке флага переноса и флага вспомогательного переноса приведен выше, который кажется не очень надежным.
Приветствуется любое лучшее / более чистое / более оптимальное решение.Я также использовал www.sim8085.com, чтобы проверить мои мини-фрагменты кода и проверить, какие флаги включены, вот где я пришел к следующему вопросу:
mvi a, ffh
mvi b, cch
sub b
hlt
Когда я запускаю этот код,вспомогательный флаг устанавливается.Из того, что я знаю, вспомогательный флаг устанавливается только в том случае, если есть переход от нижнего полубайта к верхнему полубайту.Следовательно, я не могу понять логику того же самого.
Также хотелось бы знать, все ли флаги затрагиваются только изменениями в аккумуляторе или иным образом?
РЕДАКТИРОВАТЬ:
byte b = 0x2f;
byte c = 0x2c;
byte d = (byte) ((byte) (b&0xf) + (c&0xf));
byte e = (byte) ((byte) (b&0xf) + ((~c)&0xf) + 1);
int x = (int) ((b&0xff) + (c&0xff));
int y = (int) ((int) (b&0xff) + ((~c)&0xff) + 1);
System.out.println(y);
System.out.println((d>0xf) + "\t" + (e>0xf));
System.out.println((x>0xff) + "\t" + (y>0xff));
Я попытался использовать эту логику, чтобы увидеть, работает ли она для всех математических операций, по-видимому, это также не позволяет надежно проверить, должен ли быть установлен флаг переноса или вспомогательный перенос.Пожалуйста, помогите мне выяснить, как надежно проверить, приводит ли операция к установлению или снятию флага переноса и флага вспомогательного переноса.