From 15286389ad63bcb2f3b1ccaf94f6257e95823fa4 Mon Sep 17 00:00:00 2001 From: Hane Date: Sun, 25 Jan 2026 01:40:07 +0100 Subject: [PATCH] 1-2: Accumulator and RM_TF_M MOD 00 R/M 110 --- 1-2/8086coded | Bin 22608 -> 27368 bytes 1-2/decoder.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/1-2/8086coded b/1-2/8086coded index 96478de9beff7950d2067c151ac97691f2e2f5d1..751d7956ec597431f672580038203a14f27dfc98 100755 GIT binary patch delta 7478 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 diff --git a/1-2/decoder.c b/1-2/decoder.c index 4791f4d..670a509 100644 --- a/1-2/decoder.c +++ b/1-2/decoder.c @@ -63,6 +63,48 @@ typedef struct FILE *output; binary_data bin; +int MOV_MA_T_AM_parse(uint8_t byte1, uint8_t byte2, binary_data *binary, int bytes_read, bool is_M_T_A) +{ + const uint8_t wide_mask = 0b0000'0001; + uint8_t extra_bytes_read; + unsigned char byte[1]; + uint8_t acc_wide = 0; + uint8_t high_addr = 0; + uint16_t word_addr = byte2; + + int disp_len = 0; + char ea_string[18] = {'\0'}; + char *ea_string_write_ptr = ea_string; + + //Immediate value retrieval + if (wide_mask & byte1) + { + fread(byte, sizeof(byte), 1, bin.binary); + extra_bytes_read++; + high_addr = (uint8_t)byte[0]; + word_addr = word_addr + (high_addr << 8); + } + + //target reg retrieval + acc_wide = (((byte1 & wide_mask)) * 8); + + //Stringify address + //EA STRING GENERATION + *ea_string_write_ptr = '['; + ea_string_write_ptr++; + disp_len = sprintf(ea_string_write_ptr, "%d", word_addr); + ea_string_write_ptr += disp_len; + *ea_string_write_ptr = ']'; + //END + + printf("%s %s, %s\n", "mov", is_M_T_A ? REG_ENCODING_TXT[acc_wide] : ea_string, + is_M_T_A ? ea_string : REG_ENCODING_TXT[acc_wide]); + fprintf(output, "%s %s, %s\n", "mov", is_M_T_A ? REG_ENCODING_TXT[acc_wide] : ea_string, + is_M_T_A ? ea_string : REG_ENCODING_TXT[acc_wide]); + + return extra_bytes_read; +} + int MOV_I_T_R_parse(uint8_t byte1, uint8_t byte2, binary_data *binary, int bytes_read) { const uint8_t wide_mask = 0b0000'1000; @@ -266,8 +308,18 @@ int main(int argc, char** argv) fread(byte, sizeof(byte), 1, bin.binary); uint8_t manip_inst = (uint8_t)byte[0]; uint8_t inst = (uint8_t)byte[0]; - //We're checking for MOV RM_TF_R and MOV I_T_R - manip_inst = (manip_inst >> 2); + //We're checking for all MOV except segment registers + manip_inst = (manip_inst >> 1); + if (manip_inst == MOV_M_T_A || manip_inst == MOV_A_T_M) + { + if (bytes_read >= bin.size) break; + fread(byte, sizeof(byte), 1, bin.binary); + bytes_read++; + uint8_t inst_byte2 = (uint8_t)byte[0]; + bytes_read += MOV_MA_T_AM_parse(inst, inst_byte2, 0, 0, (manip_inst == MOV_M_T_A)); + continue; + } + manip_inst = (manip_inst >> 1); if (manip_inst == MOV_RM_TF_R) { if (bytes_read >= bin.size) break;