From ab5711a77e2a6872ca1392c1dbc2f545f7d3ab3b Mon Sep 17 00:00:00 2001 From: Johannes Stoelp Date: Mon, 27 Feb 2023 21:16:40 +0100 Subject: Add ADD, DEC, TEST, RET instructions --- src/lib.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index e38da14..27164ad 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -107,8 +107,8 @@ impl Asm { Self: EncodeRI, { // MI operand encoding. - // op1 -> modrm.rm - // op2 -> modrm.reg + // op1 -> modrm.rm + // opc extension -> modrm.reg let modrm = modrm( 0b11, /* mod */ opc_ext, /* reg */ @@ -123,6 +123,26 @@ impl Asm { self.emit(op2.bytes()); } + fn encode_r(&mut self, opc: u8, opc_ext: u8, op1: T) + where + Self: EncodeRI, + { + // M operand encoding. + // op1 -> modrm.rm + // opc extension -> modrm.reg + let modrm = modrm( + 0b11, /* mod */ + opc_ext, /* reg */ + op1.idx(), /* rm */ + ); + + let prefix = >::legacy_prefix(); + let rex = >::rex(op1); + + self.emit_optional(&[prefix, rex]); + self.emit(&[opc, modrm]); + } + fn encode_mr(&mut self, opc: u8, op1: MemOp, op2: T) where Self: EncodeMR, -- cgit v1.2.3