chore(interpreter): correctly sign extend for CBW/CWD intructions

This commit is contained in:
2025-07-02 17:46:15 +09:00
parent 6d60343067
commit 60b5b6bd51

View File

@@ -576,15 +576,19 @@ impl Interpreter {
* Sign extensions
*/
Mnemonic::CBW => {
if ImmediateOperand::Byte(self.computer.regs.ax.lower).msb() {
// extend sign bit into AX, i.e. all bits set
if ImmediateOperand::Byte(self.computer.regs.ax.lower).msb() {
self.computer.regs.ax.upper = 0xff;
} else {
self.computer.regs.ax.upper = 0x00;
}
}
Mnemonic::CWD => {
if ImmediateOperand::Word(self.computer.regs.ax.read()).msb() {
// extend sign bit into DX, i.e. all bits set
if ImmediateOperand::Word(self.computer.regs.ax.read()).msb() {
self.computer.regs.dx.write(0xffff);
} else {
self.computer.regs.dx.write(0x0000);
}
}