# Treatments from [/home/crudel/Dev/U2I-Serial/FileCommands-NPI.txt]... # Set termio parameters... # Send '?' character for 'autobaud'... U2I 1.78 0x800000 0 0x64-0> write 0x0000 NOP # Mise en oeuvre des 2 instructions LEFT (parenthese gauche) et RIGHT (parenthese droite) # Principe: # - LEFT sauvegarde le reg[A] courant, alloue le 1st registre temporaire anonyme parmi # les 8 et affecte a ce registre temporaire la valeur de reg[A] # Remarque: Ce registre temporaire est vu comme reg[A] # - RIGHT restaure les precedentes valeurs suivant: # - Copie la valeur de reg[A] (le registre temporaire courant) dans reg[0] # - Si ce RIGHT est au meme niveau que le 1st LEFT, le reg[A] selectionne # est celui a la valeur d'avant le 1st LEFT # - Utilise avec l'instruction LEFT, RIGHT permet de travailler sur un registre # temporaire vu comme reg[A] et ce, dans la limite de 8 et de changer l'ordre # d'un calcul en minimisant le nombre de registres temporaires explicites # - Les parentheses peuvent etre imbriquees jusqu'a 8 niveaux # - Si aucune parenthese gauche ne correspond a la parenthese droite dans le # cas par exemple ou 3 RIGHT sont executes apres seulement 2 LEFT, le reg[0] # retourne au 3ieme RIGHT est affecte a la valeur NaN (0x7FFFFFFF en hexa # sur 32 bits) # 1st exemple: N = M * N # ---------------------- # Definitions --------------- #define M_Value "142857" # Valeur de M #define N_Value "7" # Valeur de N #define M 10 # reg[10]: M #define N 11 # reg[11]: N #define T 12 # reg[12]: T #define Result 20 # reg[20]: Resultat de l'operation #define FORMAT_0_0 0 # Formatage au mieux #define FORMAT FORMAT_0_0 # Fin des definitions ------- # Debut du programme -------- # Initialisation 0x64-1> write 0x009a31343238353700 ATOL,M_Value # Valeur de M dans reg[0] 0x64-2> write 0x00a5 LSET0 # reg[A] = reg[0] 0x64-3> write 0x009b00 LTOA,FORMAT # Formatage 0x64-4> write 0x00f2 READSTR # Affichage 0x64-5> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "142857" 0x64-6> write 0x00080a COPYA,M # Copy dans M 0x64-7> write 0x009a3700 ATOL,N_Value # Valeur de N dans reg[0] 0x64-8> write 0x00a5 LSET0 # reg[A] = reg[0] 0x64-9> write 0x009b00 LTOA,FORMAT # Formatage 0x64-10> write 0x00f2 READSTR # Affichage 0x64-11> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "7" 0x64-12> write 0x00080b COPYA,N # Copy dans N # Execution de N = M * N 0x64-13> write 0x0014 LEFT # Selection de temp1 vu comme reg[A] qui "pointe" sur N 0x64-14> write 0x009c0a LSET,M # temp1 = M 0x64-15> write 0x009f0b LMUL,N # temp1 = temp1 * N 0x64-16> write 0x0015 RIGHT # reg[0] = temp1 et restaure N vu comme reg[A] car dernier RIGHT # Fin: Execution de N = M * N # Resultat dans reg[0] 0x64-17> write 0x00a5 LSET0 # reg[A] = reg[0] 0x64-18> write 0x009b00 LTOA,FORMAT # Formatage 0x64-19> write 0x00f2 READSTR # Affichage 0x64-20> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "999999" 0x64-21> write 0x000814 COPYA,Result # Valeurs de N et M inchangees 0x64-22> write 0x009c0b LSET,N # reg[A] = N 0x64-23> write 0x009b00 LTOA,FORMAT # Formatage 0x64-24> write 0x00f2 READSTR # Affichage 0x64-25> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "7" 0x64-26> write 0x009c0a LSET,M # reg[A] = M 0x64-27> write 0x009b00 LTOA,FORMAT # Formatage 0x64-28> write 0x00f2 READSTR # Affichage 0x64-29> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "142857" 0x64-30> write 0x0000 NOP # 2nd exemple: TF = MF / (NF + TF) en flottant # -------------------------------------------- # Definitions --------------- #define MF_Value "4567" # Valeur de MF #define NF_Value "124" # Valeur de NF #define TF_Value "876" # Valeur de TF # Fin des definitions ------- 0x64-31> write 0x001e3435363700 ATOF,MF_Value # Valeur de MF dans reg[0] 0x64-32> write 0x0029 FSET0 # reg[A] = MF 0x64-33> write 0x001f00 FTOA,FORMAT # Formatage 0x64-34> write 0x00f2 READSTR # Affichage 0x64-35> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "4567.0" 0x64-36> write 0x00080a COPYA,M # Copy dans M 0x64-37> write 0x001e31323400 ATOF,NF_Value # Valeur de NF dans reg[0] 0x64-38> write 0x0029 FSET0 # reg[A] = NF 0x64-39> write 0x001f00 FTOA,FORMAT # Formatage 0x64-40> write 0x00f2 READSTR # Affichage 0x64-41> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "124.0" 0x64-42> write 0x00080b COPYA,N # Copy dans N 0x64-43> write 0x001e38373600 ATOF,TF_Value # Valeur de TF dans reg[0] 0x64-44> write 0x0029 FSET0 # reg[A] = TF 0x64-45> write 0x001f00 FTOA,FORMAT # Formatage 0x64-46> write 0x00f2 READSTR # Affichage 0x64-47> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "876.0" 0x64-48> write 0x00080c COPYA,T # Copy dans T # Execution de T = M / (N + T) 0x64-49> write 0x0014 LEFT # temp1 vu comme reg[A] qui "pointe" sur T 0x64-50> write 0x00200a FSET,M # temp1 = reg[A] = M 0x64-51> write 0x0014 LEFT # temp2 vu comme reg[A] 0x64-52> write 0x00200b FSET,N # temp2 = reg[A] = N 0x64-53> write 0x00210c FADD,T # temp2 = reg[A] + T = N + T 0x64-54> write 0x0015 RIGHT # reg[0] = temp2 et restaure temp1 vu comme reg[A] 0x64-55> write 0x002e FDIV0 # temp1 = reg[A] = temp1 / reg[0] = temp1 / temp2 = M / (N + T) 0x64-56> write 0x0015 RIGHT # reg[0] = temp1 et restaure T vu comme reg[A] car dernier RIGHT # Fin: Execution de T = M / (N + T) # Resultat dans reg[0] 0x64-57> write 0x0029 FSET0 0x64-58> write 0x001f35 FTOA,53 # Formatage 0x64-59> write 0x00f2 READSTR # Affichage 0x64-60> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "4.567" 0x64-61> write 0x0000 NOP # Valeurs de N, M et T inchangees 0x64-62> write 0x00200b FSET,N # reg[A] = N 0x64-63> write 0x001f00 FTOA,FORMAT # Formatage 0x64-64> write 0x00f2 READSTR # Affichage 0x64-65> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "124.0" 0x64-66> write 0x00200a FSET,M # reg[A] = M 0x64-67> write 0x001f00 FTOA,FORMAT # Formatage 0x64-68> write 0x00f2 READSTR # Affichage 0x64-69> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "4567.0" 0x64-70> write 0x00200c FSET,T # reg[A] = T 0x64-71> write 0x001f00 FTOA,FORMAT # Formatage 0x64-72> write 0x00f2 READSTR # Affichage 0x64-73> reada # Lecture 'string buffer' en ASCII jusqu'au '\0' "876.0" 0x64-74> write 0x0000 NOP # Fin du programme ---------- 0x64-75> # End of program (successful ;-)