added language and bytecode definition
This commit is contained in:
parent
5b863d6174
commit
a5576332ae
244
assembler/bytecode.pdf
Normal file
244
assembler/bytecode.pdf
Normal file
|
@ -0,0 +1,244 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<< /F1 2 0 R /F2 3 0 R /F3 10 0 R >>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<< /BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font >>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<< /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font >>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /XYZ 62.69291 636.0236 0 ] /Rect [ 62.69291 687.0236 178.2829 699.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /XYZ 62.69291 636.0236 0 ] /Rect [ 527.0227 687.7736 532.5827 699.7736 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /XYZ 62.69291 525.0236 0 ] /Rect [ 62.69291 669.0236 197.7229 681.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /XYZ 62.69291 525.0236 0 ] /Rect [ 527.0227 669.7736 532.5827 681.7736 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /XYZ 62.69291 414.0236 0 ] /Rect [ 62.69291 651.0236 213.8229 663.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /XYZ 62.69291 414.0236 0 ] /Rect [ 527.0227 651.7736 532.5827 663.7736 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<< /BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font >>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /XYZ 62.69291 528.5236 0 ] /Rect [ 515.3527 333.0236 532.1177 345.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /XYZ 62.69291 528.5236 0 ] /Rect [ 62.69291 321.0236 168.2829 333.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<< /Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 11 0 R 12 0 R ] /Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 20 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0
|
||||||
|
/Trans << >> /Type /Page >>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<< /Outlines 16 0 R /PageLabels 22 0 R /PageMode /UseNone /Pages 20 0 R /Type /Catalog >>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<< /Author () /CreationDate (D:20181006214730+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20181006214730+00'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (BCI Bytecode) /Trapped /False >>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<< /Count 3 /First 17 0 R /Last 19 0 R /Type /Outlines >>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<< /Dest [ 13 0 R /XYZ 62.69291 636.0236 0 ] /Next 18 0 R /Parent 16 0 R /Title (Assembly and Bytecode) >>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<< /Dest [ 13 0 R /XYZ 62.69291 525.0236 0 ] /Next 19 0 R /Parent 16 0 R /Prev 17 0 R /Title (The Dynamic Instruction Set) >>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<< /Dest [ 13 0 R /XYZ 62.69291 414.0236 0 ] /Parent 16 0 R /Prev 18 0 R /Title (Byte Code Interpreter Definition) >>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<< /Count 1 /Kids [ 13 0 R ] /Type /Pages >>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<< /Length 3790 >>
|
||||||
|
stream
|
||||||
|
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 741.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 4 Tm /F2 20 Tf 24 TL 169.9349 0 Td (BCI Bytecode) Tj T* -169.9349 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 708.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Contents) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 648.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
q
|
||||||
|
1 0 0 1 0 39 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (Assembly and Bytecode) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 397.8898 39 cm
|
||||||
|
q
|
||||||
|
0 0 .501961 rg
|
||||||
|
0 0 .501961 RG
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (1) Tj T* -66.44 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 21 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (The Dynamic Instruction Set) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 397.8898 21 cm
|
||||||
|
q
|
||||||
|
0 0 .501961 rg
|
||||||
|
0 0 .501961 RG
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (1) Tj T* -66.44 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 3 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (Byte Code Interpreter Definition) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 397.8898 3 cm
|
||||||
|
q
|
||||||
|
0 0 .501961 rg
|
||||||
|
0 0 .501961 RG
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (1) Tj T* -66.44 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 615.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Assembly and Bytecode) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 585.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 14 Tm 3.309982 Tw 12 TL /F1 10 Tf 0 0 0 rg (Unlike machine code \(and other bytecode\) BCI bytecode has dynamic opcodes. This means that) Tj T* 0 Tw (bytecode is ) Tj /F2 10 Tf (not ) Tj /F1 10 Tf (necessarily portable.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 567.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (This makes sense since the BCI instruction set can be extended for applications.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 537.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .742619 Tw (If one wants to share code that should run on any BCI it should be shared as assembly. The assembler) Tj T* 0 Tw (will then use the local interpreter definition and generate suiting bytecode.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 504.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (The Dynamic Instruction Set) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 474.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.093876 Tw (The BCI comes with a set of prepared instructions. These are complete and provide a way to do basic) Tj T* 0 Tw (operations like routines, loops and branching.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 444.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 14 Tm .743672 Tw 12 TL /F1 10 Tf 0 0 0 rg (The methods are organized in a binary tree internally. To build the tree in a comfortable way there is an) Tj T* 0 Tw (autoinserter that can insert up to ) Tj /F3 10 Tf 0 0 0 rg (1023 ) Tj /F1 10 Tf 0 0 0 rg (methods into the tree.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 426.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (The autoinserter creates the opcode basing on the order of the method that he inserts.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 393.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Byte Code Interpreter Definition) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 351.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 1.843555 Tw (A Bytecode Interpreter Definition consists of two mayor parts: The memory definition that defines the) Tj T* 0 Tw 1.896098 Tw (number of data registers \(up to 63\), the number of memory words \(up to 65535\) and the number of) Tj T* 0 Tw (program memory words \(up to 65535\).) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 321.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 14 Tm .464985 Tw 12 TL /F1 10 Tf 0 0 0 rg (The second part defines the commands. The definition contains bot the order of the commands \(see ) Tj 0 0 .501961 rg (The) Tj T* 0 Tw (Dynamic Instruction Set) Tj 0 0 0 rg (\) and the required arguments.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<< /Nums [ 0 23 0 R ] >>
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<< /S /D /St 1 >>
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 24
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000075 00000 n
|
||||||
|
0000000130 00000 n
|
||||||
|
0000000240 00000 n
|
||||||
|
0000000355 00000 n
|
||||||
|
0000000526 00000 n
|
||||||
|
0000000697 00000 n
|
||||||
|
0000000868 00000 n
|
||||||
|
0000001039 00000 n
|
||||||
|
0000001210 00000 n
|
||||||
|
0000001381 00000 n
|
||||||
|
0000001490 00000 n
|
||||||
|
0000001662 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002106 00000 n
|
||||||
|
0000002215 00000 n
|
||||||
|
0000002489 00000 n
|
||||||
|
0000002566 00000 n
|
||||||
|
0000002692 00000 n
|
||||||
|
0000002837 00000 n
|
||||||
|
0000002974 00000 n
|
||||||
|
0000003038 00000 n
|
||||||
|
0000006885 00000 n
|
||||||
|
0000006929 00000 n
|
||||||
|
trailer
|
||||||
|
<< /ID
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
[(\003\236V\37247z\240'\2312!\276\204\362\214) (\003\236V\37247z\240'\2312!\276\204\362\214)]
|
||||||
|
/Info 15 0 R /Root 14 0 R /Size 24 >>
|
||||||
|
startxref
|
||||||
|
6966
|
||||||
|
%%EOF
|
46
assembler/bytecode.rst
Normal file
46
assembler/bytecode.rst
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
BCI Bytecode
|
||||||
|
*************
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
|
||||||
|
Assembly and Bytecode
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Unlike machine code (and other bytecode) BCI bytecode has
|
||||||
|
dynamic opcodes. This means that bytecode is **not**
|
||||||
|
necessarily portable.
|
||||||
|
|
||||||
|
This makes sense since the BCI instruction set can be
|
||||||
|
extended for applications.
|
||||||
|
|
||||||
|
If one wants to share code that should run on any BCI it
|
||||||
|
should be shared as assembly. The assembler will then use
|
||||||
|
the local interpreter definition and generate suiting
|
||||||
|
bytecode.
|
||||||
|
|
||||||
|
The Dynamic Instruction Set
|
||||||
|
===========================
|
||||||
|
|
||||||
|
The BCI comes with a set of prepared instructions. These are
|
||||||
|
complete and provide a way to do basic operations like
|
||||||
|
routines, loops and branching.
|
||||||
|
|
||||||
|
The methods are organized in a binary tree internally. To
|
||||||
|
build the tree in a comfortable way there is an autoinserter
|
||||||
|
that can insert up to ``1023`` methods into the tree.
|
||||||
|
|
||||||
|
The autoinserter creates the opcode basing on the order of
|
||||||
|
the method that he inserts.
|
||||||
|
|
||||||
|
Byte Code Interpreter Definition
|
||||||
|
================================
|
||||||
|
|
||||||
|
A Bytecode Interpreter Definition consists of two mayor
|
||||||
|
parts: The memory definition that defines the number of data
|
||||||
|
registers (up to 63), the number of memory words (up to
|
||||||
|
65535) and the number of program memory words (up to 65535).
|
||||||
|
|
||||||
|
The second part defines the commands. The definition
|
||||||
|
contains bot the order of the commands (see `The Dynamic
|
||||||
|
Instruction Set`_) and the required arguments.
|
||||||
|
|
881
assembler/language.pdf
Normal file
881
assembler/language.pdf
Normal file
|
@ -0,0 +1,881 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<< /F1 2 0 R /F2 3 0 R /F3 14 0 R >>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<< /BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font >>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<< /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font >>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /XYZ 62.69291 600.0236 0 ] /Rect [ 62.69291 687.0236 299.9529 699.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /XYZ 62.69291 600.0236 0 ] /Rect [ 527.0227 687.7736 532.5827 699.7736 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /XYZ 62.69291 224.2236 0 ] /Rect [ 62.69291 669.0236 154.3629 681.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /XYZ 62.69291 224.2236 0 ] /Rect [ 527.0227 669.7736 532.5827 681.7736 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 16 0 R /XYZ 62.69291 380.0236 0 ] /Rect [ 62.69291 651.0236 114.3629 663.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 16 0 R /XYZ 62.69291 380.0236 0 ] /Rect [ 527.0227 651.7736 532.5827 663.7736 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 16 0 R /XYZ 62.69291 329.0236 0 ] /Rect [ 62.69291 633.0236 91.59291 645.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 16 0 R /XYZ 62.69291 329.0236 0 ] /Rect [ 527.0227 633.7736 532.5827 645.7736 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /XYZ 62.69291 765.0236 0 ] /Rect [ 62.69291 615.0236 118.2529 627.0236 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /XYZ 62.69291 765.0236 0 ] /Rect [ 527.0227 615.7736 532.5827 627.7736 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<< /BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font >>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<< /Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R ] /Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 27 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0
|
||||||
|
/Trans << >> /Type /Page >>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<< /Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 27 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << >>
|
||||||
|
/Type /Page >>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<< /Border [ 0 0 0 ] /Contents () /Dest [ 16 0 R /XYZ 62.69291 332.5236 0 ] /Rect [ 62.69291 680.7736 91.59291 692.7736 ] /Subtype /Link /Type /Annot >>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<< /Annots [ 17 0 R ] /Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 27 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0
|
||||||
|
/Trans << >> /Type /Page >>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<< /Outlines 21 0 R /PageLabels 31 0 R /PageMode /UseNone /Pages 27 0 R /Type /Catalog >>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<< /Author () /CreationDate (D:20181006214702+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20181006214702+00'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (BCI Assembly Language) /Trapped /False >>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<< /Count 5 /First 22 0 R /Last 26 0 R /Type /Outlines >>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<< /Dest [ 15 0 R /XYZ 62.69291 600.0236 0 ] /Next 23 0 R /Parent 21 0 R /Title (Commands, Small Arguments and Big Arguments) >>
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<< /Dest [ 15 0 R /XYZ 62.69291 224.2236 0 ] /Next 24 0 R /Parent 21 0 R /Prev 22 0 R /Title (Built-In Commands) >>
|
||||||
|
endobj
|
||||||
|
24 0 obj
|
||||||
|
<< /Dest [ 16 0 R /XYZ 62.69291 380.0236 0 ] /Next 25 0 R /Parent 21 0 R /Prev 23 0 R /Title (Comments) >>
|
||||||
|
endobj
|
||||||
|
25 0 obj
|
||||||
|
<< /Dest [ 16 0 R /XYZ 62.69291 329.0236 0 ] /Next 26 0 R /Parent 21 0 R /Prev 24 0 R /Title (Marks) >>
|
||||||
|
endobj
|
||||||
|
26 0 obj
|
||||||
|
<< /Dest [ 18 0 R /XYZ 62.69291 765.0236 0 ] /Parent 21 0 R /Prev 25 0 R /Title (Direct Input) >>
|
||||||
|
endobj
|
||||||
|
27 0 obj
|
||||||
|
<< /Count 3 /Kids [ 15 0 R 16 0 R 18 0 R ] /Type /Pages >>
|
||||||
|
endobj
|
||||||
|
28 0 obj
|
||||||
|
<< /Length 6815 >>
|
||||||
|
stream
|
||||||
|
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 741.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 4 Tm /F2 20 Tf 24 TL 117.6949 0 Td (BCI Assembly Language) Tj T* -117.6949 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 708.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Contents) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 612.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
q
|
||||||
|
1 0 0 1 0 75 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (Commands, Small Arguments and Big Arguments) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 397.8898 75 cm
|
||||||
|
q
|
||||||
|
0 0 .501961 rg
|
||||||
|
0 0 .501961 RG
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (1) Tj T* -66.44 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 57 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (Built-In Commands) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 397.8898 57 cm
|
||||||
|
q
|
||||||
|
0 0 .501961 rg
|
||||||
|
0 0 .501961 RG
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (1) Tj T* -66.44 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 39 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (Comments) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 397.8898 39 cm
|
||||||
|
q
|
||||||
|
0 0 .501961 rg
|
||||||
|
0 0 .501961 RG
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (2) Tj T* -66.44 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 21 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (Marks) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 397.8898 21 cm
|
||||||
|
q
|
||||||
|
0 0 .501961 rg
|
||||||
|
0 0 .501961 RG
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (2) Tj T* -66.44 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 3 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (Direct Input) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 397.8898 3 cm
|
||||||
|
q
|
||||||
|
0 0 .501961 rg
|
||||||
|
0 0 .501961 RG
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 579.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Commands, Small Arguments and Big Arguments) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 549.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 14 Tm .87311 Tw 12 TL /F1 10 Tf 0 0 0 rg (A command in BCI Assembly is a word starting with an alphabetic character \() Tj /F3 10 Tf 0 0 0 rg (a..zA..Z) Tj /F1 10 Tf 0 0 0 rg (\) following by a) Tj T* 0 Tw (sequence of alphanumeric characters \() Tj /F3 10 Tf 0 0 0 rg (a..zA..Z0..9) Tj /F1 10 Tf 0 0 0 rg (\). This word will be converted to a 10bit opcode.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 519.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.147882 Tw (Embedded in the 16bits of a word there is also a 6bit small argument. If a command has no small) Tj T* 0 Tw (argument these bits will be zeroed. In the assembly the command will be only one word, for example:) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 485.8236 cm
|
||||||
|
q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 0 cm
|
||||||
|
q
|
||||||
|
1 0 0 1 6.6 6.6 cm
|
||||||
|
q
|
||||||
|
.662745 .662745 .662745 RG
|
||||||
|
.5 w
|
||||||
|
.960784 .960784 .862745 rg
|
||||||
|
n -6 -6 468.6898 24 re B*
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (cli) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 453.8236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .345988 Tw (If the command has a small argument, the 6 bit will be filled with the small argument. In the assembly the) Tj T* 0 Tw (small argument is separated by one whitespace, for example:) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 420.6236 cm
|
||||||
|
q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 0 cm
|
||||||
|
q
|
||||||
|
1 0 0 1 6.6 6.6 cm
|
||||||
|
q
|
||||||
|
.662745 .662745 .662745 RG
|
||||||
|
.5 w
|
||||||
|
.960784 .960784 .862745 rg
|
||||||
|
n -6 -6 468.6898 24 re B*
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (inc r0) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 376.6236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 26 Tm .629431 Tw 12 TL /F1 10 Tf 0 0 0 rg (Any other arguments are stored in further words and have thus a width of 16bits. They are separated by) Tj T* 0 Tw 2.211751 Tw (commas \() Tj /F3 10 Tf 0 0 0 rg (,) Tj /F1 10 Tf 0 0 0 rg (\) from both the first and any other arguments. It is recommended to only add one more) Tj T* 0 Tw (argument.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 358.6236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Example for one big argument:) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 325.4236 cm
|
||||||
|
q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 0 cm
|
||||||
|
q
|
||||||
|
1 0 0 1 6.6 6.6 cm
|
||||||
|
q
|
||||||
|
.662745 .662745 .662745 RG
|
||||||
|
.5 w
|
||||||
|
.960784 .960784 .862745 rg
|
||||||
|
n -6 -6 468.6898 24 re B*
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (ldi r0, 0xdead) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 293.4236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.571318 Tw (It might be useful to have more arguments for other applications, like double precision floating points.) Tj T* 0 Tw (Example \(not implemented\):) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 236.2236 cm
|
||||||
|
q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 0 cm
|
||||||
|
q
|
||||||
|
1 0 0 1 6.6 6.6 cm
|
||||||
|
q
|
||||||
|
.662745 .662745 .662745 RG
|
||||||
|
.5 w
|
||||||
|
.960784 .960784 .862745 rg
|
||||||
|
n -6 -6 468.6898 48 re B*
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 26 Tm /F3 10 Tf 12 TL (lddfi r0, 0xdead, 0xbeef) Tj T* (; load double precision floating point) Tj T* (; to r0 and r1) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 203.2236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Built-In Commands) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 185.2236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (ldi) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj (,) Tj ( ) Tj (<) Tj (ba) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 170.2236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Load the value ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (ba) Tj (> ) Tj /F1 10 Tf 0 0 0 rg (into register ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (>) Tj /F1 10 Tf 0 0 0 rg (.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 154.2236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (ld) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj (,) Tj ( ) Tj (<) Tj (ba) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 139.2236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Load the value of the memory cell at ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (ba) Tj (> ) Tj /F1 10 Tf 0 0 0 rg (into register ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (>) Tj /F1 10 Tf 0 0 0 rg (.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 123.2236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (st) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj (,) Tj ( ) Tj (<) Tj (ba) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 108.2236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Store the value of register ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (> ) Tj /F1 10 Tf 0 0 0 rg (into the memory cell at ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (ba) Tj (>) Tj /F1 10 Tf 0 0 0 rg (.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 92.22362 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (inc) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 77.22362 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Increment the value of register ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (>) Tj /F1 10 Tf 0 0 0 rg (.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
29 0 obj
|
||||||
|
<< /Length 7261 >>
|
||||||
|
stream
|
||||||
|
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 753.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (dec) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 738.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Decrement the value of register ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (>) Tj /F1 10 Tf 0 0 0 rg (.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 722.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (add|sub|mul|div) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj (,) Tj ( ) Tj (<) Tj (ba) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 695.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 14 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 14 Tm 1.127318 Tw 12 TL /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (>) Tj ( ) Tj (=) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj ( ) Tj (+|-|*|/) Tj ( ) Tj (<) Tj (ba) Tj (> ) Tj /F1 10 Tf 0 0 0 rg (where ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (> ) Tj /F1 10 Tf 0 0 0 rg (and ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (ba) Tj (> ) Tj /F1 10 Tf 0 0 0 rg (are registers. Write the overflow into the) Tj T* 0 Tw (status register.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 679.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (gt|ge|lt|le|eq) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 652.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 14 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 14 Tm 2.431098 Tw 12 TL /F1 10 Tf 0 0 0 rg (Check if the value of register ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (> ) Tj /F1 10 Tf 0 0 0 rg (is ) Tj /F3 10 Tf 0 0 0 rg (>) Tj (|) Tj (>) Tj (=|) Tj (<) Tj (|) Tj (<) Tj (=|== ) Tj /F1 10 Tf 0 0 0 rg (to ) Tj /F3 10 Tf 0 0 0 rg (0) Tj /F1 10 Tf 0 0 0 rg (. Set the status register to ) Tj /F3 10 Tf 0 0 0 rg (1 ) Tj /F1 10 Tf 0 0 0 rg (if it) Tj T* 0 Tw (evaluates true, else to ) Tj /F3 10 Tf 0 0 0 rg (0) Tj /F1 10 Tf 0 0 0 rg (.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 636.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (not) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 621.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (If the status register is ) Tj /F3 10 Tf 0 0 0 rg (0 ) Tj /F1 10 Tf 0 0 0 rg (set it to ) Tj /F3 10 Tf 0 0 0 rg (1) Tj /F1 10 Tf 0 0 0 rg (, else set it to ) Tj /F3 10 Tf 0 0 0 rg (0) Tj /F1 10 Tf 0 0 0 rg (.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 605.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (jmp) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 590.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Set the program counter to the value of register ) Tj /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (>) Tj /F1 10 Tf 0 0 0 rg (.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 574.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (call) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 547.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 14 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 14 Tm .797633 Tw 12 TL /F1 10 Tf 0 0 0 rg (Push the current program counter on the stack and set the program counter to the value of register) Tj T* 0 Tw /F3 10 Tf 0 0 0 rg (<) Tj (sa) Tj (>) Tj /F1 10 Tf 0 0 0 rg (.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 531.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (ret) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 516.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Pop the previously pushed program counter from the stack.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 500.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (stop) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 485.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Write ) Tj /F3 10 Tf 0 0 0 rg (1 ) Tj /F1 10 Tf 0 0 0 rg (into the shutdown register. This will cause the interpreter to halt.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 469.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL (cl) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 454.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Write ) Tj /F3 10 Tf 0 0 0 rg (0 ) Tj /F1 10 Tf 0 0 0 rg (into the status register.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 438.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (cjmp) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 423.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (If there not a ) Tj /F3 10 Tf 0 0 0 rg (0 ) Tj /F1 10 Tf 0 0 0 rg (in the status register, ) Tj /F3 10 Tf 0 0 0 rg (jmp <) Tj (sa) Tj (>) Tj /F1 10 Tf 0 0 0 rg (, else continue execution.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 407.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F3 10 Tf 0 0 0 rg (ccall) Tj ( ) Tj (<) Tj (sa) Tj (>) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 392.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Like ) Tj /F3 10 Tf 0 0 0 rg (cjmp) Tj ( ) Tj (<) Tj (sa) Tj (> ) Tj /F1 10 Tf 0 0 0 rg (but with ) Tj /F3 10 Tf 0 0 0 rg (call ) Tj /F1 10 Tf 0 0 0 rg (instead.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 359.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Comments) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 341.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Comments start with a ) Tj /F3 10 Tf 0 0 0 rg (; ) Tj /F1 10 Tf 0 0 0 rg (at the beginning of the line and end at the end of the line.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 308.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Marks) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 278.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .467485 Tw (Marks represent a special location of the assembly code. The assembler keeps track of those marks and) Tj T* 0 Tw (they can be used as immediate input.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 236.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 26 Tm 2.869983 Tw 12 TL /F1 10 Tf 0 0 0 rg (A mark is defined by a single word, starting with an alphabetic character \() Tj /F3 10 Tf 0 0 0 rg (a..zA...Z) Tj /F1 10 Tf 0 0 0 rg (\) containing) Tj T* 0 Tw 2.330814 Tw (alphanumeric characters and underscores \() Tj /F3 10 Tf 0 0 0 rg (a..zA..Z0..9_) Tj /F1 10 Tf 0 0 0 rg (\) followed by a colon \() Tj /F3 10 Tf 0 0 0 rg (:) Tj /F1 10 Tf 0 0 0 rg (\) and a newline) Tj T* 0 Tw (character.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 218.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Example:) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 100.8236 cm
|
||||||
|
q
|
||||||
|
q
|
||||||
|
1 0 0 1 0 0 cm
|
||||||
|
q
|
||||||
|
1 0 0 1 6.6 6.6 cm
|
||||||
|
q
|
||||||
|
.662745 .662745 .662745 RG
|
||||||
|
.5 w
|
||||||
|
.960784 .960784 .862745 rg
|
||||||
|
n -6 -6 468.6898 108 re B*
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 86 Tm /F3 10 Tf 12 TL (ldi r0, this_is_a_mark) Tj T* (ldi r1, 0xfefe) Tj T* (ldi r2, 0xefef) Tj T* T* (this_is_a_mark:) Tj T* (add r2, r1) Tj T* (; this will result in an infinite loop.) Tj T* (jmp r0) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
30 0 obj
|
||||||
|
<< /Length 2972 >>
|
||||||
|
stream
|
||||||
|
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 744.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Direct Input) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 726.0236 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (The core instruction set contains the ) Tj /F3 10 Tf 0 0 0 rg (ldi ) Tj /F1 10 Tf 0 0 0 rg (command that can be used to load data into a register directly.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 696.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.501318 Tw (The first \(big\) argument of this command is always a 16bit word. The assembler can automatically) Tj T* 0 Tw (generate the correct value if the argument is provided in the following ways:) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 680.0236 cm
|
||||||
|
q
|
||||||
|
0 0 .501961 rg
|
||||||
|
0 0 .501961 RG
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL (Marks) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 665.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (The assembler inserts the absolute offset of the Mark.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 649.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL (A decimal value) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 634.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (The assembler inserts the value \(i.e. ) Tj /F3 10 Tf 0 0 0 rg (ldi) Tj ( ) Tj (r0, 12) Tj /F1 10 Tf 0 0 0 rg (\).) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 618.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL (A hexadecimal value) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 603.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (If the argument starts with ) Tj /F3 10 Tf 0 0 0 rg (0x ) Tj /F1 10 Tf 0 0 0 rg (the assembler will interpret the argument as hexadecimal.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 587.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL (A binary value) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 572.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 2 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (If the argument starts with ) Tj /F3 10 Tf 0 0 0 rg (0b ) Tj /F1 10 Tf 0 0 0 rg (the assembler will interpret the value as binary.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 556.0236 cm
|
||||||
|
q
|
||||||
|
0 0 0 rg
|
||||||
|
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL (A character) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
1 0 0 1 62.69291 529.0236 cm
|
||||||
|
0 0 0 rg
|
||||||
|
BT /F1 10 Tf 12 TL ET
|
||||||
|
BT 1 0 0 1 0 14 Tm T* ET
|
||||||
|
q
|
||||||
|
1 0 0 1 20 0 cm
|
||||||
|
q
|
||||||
|
BT 1 0 0 1 0 14 Tm .82811 Tw 12 TL /F1 10 Tf 0 0 0 rg (If the argument is either a single character surrounded by two ) Tj /F3 10 Tf 0 0 0 rg (' ) Tj /F1 10 Tf 0 0 0 rg (characters or any unicode escape) Tj T* 0 Tw (sequence surrounded by ) Tj /F3 10 Tf 0 0 0 rg (' ) Tj /F1 10 Tf 0 0 0 rg (characters the assembler will insert the integer representation.) Tj T* ET
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
q
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
31 0 obj
|
||||||
|
<< /Nums [ 0 32 0 R 1 33 0 R 2 34 0 R ] >>
|
||||||
|
endobj
|
||||||
|
32 0 obj
|
||||||
|
<< /S /D /St 1 >>
|
||||||
|
endobj
|
||||||
|
33 0 obj
|
||||||
|
<< /S /D /St 2 >>
|
||||||
|
endobj
|
||||||
|
34 0 obj
|
||||||
|
<< /S /D /St 3 >>
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 35
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000075 00000 n
|
||||||
|
0000000130 00000 n
|
||||||
|
0000000240 00000 n
|
||||||
|
0000000355 00000 n
|
||||||
|
0000000526 00000 n
|
||||||
|
0000000697 00000 n
|
||||||
|
0000000868 00000 n
|
||||||
|
0000001039 00000 n
|
||||||
|
0000001210 00000 n
|
||||||
|
0000001381 00000 n
|
||||||
|
0000001553 00000 n
|
||||||
|
0000001725 00000 n
|
||||||
|
0000001897 00000 n
|
||||||
|
0000002069 00000 n
|
||||||
|
0000002178 00000 n
|
||||||
|
0000002464 00000 n
|
||||||
|
0000002674 00000 n
|
||||||
|
0000002846 00000 n
|
||||||
|
0000003075 00000 n
|
||||||
|
0000003184 00000 n
|
||||||
|
0000003467 00000 n
|
||||||
|
0000003544 00000 n
|
||||||
|
0000003692 00000 n
|
||||||
|
0000003827 00000 n
|
||||||
|
0000003953 00000 n
|
||||||
|
0000004076 00000 n
|
||||||
|
0000004193 00000 n
|
||||||
|
0000004271 00000 n
|
||||||
|
0000011143 00000 n
|
||||||
|
0000018461 00000 n
|
||||||
|
0000021490 00000 n
|
||||||
|
0000021552 00000 n
|
||||||
|
0000021589 00000 n
|
||||||
|
0000021626 00000 n
|
||||||
|
trailer
|
||||||
|
<< /ID
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
[(\372\(\217\316\222\3169q\222\376\355\325c1\302>) (\372\(\217\316\222\3169q\222\376\355\325c1\302>)]
|
||||||
|
/Info 20 0 R /Root 19 0 R /Size 35 >>
|
||||||
|
startxref
|
||||||
|
21663
|
||||||
|
%%EOF
|
180
assembler/language.rst
Normal file
180
assembler/language.rst
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
BCI Assembly Language
|
||||||
|
*********************
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
|
||||||
|
Commands, Small Arguments and Big Arguments
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
A command in BCI Assembly is a word starting with an
|
||||||
|
alphabetic character (``a..zA..Z``) following by a sequence
|
||||||
|
of alphanumeric characters (``a..zA..Z0..9``).
|
||||||
|
This word will be converted to a 10bit opcode.
|
||||||
|
|
||||||
|
Embedded in the 16bits of a word there is also a 6bit small
|
||||||
|
argument. If a command has no small argument these bits will
|
||||||
|
be zeroed. In the assembly the command will be only one
|
||||||
|
word, for example::
|
||||||
|
|
||||||
|
cli
|
||||||
|
|
||||||
|
If the command has a small argument, the 6 bit will be
|
||||||
|
filled with the small argument. In the assembly the small
|
||||||
|
argument is separated by one whitespace, for example::
|
||||||
|
|
||||||
|
inc r0
|
||||||
|
|
||||||
|
Any other arguments are stored in further words and have
|
||||||
|
thus a width of 16bits. They are separated by commas (``,``)
|
||||||
|
from both the first and any other arguments.
|
||||||
|
It is recommended to only add one more argument.
|
||||||
|
|
||||||
|
Example for one big argument::
|
||||||
|
|
||||||
|
ldi r0, 0xdead
|
||||||
|
|
||||||
|
It might be useful to have more arguments for other
|
||||||
|
applications, like double precision floating points.
|
||||||
|
Example (not implemented)::
|
||||||
|
|
||||||
|
lddfi r0, r1, 0xdead, 0xbeef
|
||||||
|
; load double precision floating point
|
||||||
|
; to r0 and r1
|
||||||
|
|
||||||
|
Register Names
|
||||||
|
==============
|
||||||
|
|
||||||
|
Only data registers can be accessed directly. They are
|
||||||
|
prefixed with a ``r`` and are indexed starting with ``0``.
|
||||||
|
|
||||||
|
Examples: ``r0, r1, r2, ..., r11, r12``
|
||||||
|
|
||||||
|
|
||||||
|
Built-In Commands
|
||||||
|
=================
|
||||||
|
|
||||||
|
``ldi <sa>, <ba>``
|
||||||
|
Load the value ``<ba>`` into register ``<sa>``.
|
||||||
|
|
||||||
|
``ld <sa>, <ba>``
|
||||||
|
Load the value of the memory cell at ``<ba>`` into
|
||||||
|
register ``<sa>``.
|
||||||
|
|
||||||
|
``st <sa>, <ba>``
|
||||||
|
Store the value of register ``<sa>`` into the memory
|
||||||
|
cell at ``<ba>``.
|
||||||
|
|
||||||
|
``inc <sa>``
|
||||||
|
Increment the value of register ``<sa>``.
|
||||||
|
|
||||||
|
``dec <sa>``
|
||||||
|
Decrement the value of register ``<sa>``.
|
||||||
|
|
||||||
|
``add|sub|mul|div <sa>, <ba>``
|
||||||
|
``<sa> = <sa> +|-|*|/ <ba>`` where ``<sa>`` and
|
||||||
|
``<ba>`` are registers. Write the overflow into the
|
||||||
|
status register.
|
||||||
|
|
||||||
|
``gt|ge|lt|le|eq <sa>``
|
||||||
|
Check if the value of register ``<sa>`` is
|
||||||
|
``>|>=|<|<=|==`` to ``0``. Set the status register
|
||||||
|
to ``1`` if it evaluates true, else to ``0``.
|
||||||
|
|
||||||
|
``not``
|
||||||
|
If the status register is ``0`` set it to ``1``,
|
||||||
|
else set it to ``0``.
|
||||||
|
|
||||||
|
``jmp <sa>``
|
||||||
|
Set the program counter to the value of register
|
||||||
|
``<sa>``.
|
||||||
|
|
||||||
|
``call <sa>``
|
||||||
|
Push the current program counter on the stack and
|
||||||
|
set the program counter to the value of register ``<sa>``.
|
||||||
|
|
||||||
|
``ret``
|
||||||
|
Pop the previously pushed program counter from the stack.
|
||||||
|
|
||||||
|
``stop``
|
||||||
|
Write ``1`` into the shutdown register. This will
|
||||||
|
cause the interpreter to halt.
|
||||||
|
``cl``
|
||||||
|
Write ``0`` into the status register.
|
||||||
|
|
||||||
|
``cjmp <sa>``
|
||||||
|
If there not a ``0`` in the status register, ``jmp
|
||||||
|
<sa>``, else continue execution.
|
||||||
|
|
||||||
|
``ccall <sa>``
|
||||||
|
Like ``cjmp <sa>`` but with ``call`` instead.
|
||||||
|
|
||||||
|
Comments
|
||||||
|
========
|
||||||
|
|
||||||
|
Comments start with a ``;`` at the beginning of the line and
|
||||||
|
end at the end of the line.
|
||||||
|
|
||||||
|
Marks
|
||||||
|
=====
|
||||||
|
|
||||||
|
Marks represent a special location of the assembly code. The
|
||||||
|
assembler keeps track of those marks and they can be used as
|
||||||
|
immediate input.
|
||||||
|
|
||||||
|
A mark is defined by a single word, starting with an
|
||||||
|
alphabetic character (``a..zA...Z``) containing alphanumeric
|
||||||
|
characters and underscores (``a..zA..Z0..9_``) followed by
|
||||||
|
a colon (``:``) and a newline character.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
ldi r0, this_is_a_mark
|
||||||
|
ldi r1, 0xfefe
|
||||||
|
ldi r2, 0xefef
|
||||||
|
|
||||||
|
this_is_a_mark:
|
||||||
|
add r2, r1
|
||||||
|
; this will result in an infinite loop.
|
||||||
|
jmp r0
|
||||||
|
|
||||||
|
|
||||||
|
Direct Input
|
||||||
|
============
|
||||||
|
|
||||||
|
The core instruction set contains the ``ldi`` command that
|
||||||
|
can be used to load data into a register directly.
|
||||||
|
|
||||||
|
The first (big) argument of this command is always a 16bit
|
||||||
|
word. The assembler can automatically generate the correct
|
||||||
|
value if the argument is provided in the following ways:
|
||||||
|
|
||||||
|
`Marks`_
|
||||||
|
The assembler inserts the absolute offset of the
|
||||||
|
Mark.
|
||||||
|
A decimal value
|
||||||
|
The assembler inserts the value (i.e. ``ldi r0,
|
||||||
|
12``).
|
||||||
|
A hexadecimal value
|
||||||
|
If the argument starts with ``0x`` the assembler
|
||||||
|
will interpret the argument as hexadecimal.
|
||||||
|
A binary value
|
||||||
|
If the argument starts with ``0b`` the assembler
|
||||||
|
will interpret the value as binary.
|
||||||
|
A character
|
||||||
|
If the argument is either a single character
|
||||||
|
surrounded by two ``'`` characters or any unicode
|
||||||
|
escape sequence surrounded by ``'`` characters the
|
||||||
|
assembler will insert the integer representation.
|
||||||
|
|
||||||
|
Explicit Data Programming
|
||||||
|
=========================
|
||||||
|
|
||||||
|
One can explicitly set data in the program memory by using
|
||||||
|
the ``.set`` directive. It uses the following semantics::
|
||||||
|
|
||||||
|
".set" "[" <value> {,<value>} "]"
|
||||||
|
|
||||||
|
Where ``<value>`` is a `Direct Input`_ value. The assembler
|
||||||
|
will insert the data at exactly the location where the
|
||||||
|
``.set`` appears. The assembler ignores any whitespace or
|
||||||
|
newline characters between the brackets ``[]``.
|
Loading…
Reference in New Issue
Block a user