From 53b494584416415aaf3e46d51e29ea30b83097aa Mon Sep 17 00:00:00 2001 From: Hane Date: Wed, 28 Jan 2026 17:19:32 +0100 Subject: [PATCH] 1-3 complete --- 1-3/8086coded | Bin 35808 -> 38008 bytes 1-3/decoder.c | 89 ++++++++++++++++++++++++++++-- 1-3/listing-41 | Bin 76 -> 48 bytes 1-3/listing-41.asm | 132 ++++++++++++++++++++------------------------- 1-3/output.asm | 26 +++++++++ 5 files changed, 167 insertions(+), 80 deletions(-) diff --git a/1-3/8086coded b/1-3/8086coded index 7bb389004b29a28fae61e4aedd0032524a46ff7c..c6abd928cfd8daeba589eba1e00123bcb02f2e12 100755 GIT binary patch delta 13430 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 7)) + if (lo_only && ((low_order & low_order_neg_mask) >> 7)) high_order = high_order | 0b1111'1111; int8_t *effective_disp_high_order =(int8_t*) &(effective_disp) + 1; memcpy(&(effective_disp), &low_order, 1); @@ -682,14 +724,14 @@ int ASC_I_RM_parse(uint8_t byte1, uint8_t byte2, binary_data *binary, int bytes_ effective_disp = calc_effective_disp(high_disp, low_disp, false); low_data = payload[2]; - if (is_wide) + if (is_wide && !is_sign) { high_data = payload[3]; effective_data = calc_effective_disp(high_data, low_data, false); } else { - effective_data = calc_effective_disp(0, low_disp, true); + effective_data = calc_effective_disp(0, low_data, true); } fill_ea_string(&mem_data, EA_ENCODING_TXT[ea_table_value], effective_disp); @@ -828,6 +870,23 @@ int ASC_REGM_R_parse(uint8_t byte1, uint8_t byte2, binary_data *binary, int byte return extra_bytes_read; } +void JMP_parse(uint8_t byte1, uint8_t byte2, binary_data *binary, int bytes_read, JMP_OPC op) +{ + const uint8_t loopx_mask = 0b0000'0011; + const uint8_t jx_mask = 0b0000'1111; + int8_t disp = 0; + memcpy(&disp, &byte2, sizeof(uint8_t)); + uint8_t jump_op = (op == LOOPX) ? (byte1 & loopx_mask) : (byte1 & jx_mask); + + char nasm_offset[4] = { "\0" }; + if (!disp) strcpy(nasm_offset, "$+"); + else strcpy(nasm_offset, "$+2"); + + //We have to add +2 to displacement so that NASM can parse displacements correctly + printf("%s %s%+d \n", (op == LOOPX) ? LOOPX_INST_TXT[jump_op] : JX_INST_TXT[jump_op], nasm_offset, disp); + fprintf(output, "%s %s%+d \n", (op == LOOPX) ? LOOPX_INST_TXT[jump_op] : JX_INST_TXT[jump_op], nasm_offset, disp); +} + int main(int argc, char** argv) { if (argc != 2) return -1; @@ -848,8 +907,9 @@ 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]; - //First, we check for ASC. + //First, we check for ASC or JMPs. manip_inst = (manip_inst >> 1); + if ((manip_inst & ASC_I_A_M) == ASC_I_A) { if (bytes_read >= bin.size) break; @@ -860,6 +920,15 @@ int main(int argc, char** argv) continue; } manip_inst = (inst >> 2); + if (manip_inst == LOOPX) + { + if (bytes_read >= bin.size) break; + fread(byte, sizeof(byte), 1, bin.binary); + bytes_read++; + inst_byte2 = (uint8_t)byte[0]; + JMP_parse(inst, inst_byte2, 0, 0, LOOPX); + continue; + } if ((manip_inst & ASC_REGM_R_M) == ASC_REGM_R) { if (bytes_read >= bin.size) break; @@ -877,7 +946,17 @@ int main(int argc, char** argv) inst_byte2 = (uint8_t)byte[0]; bytes_read += ASC_I_RM_parse(inst, inst_byte2, 0, 0); continue; - } + } + manip_inst = (inst >> 4); + if (manip_inst == JX) + { + if (bytes_read >= bin.size) break; + fread(byte, sizeof(byte), 1, bin.binary); + bytes_read++; + inst_byte2 = (uint8_t)byte[0]; + JMP_parse(inst, inst_byte2, 0, 0, JX); + continue; + } //Then, we're checking for all MOV except segment registers manip_inst = (inst >> 1); switch (manip_inst) diff --git a/1-3/listing-41 b/1-3/listing-41 index b63415cb7d73ea205f0668b8dde807de9a667d44..e4bbcb1e00e340e09ec59346225dc7035493a548 100644 GIT binary patch literal 48 zcmV-00MGw*0(Ja#`gQzt{(Ss?`f~Vo_ImVi@_6ud?tSck>T~FK=6mFE;(6fW-r?Nf G+T++4ogyOu literal 76 zcmV-S0JHyt#sY)I0)xQ_fx+4JfCnOjg6IPs0N@4a0|ep(34`tegY5!?=?H)?B7-R% iE$9O*;w%Y+{sM#j0)zPofIlLGKH?G`J?H~G;yek