mirror of
https://github.com/TomHarte/CLK.git
synced 2025-08-15 14:27:29 +00:00
Accept that IN and OUT are going to have special semantics, thereby kill ::AX and ::DX.
This commit is contained in:
@@ -349,10 +349,10 @@ std::pair<int, InstructionSet::x86::Instruction> Decoder::decode(const uint8_t *
|
|||||||
case 0xea: Far(JMPF); break;
|
case 0xea: Far(JMPF); break;
|
||||||
case 0xeb: Jump(JMPN); break;
|
case 0xeb: Jump(JMPN); break;
|
||||||
|
|
||||||
case 0xec: Complete(IN, DX, eAX, 1); break;
|
case 0xec: Complete(IN, eDX, eAX, 1); break;
|
||||||
case 0xed: Complete(IN, DX, AX, 1); break;
|
case 0xed: Complete(IN, eDX, eAX, 1); break;
|
||||||
case 0xee: Complete(OUT, eAX, DX, 1); break;
|
case 0xee: Complete(OUT, eAX, eDX, 1); break;
|
||||||
case 0xef: Complete(OUT, AX, DX, 2); break;
|
case 0xef: Complete(OUT, eAX, eDX, 2); break;
|
||||||
|
|
||||||
case 0xf0: lock_ = true; break;
|
case 0xf0: lock_ = true; break;
|
||||||
case 0xf2: repetition_ = Repetition::RepNE; break;
|
case 0xf2: repetition_ = Repetition::RepNE; break;
|
||||||
|
@@ -335,10 +335,6 @@ enum class Source: uint8_t {
|
|||||||
CL,
|
CL,
|
||||||
AH, BH, CH, DH,
|
AH, BH, CH, DH,
|
||||||
|
|
||||||
// TODO: can these all be eliminated in favour of eAX,2, etc?
|
|
||||||
AX,
|
|
||||||
DX,
|
|
||||||
|
|
||||||
// TODO: compact and replace with a reference to a SIB.
|
// TODO: compact and replace with a reference to a SIB.
|
||||||
IndBXPlusSI,
|
IndBXPlusSI,
|
||||||
IndBXPlusDI,
|
IndBXPlusDI,
|
||||||
|
@@ -177,7 +177,7 @@ namespace {
|
|||||||
// jo 0x00000037
|
// jo 0x00000037
|
||||||
// xchg %ax,%sp
|
// xchg %ax,%sp
|
||||||
[self assert:instructions[8] operation:Operation::DEC size:2 source:Source::eSI destination:Source::eSI];
|
[self assert:instructions[8] operation:Operation::DEC size:2 source:Source::eSI destination:Source::eSI];
|
||||||
[self assert:instructions[9] operation:Operation::OUT size:2 source:Source::AX destination:Source::DX];
|
[self assert:instructions[9] operation:Operation::OUT size:2 source:Source::eAX destination:Source::eDX];
|
||||||
[self assert:instructions[10] operation:Operation::JO displacement:0x20];
|
[self assert:instructions[10] operation:Operation::JO displacement:0x20];
|
||||||
[self assert:instructions[11] operation:Operation::XCHG size:2 source:Source::eAX destination:Source::eSP];
|
[self assert:instructions[11] operation:Operation::XCHG size:2 source:Source::eAX destination:Source::eSP];
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ namespace {
|
|||||||
// jge 0xffffffe0
|
// jge 0xffffffe0
|
||||||
[self assert:instructions[18] operation:Operation::SBB size:2 source:Source::eBX destination:Source::IndBPPlusSI displacement:0x16];
|
[self assert:instructions[18] operation:Operation::SBB size:2 source:Source::eBX destination:Source::IndBPPlusSI displacement:0x16];
|
||||||
[self assert:instructions[19] operation:Operation::XOR size:2 source:Source::eSP destination:Source::IndSI displacement:0x2c];
|
[self assert:instructions[19] operation:Operation::XOR size:2 source:Source::eSP destination:Source::IndSI displacement:0x2c];
|
||||||
[self assert:instructions[20] operation:Operation::OUT size:2 source:Source::AX destination:Source::DirectAddress operand:0xc6];
|
[self assert:instructions[20] operation:Operation::OUT size:2 source:Source::eAX destination:Source::DirectAddress operand:0xc6];
|
||||||
[self assert:instructions[21] operation:Operation::JNL displacement:0xffb0];
|
[self assert:instructions[21] operation:Operation::JNL displacement:0xffb0];
|
||||||
|
|
||||||
// mov $0x49,%ch
|
// mov $0x49,%ch
|
||||||
@@ -229,7 +229,7 @@ namespace {
|
|||||||
[self assert:instructions[26] operation:Operation::PUSH size:2 source:Source::eAX];
|
[self assert:instructions[26] operation:Operation::PUSH size:2 source:Source::eAX];
|
||||||
[self assert:instructions[27] operation:Operation::JS displacement:0x3d];
|
[self assert:instructions[27] operation:Operation::JS displacement:0x3d];
|
||||||
[self assert:instructions[28] operation:Operation::ADD size:2 source:Source::IndDI destination:Source::eBX];
|
[self assert:instructions[28] operation:Operation::ADD size:2 source:Source::IndDI destination:Source::eBX];
|
||||||
[self assert:instructions[29] operation:Operation::IN size:2 source:Source::DirectAddress destination:Source::AX operand:0xc9];
|
[self assert:instructions[29] operation:Operation::IN size:2 source:Source::DirectAddress destination:Source::eAX operand:0xc9];
|
||||||
|
|
||||||
// xchg %ax,%di
|
// xchg %ax,%di
|
||||||
// ret
|
// ret
|
||||||
@@ -238,7 +238,7 @@ namespace {
|
|||||||
[self assert:instructions[30] operation:Operation::XCHG size:2 source:Source::eAX destination:Source::eDI];
|
[self assert:instructions[30] operation:Operation::XCHG size:2 source:Source::eAX destination:Source::eDI];
|
||||||
[self assert:instructions[31] operation:Operation::RETN];
|
[self assert:instructions[31] operation:Operation::RETN];
|
||||||
[self assert:instructions[32] operation:Operation::WAIT];
|
[self assert:instructions[32] operation:Operation::WAIT];
|
||||||
[self assert:instructions[33] operation:Operation::OUT size:1 source:Source::AL destination:Source::DirectAddress operand:0xd3];
|
[self assert:instructions[33] operation:Operation::OUT size:1 source:Source::eAX destination:Source::DirectAddress operand:0xd3];
|
||||||
|
|
||||||
// [[ omitted: insb (%dx),%es:(%di) ]]
|
// [[ omitted: insb (%dx),%es:(%di) ]]
|
||||||
// pop %ax
|
// pop %ax
|
||||||
@@ -294,7 +294,7 @@ namespace {
|
|||||||
[self assert:instructions[54] operation:Operation::MOV size:2 operand:0xea56 destination:Source::eDI];
|
[self assert:instructions[54] operation:Operation::MOV size:2 operand:0xea56 destination:Source::eDI];
|
||||||
[self assert:instructions[55] operation:Operation::DEC size:2 source:Source::eSI destination:Source::eSI];
|
[self assert:instructions[55] operation:Operation::DEC size:2 source:Source::eSI destination:Source::eSI];
|
||||||
[self assert:instructions[56] operation:Operation::STD];
|
[self assert:instructions[56] operation:Operation::STD];
|
||||||
[self assert:instructions[57] operation:Operation::IN size:1 source:Source::DirectAddress destination:Source::AL operand:0x5a];
|
[self assert:instructions[57] operation:Operation::IN size:1 source:Source::DirectAddress destination:Source::eAX operand:0x5a];
|
||||||
|
|
||||||
// and 0x5b2c(%bp,%si),%bp
|
// and 0x5b2c(%bp,%si),%bp
|
||||||
// sub %dl,%dl
|
// sub %dl,%dl
|
||||||
|
Reference in New Issue
Block a user