У меня есть маленький эмулятор 8086, и у меня есть давняя ошибка в течение примерно 2 лет, когда AF не работает должным образом внутри саба и добавляет инструкции.
Мой текущий способ вычисления его значения таков: для 8-битных чисел и вычитания:
uint8_t base=... , subt=...
base=base&0xF;
subt=subt&0xF; //isolate bottom nibble
if((int16_t)base-subt>7 || (int16_t)base-subt<-7){
flags.af=1;
}else{
flags.af=0;
}
(при условии, что инструкция sub base,subt
)
И для добавлениянапример:
uint8_t base=... , adder=...
base=base&0xF;
adder=adder&0xF; //isolate bottom nibble
if(base+adder>7 || base+adder<-7){
flags.af=1;
}else{
flags.af=0;
}
(для такой инструкции, как add base,adder
)
Как правильно рассчитать флаг AF в моем эмуляторе для таких инструкций?