From e639d1fd2a2e6302732b8ae71835d48c2b39ea4c Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sun, 17 Nov 2019 19:30:59 -0500 Subject: [PATCH] number reading routine --- asm.img | Bin 11980 -> 12154 bytes asm.qf | 24 +++++++++++++++++------- in.asm | 32 +++++++++++++++++++++++++++++--- out.com | Bin 42 -> 73 bytes 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/asm.img b/asm.img index 07964a46902414578f4a398c3d0866bfe9879439..34e1a47ccd2caefb24fcace81b4a2e0b0d4e236d 100755 GIT binary patch delta 1230 zcmZXSYe-c=5XWcF**%vadnm$vdChyGFw;!S2+_|1R*GrKb%j{dIc8}b`F z^LU{Z;ZuIf%L5z8Tiz0|$v7YI+hmeY`)%K>2~b;KpGai+)=_}gSRIC}2*Y!{GcB7` z@-J9%oRgq!-9*|L>gju~wdwk>%@^aZ@waks;m~w8{;Y0)L4Mqao!vZ@Eef_+s7DietidBUHey03pMJZG^tY!uS_*~SWk zJnXODl)=(=k$Lf5{2)o;h(SJ*7a+rYE-yFkh!IGM6jB0U3K1p8OaoTqn;h{9rpN;3 zX2=~70w9SQio8$rln~;lnKFsXucMPAOw7)Zar6?VNeK|}JPTY;vQk6QHj{7Lni(HA zXNa_m&?pvBRaEX4<*qEknjO>t14rr58AmW!@+hHumwD8=9)()z4F^!|dU(TKi@Tyu zEpmj1(YRRSF*}-YG>Dyr;ujG2to(%`#Mc()636B}k_|T8vYfcux)v zDz^x@MMo?RHBXt&$o(#57U?hElAjS@&t}CM@NR6uy|Dn>PyXQTOu0*46iLyeu8Y7H z)`5=+uy$;}nR%-wuwBtsq(z#RD0&9zZcPs=dKPIJqjB}EM-*;DT%pCaipG)FXnI=F zOGr;@+OFtDq-~mBQS>s>xTd!hjX^2E4UO+AEQjdU^s%Bzqz{nh8u-VDzKU*R)^tP; JO!D4>tbYQYfTREb delta 1065 zcmZXRT}V_x6oAj%nS0kFd(f2Kb=TFsC6%E@5Jgc5K|dH8f#gH>qtYL4`P&cHX3$Gf zbQvt67oUSb5GsNsh@c0Bg6O56-DN?nR>DiNP%YD$xwE&Rw=>`Q&Y3f3es<0rnS2rC zHI=KJi4{B@WV|g@Q!-5fde04?aGVHv$)5*plIEG9y=+18?*3lKsUij57qZO~25^y& zmd40>{wZXW?VN<|z(J(vhX#0Ud6abV-mpyuxr6)$^3#bf$BCMEF+9UFp%{6<3t`)O zCeOzmr#kRnMLj5485!aj)kco-J5_NjF9D{iEyKj!mHHQ)_y!izp)~aE z-9vr}uUZH%^Ic_@WQO0bUla3gs>8R-Dda2^`({Z2=K(0?J2zA$3p7jQ9hEH17jjeMr|C`2Q^_F=kBTPHN#X<(-X@KZ^`TqW}N^ diff --git a/asm.qf b/asm.qf index 6536d11..ae5df13 100755 --- a/asm.qf +++ b/asm.qf @@ -86,25 +86,34 @@ var lblfixup var currlbl r@ inst-opcount begin dup while 1 - swap , repeat drop r> inst-nextimpl r> swap ! ; -: int &hcd outb! outb! 1 assembled ; -2 inst mov -2 inst movb - -OP_IMM OP_REG16 :noname &hb8 op1 + outb! op2 outw! ; ' mov impl -OP_IMM OP_REG8 :noname &hb0 op1 + outb! op2 outb! ; ' movb impl : :+r anondo >r , OP_REG16 r> does> @ op1 + outb! ; : :+sreg anondo >r , OP_SREG r> does> @ op1 8 * + outb! ; : modrm ( mod rm reg ) 8 * | swap 64 * | outb! ; + +: int &hcd outb! outb! 1 assembled ; + +2 inst mov + +OP_IMM OP_REG16 :noname &hb8 op1 + outb! op2 outw! ; ' mov impl +OP_IMM OP_REG8 :noname &hb0 op1 + outb! op2 outb! ; ' mov impl +OP_REG8 OP_REG8 :noname &h88 outb! 3 op1 op2 modrm ; ' mov impl + 2 inst add OP_REG16 OP_REG16 :noname &h01 outb! &h03 op1 op2 modrm ; ' add impl OP_IMM OP_REG8 :noname &h80 outb! 3 op1 0 modrm op2 outb! ; ' add impl +2 inst sub +OP_REG16 OP_REG16 :noname &h29 outb! &h03 op1 op2 modrm ; ' sub impl +OP_IMM OP_REG8 :noname &h80 outb! 3 op1 5 modrm op2 outb! ; ' sub impl 2 inst xor OP_REG16 OP_REG16 :noname &h31 outb! &h03 op1 op2 modrm ; ' xor impl 2 inst cmp -OP_IMM OP_REG16 :noname &h81 outb! 3 op1 0 modrm op2 outw! ; ' cmp impl +OP_IMM OP_REG16 :noname &h81 outb! 3 op1 7 modrm op2 outw! ; ' cmp impl +OP_IMM OP_REG8 :noname &h80 outb! 3 op1 7 modrm op2 outb! ; ' cmp impl 1 inst div OP_REG16 :noname &hf7 outb! &h03 op1 &h06 modrm ; ' div impl +1 inst mul +OP_REG16 :noname &hf7 outb! &h03 op1 &h04 modrm ; ' mul impl 1 inst push &h06 :+sreg ' push impl @@ -136,6 +145,7 @@ OP_REG16 :noname &hff outb! 3 op1 4 modrm ; ' jmp impl &h7e :jumprel jle &h75 :jumprel jne &h74 :jumprel jz +&heb :jumprel jmps : .EXIT ax &h4c00 | # mov &h21 int ; : d" begin in@ dup [ in@ " lit ] != while outb! repeat drop ; diff --git a/in.asm b/in.asm index 6fed4e7..7ef7a2d 100755 --- a/in.asm +++ b/in.asm @@ -1,7 +1,33 @@ +:> end cs push \ copy code segment to data segment ds pop - ax 0 # mov +\ read number +\ clobbers: ax, bx, cx, dx + dx dx xor + cx cx xor + bx 10 # mov + dx push +:> readnext + ax &h0100 # mov + &h21 int + + :> readover + al in@ 0 # cmp + readover jl + al in@ 9 # cmp + readover jg + cl al mov + cl in@ 0 # sub + ax pop + bx mul + ax cx add + ax push + readnext jmps +readover <: + ax pop + + \ ax 0 # mov \ print number \ in: ax = number \ clobbers: ax, bx, cx, dx @@ -18,7 +44,7 @@ :> moredigits dx pop - dl 48 # add + dl in@ 0 # add ax &h0200 # mov &h21 int bx dec @@ -26,4 +52,4 @@ 0 .EXIT - cx 11 # mov +end <: diff --git a/out.com b/out.com index 6663b48f0fd0013c4d615616a6760165edbb711d..dafee9e7f8f1315790ebd953f84c0f67b5dcccbb 100755 GIT binary patch literal 73 zcmV-P0Ji@QA2HG~$-4>wQn&yC%^`sJFnkh#_&I+Kh{1sAFj)8F0mxA6_%^|r90A7p` Ay#N3J