- ΠΠΎΠ»ΠΌΠ°ΠΊΠΎΠ² ΠΠΌΠΈΡΡΠΈΠΉ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠΎΠ²ΠΈΡ, P3231
asm | stack | neum | mc -> hw | instr | binary -> struct | stream | port | pstr | prob1 | cache
- ΠΠ°Π·ΠΎΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ (Π±Π΅Π· ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡ)
- Π―Π·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄
- Π’ΡΠ°Π½ΡΠ»ΡΡΠΎΡ
- ΠΠΎΠ΄Π΅Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
- ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
- Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
<program> ::= <section_data>? <section_code>
<section_data> ::= "section data:" <comment>? "\n" <data_line>*
<data_line> ::= <variable> <comment>? "\n"
<variable> ::= <variable_name> ":" <variable_value>
<variable_name> ::= <letter_with_underscore> <letter_or_number_with_underscore>*
<variable_value> ::= <integer>
| <string>
| <buffer>
<section_code> ::= "section code:" <comment>? "\n" <code_line>*
<code_line> ::= (<label> | <command>) [comment] "\n"
<label> ::= <label_name> ":"
<label_name> ::= <letter_with_underscore> <letter_or_number_with_underscore>*
<command> ::= op0 | op1
<op0> ::= "nop"
| "pop"
| "swap"
| "dup"
| "over"
| "inc"
| "dec"
| "add"
| "sub"
| "mul"
| "div"
| "mod"
| "load"
| "save"
| "in"
| "out"
| "jmp"
| "jz"
| "call"
| "ret"
| "halt"
<op1> ::= "push" <integer>
| "push" <variable_name>
| "push" <label_name>
<lowercase_letter> ::= [a-z]
<uppercase_letter> ::= [A-Z]
<letter> ::= <lowercase_letter> | <uppercase_letter>
<letter_with_underscore> ::= <letter> | "_"
<letter_or_number_with_underscore> ::= <letter> | <number> | "_"
<number> ::= [0-9]
<integer> ::= "-"? <number>+
<positive_integer> ::= "0"* [1-9] <number>*
<single_quote> ::= "\'"
<double_quote> ::= "\""
<string> ::= <single_quote> [^\"\n]* <single_quote>
| <double_quote> [^\'\n]* <double_quote>
<buffer> ::= "bf" positive_integer
<comment> ::= ";" [^\n]*
- Π ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΠΈΡ Π΄Π°Π½Π½ΡΡ
data
, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ (ΡΠΈΡΠ»Π°, ΡΡΡΠΎΠΊΠΈ, Π±ΡΡΠ΅ΡΡ). Π‘Π΅ΠΊΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ·Π°Π½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π΄ΠΎ ΡΠ΅ΠΊΡΠΈΠΈ ΠΊΠΎΠ΄Π°. Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ. - ΠΠ°Π·Π²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π΅ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Ρ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ.
- ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΡΠ΅ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅ΠΊΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ
.
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π±ΡΡΠ΅ΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
0
.buffer: bf 10 ; Π±ΡΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° 10
- Π ΠΊΠΎΠ΄Π΅ ΠΎΠ±ΡΠ·Π°Π½Π° Π±ΡΡΡ ΡΠ΅ΠΊΡΠΈΡ
code
, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΊΠΈ. - Π‘ΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄.
- ΠΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ΄Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π·Π° Π΄ΡΡΠ³ΠΎΠΉ.
- ΠΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:
ΠΠ΅ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ Π΄ΠΎ, ΡΠ°ΠΊ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΠ΅ΡΠΊΠΈ Π½Π΅ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Ρ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠΊ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ. ΠΠ°Π·Π²Π°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠΊ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠ΅ΡΠΊΠΈ ΠΈΠΌΠ΅ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
start: push 1
- Π ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ·Π°Π½Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ
RET
. ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ Π² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡData Stack
. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΡΠ΅ΠΊΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
- ΠΠ°ΠΌΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ½ ΠΠ΅ΠΉΠΌΠ°Π½ΠΎΠ²ΡΠΊΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅.
- Π Π°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° - 32 Π±ΠΈΡΠ°.
- ΠΠ΄ΡΠ΅ΡΠ°ΡΠΈΡ - Π°Π±ΡΠΎΠ»ΡΡΠ½Π°Ρ.
Memory
+------------------------------+
| 00 : start address (n) |
| 01 : integer value |
| ... |
| s+0 : string length |
| s+1 : string value |
| ... |
| b+0 : buffer (0) |
| b+1 : buffer (0) |
| ... |
| n : program start |
| n+1 : instruction |
| ... |
| 7 : PUSH sub |
| 8 : CALL |
| ... |
| 25 : subprogram instruction |
| 26 : RET |
| ... |
| n : HALT |
+------------------------------+
Microprogram memory
+------------------------------+
| 00 : signals |
| 01 : signals |
| ... |
+------------------------------+
-
Π―ΡΠ΅ΠΉΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ
0
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π°Π΄ΡΠ΅ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² ΡΠ΅ΠΊΡΠΈΠΈcode
. -
ΠΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ΅ΠΊΡΠΈΡ
data
, ΡΠΎ ΠΎΠ½Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ2
. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΠ΅Ρ ΡΠΈΠΏΠΎΠ²:Π¦Π΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅
- ΠΏΠΎΠ΄ Π½ΠΈΡ ΠΎΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΎΠ΄Π½Π° ΡΡΠ΅ΠΉΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ;Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅
- ΠΏΠΎΠ΄ Π½ΠΈΡ ΠΎΡΠ²ΠΎΠ΄ΠΈΡΡΡn + 1
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅Π΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, Π³Π΄Π΅n
- Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» -n
Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΡΠΎΠΊΠΈ);ΠΡΡΡΠ΅ΡΠ½ΡΠ΅
- ΠΏΠΎΠ΄ Π½ΠΈΡ ΠΎΡΠ²ΠΎΠ΄ΠΈΡΡΡn
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅Π΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, Π³Π΄Π΅n
- Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π·Π°ΠΏΡΠΎΡΠ° Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ (bf n
);
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΡΠΊΠ°Π·Π°Π½Ρ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π² ΡΠ΅ΠΊΡΠΈΠΈ .data`.
-
Π‘ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ
n
Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, ΠΏΡΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌΡ Π² ΡΠ΅ΠΊΡΠΈΠΈcode
.
- Π‘ΡΠ΅ΠΊ Π΄Π°Π½Π½ΡΡ
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ Π²Π΅ΡΡΠΈΠ½Ρ
ΡΡΠ΅ΠΊΠ°
TOS
ΠΈ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡdeque
. - Π‘ΡΠ΅ΠΊ Π΄Π°Π½Π½ΡΡ 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΠΉ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.
- Π‘ΡΠ΅ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ
Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
deque
. - Π‘ΡΠ΅ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΠΉ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π°Π΄ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ - 32 Π±ΠΈΡΠ°, Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅. ΠΠ±ΡΠΎΠ»ΡΡΠ½Π°Ρ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ.
- ΠΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ, Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°:
PC (program counter)
- ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ;MPC (micro program counter)
- ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΌΠΈΠΊΡΠΎΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ;TOS (top of the stack)
- Π²Π΅ΡΡΠΈΠ½Π° ΡΡΠ΅ΠΊΠ°;NOS (near of the stack)
- Π²ΡΠΎΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΠ΅ΠΊΠ°;AR (address register)
- ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ;BR (buffer register)
- ΡΠ΅Π³ΠΈΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠ΅ΠΊΠ°.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ
:
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈΠ· ΡΡΠ΅ΠΊΠ°;
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΡΠ΅ΠΊΠΎΠΌ;
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°;
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ Ρ ΠΏΠ°ΠΌΡΡΡΡ.
- ΠΠΎΡΡΡΠΏ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°
AR
. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π½Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΠΎ Π»ΠΈΠ±ΠΎ ΠΈΠ·PC
, Π»ΠΈΠ±ΠΎ ΠΈΠ·TOS
. - ΠΠ²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΡ
ΡΡΡΡΠΎΠΉΡΡΠ² Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΠΈ
ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°.
- Π£ΡΡΡΠΎΠΉΡΡΠ²Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎ Π½ΠΎΠΌΠ΅ΡΡ ΠΏΠΎΡΡΠ°.
- ΠΠ΄ΡΠ΅ΡΠ°ΡΠΈΡ Π°Π±ΡΠΎΠ»ΡΡΠ½Π°Ρ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ.
- ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΎΠ΄Π½ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ
1
; - ΠΡ ΠΎΠ΄Π½ΡΠ΅ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΎΠΊΠ΅Π½ΠΎΠ².
- ΠΠΎΡΠΎΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ:
- ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅
PC
ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ:- ΠΠΎΡΠ»Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° - Π½Π° 1;
- ΠΠΎΡΠ»Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ (
PUSH
) - Π½Π° 2.
- ΠΠ΅Π·ΡΡΠ»ΠΎΠ²Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ -
JMP
,CALL
,RET
; - Π£ΡΠ»ΠΎΠ²Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ -
JZ
, Π΅ΡΠ»ΠΈ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π½ΠΎΠ»Ρ; HΠLT
- ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
- ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅
PUSH integer
- ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅;PUSH variable
- ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π°Π΄ΡΠ΅Ρ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ;PUSH label
- ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π°Π΄ΡΠ΅Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΊΠ°;POP
- ΡΠ΄Π°Π»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ[a] -> []
;SWAP
- ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ[a, b] -> [b, a]
;DUP
- ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ[a] -> [a, a]
;OVER
- Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π° ΡΡΠ΅ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· Π²ΡΠΎΡΠΎΠΉ[a, b] -> [b, a, b]
.
INC
- ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π½Π° 1[a] -> [a + 1]
;DEC
- ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π½Π° 1[a] -> [a - 1]
;ADD
- ΡΡΠΌΠΌΠ° Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ[a, b] -> [b + a]
;SUB
- ΡΠ°Π·Π½ΠΎΡΡΡ Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ (ΠΈΠ· Π²Π΅ΡΡ Π½Π΅Π³ΠΎ Π²ΡΡΠΈΡΠ°Π΅ΡΡΡ Π²ΡΠΎΡΠΎΠ΅)[a, b] -> [b - a]
;MUL
- ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ[a, b] -> [b * a]
;DIV
- ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ (Π²Π΅ΡΡ Π½Π΅Π΅ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° Π²ΡΠΎΡΠΎΠ΅)[a, b] -> [b // a]
;MOD
- ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ (Π²Π΅ΡΡ Π½Π΅Π΅ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° Π²ΡΠΎΡΠΎΠ΅)[a, b] -> [b % a]
.
LOAD
- Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°[address] -> [value_from_memory]
;SAVE
- Π²Π·ΡΡΡ Π°Π΄ΡΠ΅Ρ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΠΏΠ°ΠΌΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΠΎΡΠ»Π΅ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ[value, address] -> []
.
IN
β ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΡΡΡ[port] -> [value]
;OUT
β ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΡΡΡ[value, port] -> []
.
NOP
- Π½Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ;JMP
- ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ[address] -> []
;JZ
- ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΌΠ΅ΡΠΊΡ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΡΠ»Π°Π³zero (Z)
ΡΠ°Π²Π΅Π½ 1, ΠΈΠ½Π°ΡΠ΅ - ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅[address] -> []
;CALL
- Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°[address] -> []
;RET
- Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· Π²ΡΠ·Π²Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π°Π΄ΡΠ΅Ρ;HALT
- ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ°ΠΊΡΠΎΠ²ΠΎΠ³ΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°.
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈΠΌΠ΅ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΡΡΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΎΠΏΠΊΠΎΠ΄Π° Π΄Π»ΠΈΠ½ΠΎΡ 5 Π±ΠΈΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ ΠΈ Π΅Π΅ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ isa.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ
Π½Π°
ΡΡΠ΅ΠΊ β ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ PUSH <argument>
. ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ
ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ ΡΡΠ΅ΠΊΠΎΠΌ ΠΈ Π±Π΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΎ ΡΡΠ΅ΠΊΠ°.
Π’Π°ΠΊΠΆΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ PUSH
Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ
Π΅Π΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ Π»Π΅ΠΆΠΈΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° PUSH 42
Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅:
n 0000 0000 0000 0000 0000 0000 0000 0001 push
n+1 0000 0000 0000 0000 0000 0000 0010 1010 42
ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ PC ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ PUSH
ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 2.
usage: translator.py [-h] source_file target_file
ASM code translator
positional arguments:
source_file Source file name
target_file Target file name
options:
-h, --help show this help message and exit
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ translator.
Π’ΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΠΏΠΎΠ²:
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±Π΅Π· Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΌΠ΅ΡΠΎΠΊ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΠ°ΡΡΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΌΠ΅ΡΠΎΠΊ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ;
- ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΌΠ΅ΡΠΎΠΊ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ;
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
<target_file>
; - ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
<target_file>_com.txt
Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ.
usage: main.py [-h] [-l LIMIT] [-c] [-d] code_file [input_file]
Stack processor simulation
positional arguments:
code_file Binary code file name
input_file Input file name (optional)
options:
-h, --help show this help message and exit
-l LIMIT, --limit LIMIT
Tick limit (default - 200000)
-c, --char Char output (default - list[int])
-d, --debug Debug logging (default - info)
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ main.
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ data_path.
Memory
- ΠΎΠ΄Π½ΠΎΠΏΠΎΡΡΠΎΠ²Π°Ρ ΠΏΠ°ΠΌΡΡΡ;ALU
- ΠΠΠ£ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ;Data Stack
- ΡΡΠ΅ΠΊ Π΄Π°Π½Π½ΡΡ ;TOS
- Π²Π΅ΡΡΠΈΠ½Π° ΡΡΠ΅ΠΊΠ°;Address Register
- ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ;Buffer Register
- Π΄Π»Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΎ ΡΡΠ΅ΠΊΠΎΠΌ;IO Controller
- ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°.
Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄, ΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ uarch.
DS_PUSH
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ ;DS_POP
- ΡΠ±ΡΠ°ΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ ;LATCH_TOS
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ :SEL_TOS_DS
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ ;SEL_TOS_MEMORY
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ;SEL_TOS_INPUT
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· IO ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°;SEL_TOS_ALU
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΠΠ£;SEL_TOS_BR
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°;
LATCH_AR
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π°Π΄ΡΠ΅ΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ:SEL_AR_TOS
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ ;SEL_AR_PC
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄;
LATCH_BR
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π² Π±ΡΡΠ΅ΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ;ALU_SUM
,ALU_SUB
,ALU_MUL
,ALU_DIV
,ALU_MOD
- Π²ΡΠ±ΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° ΠΠΠ£;ALU_INC
,ALU_DEC
- ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΠΠ£;ALU_RIGHT_OP_NOS
- ΠΏΠΎΠ΄Π°ΡΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π½Π° ΠΏΡΠ°Π²ΡΠΉ Π²Ρ ΠΎΠ΄ ΠΠΠ£;ALU_RIGHT_OP_ZERO
- ΠΏΠΎΠ΄Π°ΡΠ° Π½ΡΠ»Ρ Π½Π° ΠΏΡΠ°Π²ΡΠΉ Π²Ρ ΠΎΠ΄ ΠΠΠ£;OUT
- ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π½Π° Π²Π½Π΅ΡΠ½Π΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎ ΠΏΠΎΡΡΡ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π² Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ ;WRITE
- Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΈΠ· AR Π²ΡΠΎΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ .
Π€Π»Π°Π³ΠΈ:
zero (Z)
- ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π½Π° Π½ΠΎΠ»Ρ.
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ control_unit. ΠΠΈΠΊΡΠΎΠΊΠΎΠ΄ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ uarch.
Program Counter
- ΡΡΠ΅ΡΡΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄;Micro Program Counter
- ΡΡΠ΅ΡΡΠΈΠΊ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄;Micro Program
- ΠΏΠ°ΠΌΡΡΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄;Return Stack
- ΡΡΠ΅ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°;
Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄, ΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ uarch.
RS_PUSH
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π² ΡΡΠ΅ΠΊΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄;RS_POP
- ΡΠ±ΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°;LATCH_PC
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΡΡΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄:SEL_PC_NEXT
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄;SEL_PC_JMP
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ ;SEL_PC_JZ
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ΅ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π΅ΡΠ»ΠΈ ΡΠ»Π°Π³zero (Z)
ΡΠ°Π²Π΅Π½ 1, ΠΈΠ½Π°ΡΠ΅ Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄;SEL_PC_RS
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°;
LATCH_MPC
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΡΡΠΈΠΊ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄:SEL_MPC_ZERO
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π½ΠΎΠ»Ρ:SEL_MPC_OPCODE
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΈΠ· AR;SEL_MPC_NEXT
- Π·Π°ΡΠ΅Π»ΠΊΠ½ΡΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄;
HALT
- ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ°ΠΊΡΠΎΠ²ΠΎΠ³ΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°.
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ golden test-ΠΎΠ².
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ golden ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ golden_test.py
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ golden test-ΠΎΠ² Π»Π΅ΠΆΠΈΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ golden
Π’Π΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠΊΡΡΡΠΈΠ΅:
cat
β ΠΏΠΎΠ²ΡΠΎΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ Π²Π²ΠΎΠ΄Π° Π½Π° Π²ΡΠ²ΠΎΠ΄;hello_username
β ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π½Π° Π²ΡΡ ΠΎΠ΄ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ;hello_world
β ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π½Π° Π²ΡΡ ΠΎΠ΄ βHello, world!β;math
β Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ;prob1
β ΡΡΠΌΠΌΠ° ΡΠΈΡΠ΅Π» ΠΎΡ 1 Π΄ΠΎ 1000, ΠΊΡΠ°ΡΠ½ΡΠ΅ 3 Π»ΠΈΠ±ΠΎ 5.
ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ:
poetry run pytest . -v
ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ golden-ΡΠ΅ΡΡΠΎΠ²:
poetry run pytest . -v --update-goldens
CI ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Github Actions Π½Π°ΡΡΡΠΎΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π΅ ci.yml:
name: stack-machine
on: [push]
jobs:
golden:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
pip3 install poetry
poetry install
- name: Run tests and collect coverage
run: |
poetry run coverage run -m pytest .
poetry run coverage report -m
env:
CI: true
ruff:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
pip3 install poetry
poetry install
- name: Check code formatting with Ruff
run: |
poetry run ruff format --check . --exclude uarch.py
- name: Run Ruff linters
run: |
poetry run ruff check .
mypy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
pip3 install poetry
poetry install
- name: Check static typing with mypy
run: |
poetry run mypy .
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
poetry
- ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ Python;coverage
- ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΡΡΡΠ° ΠΎΠ± ΡΡΠΎΠ²Π½Π΅ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°;pytest
- ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ²;ruff
- Π»ΠΈΠ½ΡΠ΅Ρ ΠΈ ΡΠΎΡΠΌΠ°ΡΡΠ΅Ρ;mypy
- ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ
Π’Π΅ΡΡΠΎΠ²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ:
golden
- Π·Π°ΠΏΡΡΠΊ golden-ΡΠ΅ΡΡΠΎΠ²ruff
- Π·Π°ΠΏΡΡΠΊ Π»ΠΈΠ½ΡΠ΅ΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡruff
mypy
- Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈmypy
ΠΠ°ΠΏΡΡΠΊ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠ°:
python3 translator.py asm/hello_world.asm asm/hello_world.bin
ΠΡΠ²ΠΎΠ΄ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠ°:
Translation successful
Source LoC: 43, Number of Instructions: 50
ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠΈ:
0 0000 0000 0000 0000 0000 0000 0001 0000 start_address = 16
1 0000 0000 0000 0000 0000 0000 0000 0001 port = 1
2 0000 0000 0000 0000 0000 0000 0000 1101 hello : 13
3 0000 0000 0000 0000 0000 0000 0100 1000 `H`
4 0000 0000 0000 0000 0000 0000 0110 0101 `e`
5 0000 0000 0000 0000 0000 0000 0110 1100 `l`
6 0000 0000 0000 0000 0000 0000 0110 1100 `l`
7 0000 0000 0000 0000 0000 0000 0110 1111 `o`
8 0000 0000 0000 0000 0000 0000 0010 1100 `,`
9 0000 0000 0000 0000 0000 0000 0010 0000 ` `
10 0000 0000 0000 0000 0000 0000 0111 0111 `w`
11 0000 0000 0000 0000 0000 0000 0110 1111 `o`
12 0000 0000 0000 0000 0000 0000 0111 0010 `r`
13 0000 0000 0000 0000 0000 0000 0110 1100 `l`
14 0000 0000 0000 0000 0000 0000 0110 0100 `d`
15 0000 0000 0000 0000 0000 0000 0010 0001 `!`
16 0000 0000 0000 0000 0000 0000 0000 0001 PUSH
17 0000 0000 0000 0000 0000 0000 0000 0010 hello (2)
18 0000 0000 0000 0000 0000 0000 0000 1101 LOAD
19 0000 0000 0000 0000 0000 0000 0000 0100 DUP
20 0000 0000 0000 0000 0000 0000 0000 0001 PUSH
21 0000 0000 0000 0000 0000 0000 0000 0001 port (1)
22 0000 0000 0000 0000 0000 0000 0000 1101 LOAD
23 0000 0000 0000 0000 0000 0000 0001 0000 OUT
24 0000 0000 0000 0000 0000 0000 0000 0100 DUP
25 0000 0000 0000 0000 0000 0000 0000 0001 PUSH
26 0000 0000 0000 0000 0000 0000 0011 0001 break (49)
27 0000 0000 0000 0000 0000 0000 0000 0011 SWAP
28 0000 0000 0000 0000 0000 0000 0001 0010 JZ
29 0000 0000 0000 0000 0000 0000 0000 0001 PUSH
30 0000 0000 0000 0000 0000 0000 0000 0010 hello (2)
31 0000 0000 0000 0000 0000 0000 0000 0110 INC
32 0000 0000 0000 0000 0000 0000 0000 0100 DUP
33 0000 0000 0000 0000 0000 0000 0000 1101 LOAD
34 0000 0000 0000 0000 0000 0000 0000 0001 PUSH
35 0000 0000 0000 0000 0000 0000 0000 0001 port (1)
36 0000 0000 0000 0000 0000 0000 0000 1101 LOAD
37 0000 0000 0000 0000 0000 0000 0001 0000 OUT
38 0000 0000 0000 0000 0000 0000 0000 0011 SWAP
39 0000 0000 0000 0000 0000 0000 0000 0111 DEC
40 0000 0000 0000 0000 0000 0000 0000 0100 DUP
41 0000 0000 0000 0000 0000 0000 0000 0001 PUSH
42 0000 0000 0000 0000 0000 0000 0011 0001 break (49)
43 0000 0000 0000 0000 0000 0000 0000 0011 SWAP
44 0000 0000 0000 0000 0000 0000 0001 0010 JZ
45 0000 0000 0000 0000 0000 0000 0000 0011 SWAP
46 0000 0000 0000 0000 0000 0000 0000 0001 PUSH
47 0000 0000 0000 0000 0000 0000 0001 1111 loop (31)
48 0000 0000 0000 0000 0000 0000 0001 0001 JMP
49 0000 0000 0000 0000 0000 0000 0001 1111 HALT
ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°:
python3 main.py asm/hello_world.bin -c
ΠΡΠ²ΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° (Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ²Π½Ρ INFO):
Output: Hello, world!
Ticks: 948, Instructions: 204
Π§Π°ΡΡΡ ΠΆΡΡΠ½Π°Π»Π° ΡΠ°Π±ΠΎΡΡ (Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ²Π½Ρ DEBUG):
DEBUG:root:
Tick: 0
MicroInstruction: LATCH_MPC, SEL_MPC_OPCODE
Instruction: PUSH 2
PC MPC AR BR TOS
16 1 16 0 0
DS: []
RS: []
DEBUG:root:
Tick: 1
MicroInstruction: DS_PUSH, LATCH_PC, SEL_PC_NEXT, LATCH_MPC, SEL_MPC_NEXT
PC MPC AR BR TOS
16 3 16 0 0
DS: []
RS: []
DEBUG:root:
Tick: 2
MicroInstruction: LATCH_AR, SEL_AR_PC, LATCH_MPC, SEL_MPC_NEXT
PC MPC AR BR TOS
17 4 16 0 0
DS: [0]
RS: []
DEBUG:root:
Tick: 3
MicroInstruction: LATCH_TOS, SEL_TOS_MEMORY, LATCH_PC, SEL_PC_NEXT, LATCH_MPC, SEL_MPC_ZERO
PC MPC AR BR TOS
17 5 17 0 0
DS: [0]
RS: []
DEBUG:root:
Tick: 4
MicroInstruction: LATCH_AR, SEL_AR_PC, LATCH_MPC, SEL_MPC_NEXT
PC MPC AR BR TOS
18 0 17 0 2
DS: [0]
RS: []
================================ test session starts ================================
platform darwin -- Python 3.12.3, pytest-8.2.1, pluggy-1.5.0 -- /Users/whatever125/De
sktop/Π°ΠΊ/lab3/.venv/bin/python
cachedir: .pytest_cache
rootdir: /Users/whatever125/Desktop/Π°ΠΊ/lab3
configfile: pyproject.toml
plugins: golden-0.2.2
collected 5 items
golden_test.py::test_translator_and_machine[golden/hello_username.yml] PASSED [ 20%]
golden_test.py::test_translator_and_machine[golden/prob1.yml] PASSED [ 40%]
golden_test.py::test_translator_and_machine[golden/math.yml] PASSED [ 60%]
golden_test.py::test_translator_and_machine[golden/cat.yml] PASSED [ 80%]
golden_test.py::test_translator_and_machine[golden/hello_world.yml] PASSED [100%]
================================= 5 passed in 0.42s =================================
| Π€ΠΠ | Π°Π»Π³ | LoC | code ΠΈΠ½ΡΡΡ. | ΠΈΠ½ΡΡΡ. | ΡΠ°ΠΊΡ. |
+-------------------------------+----------------+-----+-------------+--------+--------+
| ΠΠΎΠ»ΠΌΠ°ΠΊΠΎΠ² ΠΠΌΠΈΡΡΠΈΠΉ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠΎΠ²ΠΈΡ | cat | 39 | 34 | 179 | 822 |
| ΠΠΎΠ»ΠΌΠ°ΠΊΠΎΠ² ΠΠΌΠΈΡΡΠΈΠΉ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠΎΠ²ΠΈΡ | hello_username | 100 | 158 | 686 | 3240 |
| ΠΠΎΠ»ΠΌΠ°ΠΊΠΎΠ² ΠΠΌΠΈΡΡΠΈΠΉ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠΎΠ²ΠΈΡ | hello_world | 43 | 50 | 204 | 948 |
| ΠΠΎΠ»ΠΌΠ°ΠΊΠΎΠ² ΠΠΌΠΈΡΡΠΈΠΉ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠΎΠ²ΠΈΡ | math | 19 | 16 | 9 | 37 |
| ΠΠΎΠ»ΠΌΠ°ΠΊΠΎΠ² ΠΠΌΠΈΡΡΠΈΠΉ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠΎΠ²ΠΈΡ | prob1 | 55 | 53 | 22523 | 108079 |