// ***************************************** // SQRT // ***************************************** daten[0] = 0xF000; // NOP daten[1] = 0x4000; //BA daten[2] = 10; // Start SQRT // ***************************************** // SQRT: Parameter // ***************************************** daten[3] = 60000; // Calculate SQRT of this number daten[4] = 0; // left daten[5] = 255; // right daten[6] = 0; // sqrt daten[7] = 0; // cmp daten[8] = 0; // quadrat daten[9] = 0; // middle // ***************************************** // SQRT // ***************************************** // check if left <= right daten[10] = 0x1800; // LDAM daten[11] = 4; // left daten[12] = 0x2800; // STAM daten[13] = 29; // copy a to add left + reight daten[14] = 0x3540; //NOT daten[15] = 0; daten[16] = 0x3440; //ADD daten[17] = 0x0001; daten[18] = 0x2800; // STAM daten[19] = 23; // copy a to add daten[20] = 0x1800; // LDAM daten[21] = 5; // right daten[22] = 0x3440; //ADD daten[23] = 0x0000; daten[24] = 0x4010; // BN daten[25] = 102; // finished // Calculate middle daten[26] = 0x1800; // LDAM daten[27] = 5; // left daten[28] = 0x3440; //ADD daten[29] = 0x0000; daten[30] = 0x3580; // SHR daten[31] = 0; // (left+right)>>1 daten[32] = 0x2800; // STAM daten[33] = 9; // store middle // Calculate quadrat daten[34] = 0x2800; // STAM daten[35] = 200; // store in multiply parameter 1 daten[36] = 0x2800; // STAM daten[37] = 201; // store in multiply parameter 2 daten[38] = 0x1400; // LDA daten[39] = 0; // 0 into Accu daten[40] = 0x2800; // STAM daten[41] = 202; // store 0 in Multiply result daten[42] = 0x5000; // CALL daten[43] = 203; // MUL daten[44] = 0x2800; // STAM daten[45] = 8; // store quadrat // -------------- Now check quadrat > n , quadrat == n or quadrat <= n ------- daten[46] = 0x1800; // LDAM n daten[47] = 3; // b bei daten[101] daten[48] = 0x3540; // NOT A ; A = ~b daten[49] = 0; daten[50] = 0x2800; // STAM 9 ; daten[9] = ~b daten[51] = 57; daten[52] = 0x1800; // LDAM a ; A = a daten[53] = 8; // a bei daten[100] daten[54] = 0x3440; // ADD 1 ; A = a – b daten[55] = 1; daten[56] = 0x3440; // ADD [n] ; A = a + (~b) daten[57] = 1; // wird von STAM(9) mit ~b ersetzt daten[58] = 0x4018; // BZ → 300 ; if A==0 ⇒ a==b daten[59] = 76; daten[60] = 0x4008; // BC → 100 ; if Carry ⇒ a>b daten[61] = 82; daten[62] = 0x4000; // BA → 200 ; else a quadrat daten[74] = 0x4000; //BA daten[75] = 82; // quadrat > n // ------------------------------------------------------------------------- // quadrat == n daten[76] = 0x1800; // LDAM daten[77] = 9; // middle daten[78] = 0x2800; // STAM daten[79] = 6; // sqrt daten[80] = 0x4000; //BA daten[81] = 102; // Finished // quadrat > n daten[82] = 0x1800; // LDAM daten[83] = 9; // middle daten[84] = 0x4018; // BZ daten[85] = 102; // Finished daten[86] = 0x3440; //ADD daten[87] = 0xFFFF; // -1 daten[88] = 0x2800; // STAM daten[89] = 5; // right daten[90] = 0x4000; //BA daten[91] = 10; // start of loop // quadrat < n daten[92] = 0x1800; // LDAM daten[93] = 9; // middle daten[94] = 0x2800; // STAM daten[95] = 6; // sqrt daten[96] = 0x3440; //ADD daten[97] = 0x0001; daten[98] = 0x2800; // STAM daten[99] = 4; // left daten[100] = 0x4000; //BA daten[101] = 10; // start of loop daten[102] = 0x1800; // LDAM daten[103] = 6; // sqrt // HALT // ***************************************** // MUL: Parameter // ***************************************** daten[200] = 23; // a daten[201] = 14; // b daten[202] = 0; // result // ***************************************** // MUL // ***************************************** daten[203] = 0x1800; // LDAM daten[204] = 201; // b daten[205] = 0x4018; // BZ daten[206] = 233; // return result daten[207] = 0x4020; //BE daten[208] = 219; // b is even, b & 1 == 0 daten[209] = 0x1800; // LDAM daten[210] = 200; // a daten[211] = 0x2800; // STAM daten[212] = 216; // copy a to add daten[213] = 0x1800; // LDAM daten[214] = 202; // result daten[215] = 0x3440; //ADD daten[216] = 0; // a daten[217] = 0x2800; // STAM daten[218] = 202; // result daten[219] = 0x1800; // LDAM daten[220] = 200; // a daten[221] = 0x35C0; // SHL daten[222] = 0x0000; daten[223] = 0x2800; // STAM daten[224] = 200; // result daten[225] = 0x1800; // LDAM daten[226] = 201; // a daten[227] = 0x3580; // SHL daten[228] = 0x0000; daten[229] = 0x2800; // STAM daten[230] = 201; // result daten[231] = 0x4000; //BA daten[232] = 203; // Loop daten[233] = 0x1800; // LDAM daten[234] = 202; // result daten[235] = 0x6000; // RETURN