私は小さな8086エミュレーターを持っていますが、AFがsub内で適切に動作せず、命令を追加するようになったため、2年ほど長い間バグがありました。
その値を計算する私の現在の方法は、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フラグを正しく計算するにはどうすればよいですか?