<<<--- % Author M.Ruckert LOC Data_Segment GREG @ U OCTA 2,0,1,#FF00FF W OCTA 7,7,7,7,7,7,#DD00DD m IS 3 n IS 2 LOC #100 Main LDA $1,U SET $2,3 LDA $3,W SET $4,m SET $5,n PUSHJ $0,:Classic:Mul TRAP 0,Halt,0 PREFIX :Classic: U IS $0 Parameter. V IS $1 W IS $2 Wj IS $2 m IS $3 n IS $4 i IS $5 Local variables. j IS $6 k IS $7 wj IS $8 vj IS $9 t IS $10 tmp IS $11 rH IS :rH --->>> Mul 8ADDU U,m,U; 8ADDU V,n,V 8ADDU Wj,m,W Address of $w_{j+m}$ SL i,m,3; NEG i,i \ul{\sl M1.~Initialize.} 0H STCO 0,Wj,i $(w_{m-1}\ldots w_0)\is (0\ldots0)$ ADD i,i,8 PBN i,0B SL j,n,3; NEG j,j $j \is -8n$ 2H LDOU vj,V,j \ul{\sl M2.~Zero multiplier?} PBNZ vj,3F STCO 0,Wj,0 $w_{j+m}\is 0$ JMP 6F 3H SL i,m,3; NEG i,i \ul{\sl M3.~Initialize i.} SET k,0 %\ul{\sl M4.~Multiply and add.} 4H LDOU t,U,i $t\is u_i$ MULU t,t,vj $t\is u_i v_i$ ADDU t,t,k $t\is u_i v_i + k$ CMPU tmp,t,k; ZSN k,tmp,1 Carry? LDOU tmp,Wj,i; ADDU t,t,tmp $t\is u_i v_i + k+ w_{j+i}$ CMPU tmp,t,tmp; CSN k,tmp,1 Carry? STOU t,Wj,i $w_{i+j}\is t \bmod b$ GET tmp,rH; ADDU k,k,tmp $k\is \lfloor t/b \rfloor$ ADD i,i,8 \ul{\sl M5.~Loop on $i$.} PBN i,4B STOU k,Wj,0 $w_{j+m}\is k$ 6H ADD j,j,8 \ul{\sl M5.~Loop on $j$.} ADD Wj,Wj,8 PBN j,2B STOU k,Wj,0 $w_{m+j}\is k$ <<<--- POP 0,0