Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
manual:chapter5:asm [2019/12/04 15:29] claudio [Instruction set and syntax] |
manual:chapter5:asm [2019/12/05 14:03] (current) jojo1973 [Simple assignments with operators] Added a particular syntax regarding register R |
||
---|---|---|---|
Line 39: | Line 39: | ||
| ::: | ::: | ''ATAN'' | ::: | ::: | ''CLR'' | | | ::: | ::: | ''ATAN'' | ::: | ::: | ''CLR'' | | ||
| ::: | ::: | ''SINH'' | ::: | ::: | | | | ::: | ::: | ''SINH'' | ::: | ::: | | | ||
- | | ::: | ::: | ''COSH'' | ::: | ::: | ::: | | + | | ::: | ::: | ''COSH'' | ::: | ::: | | |
| ::: | ::: | ''TANH'' | ::: | ::: | ::: | | | ::: | ::: | ''TANH'' | ::: | ::: | ::: | | ||
| ::: | ::: | ''ASINH'' | ::: | ::: | ::: | | | ::: | ::: | ''ASINH'' | ::: | ::: | ::: | | ||
Line 73: | Line 73: | ||
| '':A=S2'' '':S2=S1'' '':S1=A'' | Swap stack level 1 with level 2 using register ''A'' as temporary storage. An error is raised if the stack contains less than 2 levels | | | '':A=S2'' '':S2=S1'' '':S1=A'' | Swap stack level 1 with level 2 using register ''A'' as temporary storage. An error is raised if the stack contains less than 2 levels | | ||
| '':C+=B^#2'' | Square the value register ''B'' and adds the result to register ''C'' | | | '':C+=B^#2'' | Square the value register ''B'' and adds the result to register ''C'' | | ||
+ | | '':B=R^#2 π'' | Assign ''%%'%%π^2%%'%%'' to register B. This example shows that register ''R'' must not necessarily be the second argument of a binary operator | | ||
==== Assignment with math functions ==== | ==== Assignment with math functions ==== | ||
Line 99: | Line 100: | ||
| ''AL'' | Always | --- | --- | | | ''AL'' | Always | --- | --- | | ||
| ''LT'' | Less Than | --- | Set | | | ''LT'' | Less Than | --- | Set | | ||
- | | ''EQ'' | Equals | Set | --- | | + | | ''EQ'' or ''Z'' | Equals | Set | --- | |
| ''LE'' | Less Than or Equals | --- | Set | | | ''LE'' | Less Than or Equals | --- | Set | | ||
| ::: | ::: | Set | --- | | | ::: | ::: | Set | --- | | ||
| ''NA'' | Never | --- | --- | | | ''NA'' | Never | --- | --- | | ||
| ''GE'' | Greater Than or Equals | --- | Clear | | | ''GE'' | Greater Than or Equals | --- | Clear | | ||
- | | ''NE'' | Not Equals | Clear | --- | | + | | ''NE'' or ''NZ'' | Not Equals | Clear | --- | |
| ''GT'' | Greater Than | Clear | Clear | | | ''GT'' | Greater Than | Clear | Clear | | ||
Line 133: | Line 134: | ||
| '':PUSH.A.#3'' | Reverse of '':POP''. In this example will do '':P=C'', '':P=B'' and '':P=A'' | | | '':PUSH.A.#3'' | Reverse of '':POP''. In this example will do '':P=C'', '':P=B'' and '':P=A'' | | ||
| '':RPUSH.A.#3'' | Reverse of '':RPOP''. In this example will do '':P=A'', '':P=B'', and '':P=C'' | | | '':RPUSH.A.#3'' | Reverse of '':RPOP''. In this example will do '':P=A'', '':P=B'', and '':P=C'' | | ||
+ | | '':CLR.A.#3'' | Set registers to zero (clear) starting with ''A'', and as many registers as requested. In this example will do '':A=0'', '':B=0'' and '':C=0'' | | ||
==== Example code ==== | ==== Example code ==== | ||
Line 146: | Line 148: | ||
-103 SF @ Complex results | -103 SF @ Complex results | ||
:A=RPOP.S1.#3 @ Store coefficients in registers | :A=RPOP.S1.#3 @ Store coefficients in registers | ||
- | :CMP.A.#0 :D=CHK.EQ @ a=0? | + | :AND.A.C @ Are either zero? |
- | :CMP.C.#0 :E=CHK.EQ @ c=0? | + | :SKIP.NZ @ Skip next seco if both A and C were non-zero |
- | :OR.D.E @ Are either zero? | + | |
- | :SKIP.EQ @ Skip next seco if both tests were false | + | |
:: "Zero Input Invalid" | :: "Zero Input Invalid" | ||
DOERR @ Abort with error | DOERR @ Abort with error |