From 5f9c6a8fdf624839ce10e8a9908795d6e3c0146f Mon Sep 17 00:00:00 2001 From: Hane Date: Fri, 23 Jan 2026 20:51:39 +0100 Subject: [PATCH] 1-1 now outputs to file --- 1-1/8086coded | Bin 20296 -> 20432 bytes 1-1/decoder.c | 14 +++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/1-1/8086coded b/1-1/8086coded index 272f2926810431b99539e97e35b4d82b27c84355..6bf35b65d7a61b5818e4b725c1c5ed71b15f252a 100755 GIT binary patch delta 3903 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 O7DS1eCfbB0^ZpMf&bkf& diff --git a/1-1/decoder.c b/1-1/decoder.c index d639512..ed4c8e3 100644 --- a/1-1/decoder.c +++ b/1-1/decoder.c @@ -4,9 +4,9 @@ enum DT_INSTRUCTIONS { - MOV_RM_TF_R = 0b1000'10, //d w + MOV_RM_TF_R = 0b1000'10, //d w MOV_I_T_RM = 0b1100'011, // w - MOV_I_T_R = 0b1011, // w reg + MOV_I_T_R = 0b1011, // w reg MOV_M_T_A = 0b1010'000, // w MOV_A_T_M = 0b1010'001, // w MOV_RM_T_SR = 0b1000'1110, @@ -54,6 +54,7 @@ typedef struct uint64_t size; } binary_data; +FILE *output; void MOV_RM_TF_R_parse(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4) { @@ -67,8 +68,9 @@ void MOV_RM_TF_R_parse(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte bool reg_is_dest = (byte1 & dest_mask); //if D=1, dest is retrieved from the reg field in byte2 and src from r/m uint8_t dest_value = (reg_is_dest) ? ((byte2 & regm_mask) >> 3) + ((byte1 & wide_mask) * 8) : (byte2 & (regm_mask >> 3)) + ((byte1 & wide_mask) * 8); - uint8_t src_value = (reg_is_dest) ? (byte2 & (regm_mask >> 3)) + ((byte1 & wide_mask) * 8) : ((byte2 & regm_mask) >> 3) + ((byte1 & wide_mask) * 8); - printf("%s, %s\n", REG_ENCODING_TXT[dest_value], REG_ENCODING_TXT[src_value]); + uint8_t src_value = (reg_is_dest) ? (byte2 & (regm_mask >> 3)) + ((byte1 & wide_mask) * 8) : ((byte2 & regm_mask) >> 3) + ((byte1 & wide_mask) * 8); + printf("%s %s, %s\n", "mov", REG_ENCODING_TXT[dest_value], REG_ENCODING_TXT[src_value]); + fprintf(output, "%s %s, %s\n", "mov", REG_ENCODING_TXT[dest_value], REG_ENCODING_TXT[src_value]); return; } @@ -83,6 +85,9 @@ int main(int argc, char** argv) fseek(bin.binary, 0, SEEK_END); bin.size = ftell(bin.binary); fseek(bin.binary, 0, SEEK_SET); + + output = fopen("output.asm", "w"); + fprintf(output, "%s\n\n", "bits 16"); for (int bytes_read = 0; bytes_read < bin.size; bytes_read++) { @@ -92,7 +97,6 @@ int main(int argc, char** argv) //For now we're just checking for RM_TF_R manip_inst = (manip_inst >> 2); if (manip_inst != MOV_RM_TF_R) break; - printf("%s ", "mov"); if (bytes_read >= bin.size) break; fread(byte, sizeof(byte), 1, bin.binary); bytes_read++;