From 1a7041ab9db62a22a9517dbd20c8f179252863bc Mon Sep 17 00:00:00 2001 From: Hane Date: Sun, 25 Jan 2026 00:49:23 +0100 Subject: [PATCH] 1-2: Assignment complete w/o challenge --- 1-2/8086coded | Bin 22112 -> 22608 bytes 1-2/decoder.c | 100 ++++++++++++++++++++++++++++++++------------- 1-2/listing-39 | Bin 0 -> 41 bytes 1-2/listing-39.asm | 31 ++++++++++++++ 1-2/output | Bin 0 -> 41 bytes 1-2/output.asm | 18 ++++++++ 6 files changed, 120 insertions(+), 29 deletions(-) create mode 100644 1-2/listing-39 create mode 100644 1-2/listing-39.asm create mode 100644 1-2/output create mode 100644 1-2/output.asm diff --git a/1-2/8086coded b/1-2/8086coded index 0b5107dfb875955d785adeefa19a60aedff875f3..96478de9beff7950d2067c151ac97691f2e2f5d1 100755 GIT binary patch delta 4871 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 delta 3973 zcmZu!3v^V~6@B-hEtFBl9Nfm-%P4~HP2oZg2%{}*= zv-i2@ocr#bnRFLBx|uy##-npONBzS+$D_z+jz?s(3fFLEsl!E_^#yDtmNp>8<@}nG ziBZdXu^ergmC@oI{&wic^H2Tiy-(gPZfzSe^WDd;dT!O#v;LfVQLXm!M_l5#|KpT5 z*v!m@V-&?mdi=iav7N@Uw9%0^ShvB_MlxJWF1E)=R&7U)Mp8?W=-9V|mg)KC>;8U_ zUcZRsknw82FWxcaM@tzAZLLIwmw1Mesp={Oj(40Hh@C?0PoK5Jmk2K$BkFQ<`DI^= zqVSd8J1GXT>)6-x)j4q}H^;nIT6P5VxG`?>89W zN$)zH)`+EFQ3++ykCMARmR5b+oA&~4+Un#14wwoYDN&a?zPrT;5Vn z$-VWN%}B)Sjy)FH2eMd`H-vj6ZR)X6gK3Gn8xdx9(z{5qt6Cu9 z*p-gmvpWu00se3n?fI<@tVDQjxoppjv*P|p4llN}@L91d(jaDqM|mg8;Id)QeI*+f zmX^T{d+#f`mEUgIiAyLeNn8ehreWnSTJ_rvdx+e!VJ|fwK*RJ5W^luv1ZGgfMqMHs z=9X(*XxPu4h@PzbDTzT1+j}O{uY@mPhIu8s$_;T*!>&0aW=BTy zPs(Jkj`Yc1ZL_q^edyKVoN9+v*x;lO_KC6i)m|}@mXn=u_E8HbtdW+%Ev)GKo)*S0 z5MMtncIJ=f=~7vDSLxsal2ya$RZrHHkQh|=s?(XemrL608Q-EM>i!5Fb*D69S9L*L zRJVoz58{x%W+a-=TyK%i`doutU0{t^RDz@`y`73Eew@ul2>zI$TFQ8C1c z?$yWn`kx&i+SZncouq3jq1{ZuYxdl-9K0oxH?0}G_Si{gkv{irZ^I{c;$>PwR)E?L zU{w}7Nw9%XVJnnxLvz2_T~w44Mx6b7LHfd1eAZ|`<}}*haPCd5b*9u`ME#;5S~i9i zsFQIGDX2;5`Mke>DdeLk(M8D4-v0i3ATPt&-UO+Lw&<{k0WUhKDAOH&62tMCfX{ld zH9C^BUU4>>pLaV9zsC7`iM~1-vix`RXs{xfqPtiH!Ip(jLhNAY$aB4;4W4ecnK;X(@&>zwYFL@o4$oWccjQ^^JOxe~ zks$1j$d_9Nh#9zzm?5|n`you3y#{k`XBbs0i3eboN%-W*l`Qf12}LWdyfWEktpL8*{uH1t zwYwhC@Z|ehjq3{vN*bH&q?{GD9V)BU4`c3BwDF|Xsc*xT>jCFO z;!yV#mmQ$sz>robBF5S^+tDXFV@Qy8rUOC$$y98w!Z7C_62o z@V~(QnQl>+7JFdkcfxc+r&Gy0ujcnc`#hs9;pPFDPiNF?Ft^b;)aics7)!`~Q0=kJ}JPAGWT#v5@_xgW=tG!CI9)Xt5j`)y1bD=hU*krv%j|X`k_MEYJkX)W>P;t=& zfvAn(yiFJkof;vq4Mvu{)@<0LwczIr0QL6EvSN{=S#7NG72{%TN4TcvWLFak6m0#gN z)d+c^>Y`Ew-7nTzb1s@k1*42{A~|_|>W8&As7=``w7lh-y;Un+M5EW)uIaP1P@5J| zxQ#hCXtj`BZLQTx$uLtZC$ZepTD74mZAhKw8kwr8?_%P=4Y5>HV?Rr^OmAa3w33FK zj2_#j;L9P~`=P&u#6Q)j@Xv@cTWZ`42V;t;X=-8a6xFp2c zcq!i>5JP7!77xt~v0bTWX1>Z(t#iJ%@zuJxd47evzR&{K7m8=+&tTP}cmCMGcm9Zq zaSO%(S9+qw*(}z!RJ(4c9}Re_ z#8zlq>Bj}04WhTDnpaK}qZUqaWly(^xnk|YYS*P1txIf$b`)> 3) * 8); + + printf("%s %s, %d\n", "mov", REG_ENCODING_TXT[reg_value], full_im); + fprintf(output, "%s %s, %d\n", "mov", REG_ENCODING_TXT[reg_value], full_im); + + return extra_bytes_read; +} + + int MOV_RM_TF_R_parse(uint8_t byte1, uint8_t byte2, binary_data *binary, int bytes_read) { const uint8_t wide_mask = 0b0000'0001; @@ -237,14 +266,27 @@ 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]; - //For now we're just checking for RM_TF_R + //We're checking for MOV RM_TF_R and MOV I_T_R manip_inst = (manip_inst >> 2); - if (manip_inst != MOV_RM_TF_R) break; - 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_RM_TF_R_parse(inst, inst_byte2, 0, 0); + if (manip_inst == MOV_RM_TF_R) + { + 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_RM_TF_R_parse(inst, inst_byte2, 0, 0); + continue; + } + manip_inst = (manip_inst >> 2); + if (manip_inst == MOV_I_T_R) + { + 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_I_T_R_parse(inst, inst_byte2, 0, 0); + continue; + } } return 0; diff --git a/1-2/listing-39 b/1-2/listing-39 new file mode 100644 index 0000000000000000000000000000000000000000..405b80494b68e44c57e4f07e14b8c0703761a93e GIT binary patch literal 41 xcmeCY*Kuqk&(<$Hc^Gzn`M)cNf7g@`T@2mQ-C+z}2`pU=?ZTa$9b6rG3;@NK61@Nb literal 0 HcmV?d00001 diff --git a/1-2/listing-39.asm b/1-2/listing-39.asm new file mode 100644 index 0000000..ecce8c7 --- /dev/null +++ b/1-2/listing-39.asm @@ -0,0 +1,31 @@ +bits 16 + +; Register-to-register +mov si, bx +mov dh, al + +; 8-bit immediate-to-register +mov cl, 12 +mov ch, -12 + +; 16-bit immediate-to-register +mov cx, 12 +mov cx, -12 +mov dx, 3948 +mov dx, -3948 + +; Source address calculation +mov al, [bx + si] +mov bx, [bp + di] +mov dx, [bp] + +; Source address calculation plus 8-bit displacement +mov ah, [bx + si + 4] + +; Source address calculation plus 16-bit displacement +mov al, [bx + si + 4999] + +; Dest address calculation +mov [bx + di], cx +mov [bp + si], cl +mov [bp], ch diff --git a/1-2/output b/1-2/output new file mode 100644 index 0000000000000000000000000000000000000000..405b80494b68e44c57e4f07e14b8c0703761a93e GIT binary patch literal 41 xcmeCY*Kuqk&(<$Hc^Gzn`M)cNf7g@`T@2mQ-C+z}2`pU=?ZTa$9b6rG3;@NK61@Nb literal 0 HcmV?d00001 diff --git a/1-2/output.asm b/1-2/output.asm new file mode 100644 index 0000000..3f42057 --- /dev/null +++ b/1-2/output.asm @@ -0,0 +1,18 @@ +bits 16 + +mov si, bx +mov dh, al +mov cl, 12 +mov ch, 244 +mov cx, 12 +mov cx, 65524 +mov dx, 3948 +mov dx, 61588 +mov al, [bx + si] +mov bx, [bp + di] +mov dx, [bp + 0] +mov ah, [bx + si + 4] +mov al, [bx + si + 4999] +mov [bx + di], cx +mov [bp + si], cl +mov [bp + 0], ch