Model machine emulator
ΠΠΎΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° - ΡΡΠΎ ΡΠΈΡΡΠ°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΏΠΎΠ½ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ². ΠΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΎΠ½Π° Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌ Π²Π½ΠΈΠ·Ρ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
# python3 -m pip install --upgrade modelmachine
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° modelmachine
.
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ samples, ΠΏΠΎ ΠΈΡ ΠΎΠ±ΡΠ°Π·Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½. ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
$ modelmachine run samples/mm-3_sample.mmach
Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΎΡΠ»Π°Π΄ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
$ modelmachine debug samples/mm-3_sample.mmach
.cpu mm-3
.input 0x100 a
.input 0x101 b
.output 0x103 x
.code
; x = ((a * -21) % 50 - b) ** 2 == 178929
03 0100 0005 0103 ; x := a * -21
04 0103 0006 0102 ; [0102] := x / 50, x := x % 50
02 0103 0101 0103 ; x := x - b
03 0103 0103 0103 ; x := x * x
99 0000 0000 0000 ; halt
; ---------------------
FFFFFFFFFFFFEB ; -21
00000000000032 ; 50
.enter -123 456
- ΠΡΠ΅, ΡΡΠΎ ΠΈΠ΄Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΈΠΌΠ²ΠΎΠ»Π°
;
- ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ; ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ. - ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ
.cpu
ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ ΡΠΌΠΎΡΡΠΈ Π½ΠΈΠΆΠ΅. - Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ·Π°Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ
.code
ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ΄Π΅Ρ ΡΠ΅ΠΊΡΠΈΡ ΠΊΠΎΠ΄Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π½Π°Π±ΠΎΡ 16-ΡΠΈΡΠ½ΡΡ ΡΠΈΡΠ΅Π», Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π² ΠΏΠ°ΠΌΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΡΠΎΠΏΡΡΠΊΠ°ΡΡ ΡΠ°ΡΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Π½Π΅Π»ΡΠ·Ρ. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΡΠ»ΠΎΠ²Ρ Π² ΡΡΡΠΎΠΊΠ΅, ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡ ΡΠ°Π·Π±ΠΈΠ²Π°Ρ ΡΠ°Π·ΡΡΠ΄Ρ Π½Π° ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ.- ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°
.code
Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π°Π΄ΡΠ΅ΡΠ°0
. - ΠΠΎΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ Π°Π΄ΡΠ΅ΡΠ°
0
. - Π‘Π΅ΠΊΡΠΈΠΉ
.code
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΠ»Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ.code
Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,.code 0x100
. Π£ΡΠ°ΡΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΠΌΠΈ, ΠΎΠ±ΡΠ·Π°Π½Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ
- ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°
- ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π°
.input ADDRESS [QUESTION]
ΡΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡADDRESS
Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.ADDRESS
ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠΉ15
ΠΈΠ»ΠΈ ΡΠ΅ΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠΉ0xff
ΡΠΎΡΠΌΠ°Ρ.- ΠΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠ΅ ΠΈ ΡΠ΅ΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π° ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ.
- ΠΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ²ΠΈΠ΄ΠΈΡ Π²ΠΎΠΏΡΠΎΡ
QUESTION
; ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π°QUESTION
Π±ΡΠ΄Π΅Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡΡΡ. - Π Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ², ΡΠ΅Π·Π΄Π΅Π»ΡΠ½Π½ΡΡ
Π·Π°ΠΏΡΡΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
.input 0x200, 0x204, 0x208 Enter three numbers
.
- ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°
.enter NUMBERS...
Π²Π²ΠΎΠ΄ΠΈΡ ΡΠΈΡΠ»Π° Π΄Π»Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ².input
.NUMBERS
β ΡΡΠΎ ΡΡΡΠΎΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΈΡΠ»Π° ΡΠ°Π·Π΄Π»Π΅Π»Π΅Π½Ρ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ.- Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ²Π½ΠΎ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ΅Π», ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ² Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ
Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°Ρ
.input
. - ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΊΠ»ΡΡΠΎΠΌ
--enter
, ΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°.enter
ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ.input
ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Π°. - ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, Π° ΠΏΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΅Π΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
- ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π°
.output ADDRESS [MESSAGE]
ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΠΈΠ½Ρ.- ΠΠ°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΡ ΡΠΈΡΠ΅Π» ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ.
- ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΎΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0), ΡΠΎ Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
- Π Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ², ΡΠ΅Π·Π΄Π΅Π»ΡΠ½Π½ΡΡ Π·Π°ΠΏΡΡΠΎΠΉ.
- ΠΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π² ΠΏΠ°ΠΏΠΊΠ΅ samples
- ΠΠ»Ρ Π²ΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ·ΡΠΊ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°
OPCODE | mm-3 | mm-2 | mm-v | mm-1 | mm-s | mm-0 | mm-r | mm-m |
---|---|---|---|---|---|---|---|---|
0x00 | move | move | move | load | load | load | ||
0x01 | add | add | add | add | add | add | add | add |
0x02 | sub | sub | sub | sub | sub | sub | sub | sub |
0x03 | smul | smul | smul | smul | smul | smul | smul | smul |
0x04 | sdiv | sdiv | sdiv | sdiv | sdiv | sdiv | sdiv | sdiv |
0x05 | comp | comp | comp | comp | comp | comp | comp | |
0x13 | umul | umul | umul | umul | umul | umul | umul | umul |
0x14 | udiv | udiv | udiv | udiv | udiv | udiv | udiv | udiv |
0x10 | store | store | store | |||||
0x11 | addr | |||||||
0x20 | swap | rmove | rmove | |||||
0x21 | radd | radd | ||||||
0x22 | rsub | rsub | ||||||
0x23 | rsmul | rsmul | ||||||
0x24 | rsdiv | rsdiv | ||||||
0x25 | rcomp | rcomp | ||||||
0x33 | rumul | rumul | ||||||
0x34 | rudiv | rudiv | ||||||
0x40 | push | |||||||
0x5A | push | |||||||
0x5B | pop | pop | ||||||
0x5C | dup | dup | ||||||
0x5D | swap | swap | ||||||
0x80 | jump | jump | jump | jump | jump | jump | jump | jump |
0x81 | jeq | jeq | jeq | jeq | jeq | jeq | jeq | jeq |
0x82 | jneq | jneq | jneq | jneq | jneq | jneq | jneq | jneq |
0x83 | sjl | sjl | sjl | sjl | sjl | sjl | sjl | sjl |
0x84 | sjgeq | sjgeq | sjneq | sjgeq | sjgeq | sjgeq | sjgeq | sjgeq |
0x85 | sjleq | sjleq | sjleq | sjleq | sjleq | sjleq | sjleq | sjleq |
0x86 | sjg | sjg | sjg | sjg | sjg | sjg | sjg | sjg |
0x93 | ujl | ujl | ujl | ujl | ujl | ujl | ujl | ujl |
0x94 | ujgeq | ujgeq | ujgeq | ujgeq | ujgeq | ujgeq | ujgeq | ujgeq |
0x95 | ujleq | ujleq | ujleq | ujleq | ujleq | ujleq | ujleq | ujleq |
0x96 | ujg | ujg | ujg | ujg | ujg | ujg | ujg | ujg |
0x99 | halt | halt | halt | halt | halt | halt | halt | halt |
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ div
Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π² ΠΠΠ£ ΡΡ
Π΅ΠΌΡ divmod
.
ΠΠΈΠΆΠ΅ Π΄Π°Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ². ΠΡΠΊΡΠ΄Π° Π±Π΅ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌΠΎΡΡΠΈ [1].
ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ | Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|
jeq | == | jump if equal |
jneq | != | jump if not equal |
sjl | < s | signed jump if less |
sjgeq | >= s | signed jump if greater or equal |
sjleq | <= s | signed jump if less or equal |
sjg | > s | signed jump if greater |
ujl | < u | unsigned jump if less |
ujgeq | >= u | unsigned jump if greater or equal |
ujleq | <= u | unsigned jump if less or equal |
ujg | > u | unsigned jump if greater |
ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄
ΠΠ»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅ΠΊΡΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄:
R_M
- ΡΠ΅Π³ΠΈΡΡΡ Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌM
R
- Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ ΡΠ΅Π³ΠΈΡΡΡ Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌR
Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎR
Π²ΠΌΠ΅ΡΡΠΎR_R
[A]
- ΡΡΠ΅ΠΉΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ; Π°Π΄ΡΠ΅Ρ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ (2^16
)R := [A]
- Π·Π°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡA
ΠΈΠ· ram Π² ΡΠ΅Π³ΠΈΡΡΡR
[A] := R
- ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°R
ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡA
Π² ramS := R1 op R2
- Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡop
ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠ΅Π³ΠΈΡΡΡS
calc R1 op R2
- Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡop
ΠΈ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡS := R1 op R2 and set FLAGS
,calc R1 op R2 and set FLAGS
- ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ + Π²ΡΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡFLAGS
Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉop(FLAGS)
- ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°FLAGS
if C then X
- Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅X
ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅C
X; Y
- Π΄Π΅ΠΉΡΡΠ²ΠΈΡX
ΠΈY
ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ- ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅Ρ
ΡΠ°Π³ΠΎΠ², ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΡ
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ:
- load:
X
- exec:
Y
- write back:
Z
- load:
- ΠΠ»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΎ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΡΡ ΡΠ°Π³ΠΎΠ², Π΅ΡΠ»ΠΈ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠΈΠ±ΠΎΡΠ½ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ
Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΌΠ°ΡΠΈΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΈ Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
Π‘ΠΏΠΈΡΠΎΠΊ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ:
- Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ;
- Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠ»Ρ;
- ΡΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΏΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ΅ΠΊΠ° Π·Π° Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ ΡΡΠ΅ΠΊΠ°;
- ΡΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΏΠΈΡΡ Π΄Π°Π½Π½ΡΡ
Π·Π° Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ
ΠΏΠ°ΠΌΡΡΠΈ, ΡΠΊ ΡΡΠ΅ΠΉΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°
ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
move 0000 ffff
.
ΠΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ
ΠΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π½Π°Π±ΠΎΡ ΠΎΠ±ΡΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²:
FLAGS
- ΡΠ΅Π³ΠΈΡΡΡ ΡΠ»Π°Π³ΠΎΠ².PC
- ΡΠ΅Π³ΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.IR
- ΡΠ΅Π³ΠΈΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.ADDR
- ΡΠ΅Π³ΠΈΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°.
Π’Π°ΠΊΠΆΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ:
A1
, A2
, R
, M
. Π Π½ΠΈΡ
ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ° IR
.
ΠΡΠΈ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΎΠΏΡΡΠ΅Π½Ρ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΡΡΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 7 Π±Π°ΠΉΡ.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΠ΅ΠΉΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
COP Π1 Π2 Π3
. - Π Π΅Π³ΠΈΡΡΡΡ:
S
,R1
,R2
.
S
- ΡΠ΅Π³ΠΈΡΡΡ ΡΡΠΌΠΌΠ°ΡΠΎΡ, Π² Π½Π΅Π³ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.R1
,R2
- ΡΠ΅Π³ΠΈΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
add
,sub
,smul
,umul
:- load:
R1 := [A1]; R2 := [A2]
- exec:
S := R1 op R2 and set FLAGS
- write back:
[A3] := S
- load:
sdiv
,udiv
:- load:
R1 := [A1]; R2 := [A2]
- exec:
S := R1 / R2 and set FLAGS; R1 := R1 % R2
- write back:
[A3] := S; [A3 + 1] := R1
- load:
jump
:PC := A3
jeq
,jneq
,jl
,jleq
,jg
,jgeq
:- load:
R1 := [A1]; R2 := [A2]
- exec:
S := R1 - R2 and set FLAGS
- write back:
if op(FLAGS) then PC := A3
- load:
move
:[A3] := [A1]
halt
:FLAGS := HALT
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π΄Π²ΡΡ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 5 Π±Π°ΠΉΡ.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΠ΅ΠΉΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
COP Π1 Π2
. - Π Π΅Π³ΠΈΡΡΡΡ:
R1
,R2
.
add
,sub
,smul
,umul
:- load:
R1 := [A1]; R2 := [A2]
- exec:
R1 := R1 op R2 and set FLAGS
- write back:
[A1] := R1
- load:
sdiv
,udiv
:- load:
R1 := [A1]; R2 := [A2]
- exec:
R1 := R1 / R2 and set FLAGS; R2 := R1 % R2
- write back:
[A1] := R1; [A1 + 1] := R2
- load:
jump
:PC := A2
cmp
:- load:
R1 := [A1]; R2 := [A2]
- exec:
R1 := R1 - R2 and set FLAGS
- load:
jeq
,jneq
,jl
,jleq
,jg
,jgeq
:if op(FLAGS) then PC := A2
move
:[A1] := [A2]
halt
:FLAGS := HALT
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ (variable) ΡΠΎΡΠΌΠ°ΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 1 Π±Π°ΠΉΡ.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ Π² 5 Π±Π°ΠΉΡΠΎΠ².
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠ°Π·Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΅ΠΊ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
- Π Π΅Π³ΠΈΡΡΡΡ:
R1
,R2
.
ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ | ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊ | Π€ΠΎΡΠΌΠ°Ρ | ΠΠ»ΠΈΠ½Π° (Π² Π±Π°ΠΉΡΠ°Ρ ) |
---|---|---|---|
0x00 | move | move A1 A2 | 5 |
0x01 | add | add A1 A2 | 5 |
0x02 | sub | sub A1 A2 | 5 |
0x03 | smul | smul A1 A2 | 5 |
0x04 | sdiv | sdiv A1 A2 | 5 |
0x05 | comp | comp A1 A2 | 5 |
0x13 | umul | umul A1 A2 | 5 |
0x14 | udiv | udiv A1 A2 | 5 |
0x80 | jump | jump A1 | 3 |
0x81 | jeq | jeq A1 | 3 |
0x82 | jneq | jneq A1 | 3 |
0x83 | sjl | sjl A1 | 3 |
0x84 | sjgeq | sjgeq A1 | 3 |
0x85 | sjleq | sjleq A1 | 3 |
0x86 | sjg | sjg A1 | 3 |
0x93 | ujl | ujl A1 | 3 |
0x94 | ujgeq | ujgeq A1 | 3 |
0x95 | ujleq | ujleq A1 | 3 |
0x96 | ujg | ujg A1 | 3 |
0x99 | halt | halt | 1 |
add
,sub
,smul
,umul
- formatop A1 A2
:- load:
R1 := [A1]; R2 := [A2]
- exec:
R1 := R1 op R2 and set FLAGS
- write back:
[A1] := R1
- load:
sdiv
,udiv
- formatop A1 A2
:- load:
R1 := [A1]; R2 := [A2]
- exec:
R1 := R1 / R2 and set FLAGS; R2 := R1 % R2
- write back:
[A1] := R1; [A1 + 1] := R2
- load:
jump A1
:PC := A1
cmp A1 A2
:- load:
R1 := [A1]; R2 := [A2]
- exec:
R1 := R1 - R2 and set FLAGS
- load:
jeq
,jneq
,jl
,jleq
,jg
,jgeq
- formatop A
:if op(FLAGS) then PC := A
move A1 A2
:[A1] := [A2]
halt
:FLAGS := HALT
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΎΠ΄Π½ΠΎΠ°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 3 Π±Π°ΠΉΡΠ°.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΠ΅ΠΉΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
COP Π
. - Π Π΅Π³ΠΈΡΡΡΡ:
S
,R
.
Π Π΅Π³ΠΈΡΡΡΡ S
ΠΈ S1
Ρ
ΡΠ°Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ, Π° Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈ
Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠ°ΠΊ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΠΌΠ°ΡΠΈΠ½Π°Ρ
.
Π ΡΠ΅Π³ΠΈΡΡΡ R
Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
add
,sub
,smul
,umul
:- load:
R := [A]
- exec:
S := S op R and set FLAGS
- load:
sdiv
,udiv
:- load:
R := [A]
- exec:
S := S / R and set FLAGS; S1 := S % R
- load:
jump A
:PC := A
cmp
:- load:
R := [A]
- exec:
calc S - R and set FLAGS
- load:
jeq A
,jneq
,jl
,jleq
,jg
,jgeq
:if op(FLAGS) then PC := A
load A
:S := [A]
store A
:[A] := S
swap
:S := S1; S1 := S
halt
:FLAGS := HALT
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΡΡΠ΅ΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 1 Π±Π°ΠΉΡ.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ Π² 3 Π±Π°ΠΉΡΠ°.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠ°Π·Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΅ΠΊ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
- Π Π΅Π³ΠΈΡΡΡΡ:
R1
,R2
,SP
.
Π ΡΠ΅Π³ΠΈΡΡΡΡ R1
ΠΈ R2
Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ° - ΡΡΠ΅Π΅ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ
ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ [SP]
. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π°
Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°. ΠΡΠΈ ΡΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΠ° SP
ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ
Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ»ΠΎΠ²Π° 3
Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
Π‘ΡΠ΅ΠΊ ΡΠ°ΡΡΠ΅Ρ Π² ΡΡΠΎΡΠΎΠ½Ρ ΠΌΠ΅Π½ΡΡΠΈΡ
Π°Π΄ΡΠ΅ΡΠΎΠ².
ΠΠΎΠΏΡΡΠΊΠ° ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
Π·Π° Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ ΡΡΠ΅ΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° POP
ΠΏΡΠΈ ΠΏΡΡΡΠΎΠΌ
ΡΡΠ΅ΠΊΠ΅) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²Ρ ΠΌΠ°ΡΠΈΠ½Ρ.
ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ | ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊ | Π€ΠΎΡΠΌΠ°Ρ | ΠΠ»ΠΈΠ½Π° (Π² Π±Π°ΠΉΡΠ°Ρ ) |
---|---|---|---|
0x01 | add | add | 1 |
0x02 | sub | sub | 1 |
0x03 | smul | smul | 1 |
0x04 | sdiv | sdiv | 1 |
0x05 | comp | comp | 1 |
0x13 | umul | umul | 1 |
0x14 | udiv | udiv | 1 |
0x5A | push | push A | 3 |
0x5B | pop | pop A | 3 |
0x5C | dup | dup | 1 |
0x5D | swap | swap | 1 |
0x80 | jump | jump A | 3 |
0x81 | jeq | jeq A | 3 |
0x82 | jneq | jneq A | 3 |
0x83 | sjl | sjl A | 3 |
0x84 | sjgeq | sjgeq A | 3 |
0x85 | sjleq | sjleq A | 3 |
0x86 | sjg | sjg A | 3 |
0x93 | ujl | ujl A | 3 |
0x94 | ujgeq | ujgeq A | 3 |
0x95 | ujleq | ujleq A | 3 |
0x96 | ujg | ujg A | 3 |
0x99 | halt | halt | 1 |
add
,sub
,smul
,umul
:- load:
R1 := [SP+3]; R2 := [SP]
- exec:
R1 := R1 op R2 and set FLAGS; SP := SP + 3
- write back:
[SP] := R1
- load:
sdiv
,udiv
:- load:
R1 := [SP+3]; R2 := [SP]
- exec:
R1 := R1 / R2 and set FLAGS; R2 := R1 % R2
- write back:
[SP+3] := R1; [SP] := R2
- load:
jump A
:PC := A
cmp
:- load:
R1 := [SP+3]; R2 := [SP]
- exec:
calc R1 - R2 and set FLAGS; SP := SP + 6
- load:
jeq A
,jneq
,jl
,jleq
,jg
,jgeq
:if op(FLAGS) then PC := A
push A
:SP := SP - 3
[SP] := [A]
pop A
:[A] := [SP]
SP := SP + 3
dup
:SP := SP - 3
[SP] := [SP + 3]
swap
:[SP + 3] := [SP]; [SP] := [SP + 3]
halt
:FLAGS := HALT
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π±Π΅Π·Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 2 Π±Π°ΠΉΡΠ°.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡa.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΠ΅ΠΉΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
COP Π
. Π Π°Π·ΠΌΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡA
Π² ΠΊΠΎΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ - 1 Π±Π°ΠΉΡ. - Π Π΅Π³ΠΈΡΡΡΡ:
R1
,R2
,SP
.
Π ΡΠ΅Π³ΠΈΡΡΡΡ R1
ΠΈ R2
Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ° - ΡΡΠ΅Π΅ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ
ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ [SP]
. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π°
Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°. ΠΡΠΈ ΡΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΠ° SP
ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ
Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
Π‘ΡΠ΅ΠΊ ΡΠ°ΡΡΠ΅Ρ Π² ΡΡΠΎΡΠΎΠ½Ρ ΠΌΠ΅Π½ΡΡΠΈΡ
Π°Π΄ΡΠ΅ΡΠΎΠ².
ΠΠΎΠΏΡΡΠΊΠ° ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
Π·Π° Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ ΡΡΠ΅ΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° POP
ΠΏΡΠΈ ΠΏΡΡΡΠΎΠΌ
ΡΡΠ΅ΠΊΠ΅) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²Ρ ΠΌΠ°ΡΠΈΠ½Ρ.
ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ: ΡΠ΅Π³ΠΈΡΡΡ PC
ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ»ΠΈ
ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° A
Ρ ΡΡΠ΅ΡΠΎΠΌ Π·Π½Π°ΠΊΠ°.
ΠΠ²ΠΎΠ΄ ΠΈ Π²ΡΠ²ΠΎΠ΄
ΠΠ²ΠΎΠ΄ ΠΈ Π²ΡΠ²ΠΎΠ΄ Π΄Π»Ρ mm-0 ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ°Π·Ρ Π½Π° ΡΡΠ΅ΠΊ. ΠΡΠΈ ΡΡΠΎΠΌΠΌ
Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°Ρ
.input N
ΠΈ .output N
Π°ΡΠ³ΡΠΌΠ΅Π½Ρ N
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅ΠΊΠ°, Π° Π½Π΅ Π°Π΄ΡΠ΅Ρ. ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ ΠΈ Π²ΡΠ³ΡΡΠΆΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ°
Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΠΈΠΈ Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π²ΠΎΠ΄ 1 2 3
Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ ΡΡΠ΅ΠΊ Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅: 1 2 3 <- SP
.
Π Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° .output 3
Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΊΠ° Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅: 3 2 1
.
add
,sub
,smul
,umul
:- load:
R1 := [SP + A]; R2 := [SP]
- exec:
R1 := R1 op R2 and set FLAGS
- write back:
[SP] := R1
- load:
sdiv
,udiv
:- load:
R1 := [SP + A]; R2 := [SP]
- exec:
R1 := R1 / R2 and set FLAGS; R2 := R1 % R2; SP := SP - 1
- write back:
[SP + 1] := R1; [SP] := R2
- load:
jump
:PC := PC + A
-A
ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ 16 Π±ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Ρ ΡΡΠ΅ΡΠΎΠΌ Π·Π½Π°ΠΊΠ°cmp
:- load:
R1 := [SP + A]; R2 := [SP]
- exec:
calc R1 - R2 and set FLAGS; SP := SP + 1
- load:
jeq
,jneq
,jl
,jleq
,jg
,jgeq
:if op(FLAGS) then PC := PC + A
push
:SP := SP - 1
[SP] := A
-A
ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ 16 Π±ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Ρ ΡΡΠ΅ΡΠΎΠΌ Π·Π½Π°ΠΊΠ°
pop
:SP := SP + A
dup
:R1 := [SP + A]
SP := SP - 1
[SP] := R1
swap
:[SP + A] := [SP]; [SP] := [SP + A]
halt 00
:FLAGS := HALT
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ (registers)
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 2 Π±Π°ΠΉΡΠ°.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΠΎ ΡΠ»ΠΎΠ²ΠΎΠΌ Π² 4 Π±Π°ΠΉΡΠ°.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠ°Π·Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΅ΠΊ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΡ ΡΠ΅Π³ΠΈΡΡΡ-ΡΠ΅Π³ΠΈΡΡΡ ΠΈ ΡΠ΅Π³ΠΈΡΡΡ-ΠΏΠ°ΠΌΡΡΡ.
ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΅Π³ΠΈΡΡΡ-ΡΠ΅Π³ΠΈΡΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°Ρ
COP RA1 RA2
ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 2 Π±Π°ΠΉΡΠ°. ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΅Π³ΠΈΡΡΡ-ΠΏΠ°ΠΌΡΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°ΡCOP R 0 A
ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 4 Π±Π°ΠΉΡΠ°. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°ΡCOP 0 0 A
ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 4 Π±Π°ΠΉΡΠ°. - Π Π΅Π³ΠΈΡΡΡΡ:
R0-RF
,S
,S1
.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΡΡΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
- Π½Π°Π»ΠΈΡΠΈΠ΅ Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΡΡ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ R0-RF
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
S
, S1
- Π½Π΅Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΠΠ£.
ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ | ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊ | Π€ΠΎΡΠΌΠ°Ρ | ΠΠ»ΠΈΠ½Π° (Π² Π±Π°ΠΉΡΠ°Ρ ) |
---|---|---|---|
0x00 | load | load R 0 A | 4 |
0x01 | add | add R 0 A | 4 |
0x02 | sub | sub R 0 A | 4 |
0x03 | smul | smul R 0 A | 4 |
0x04 | sdiv | sdiv R 0 A | 4 |
0x05 | comp | comp R 0 A | 4 |
0x13 | umul | umul R 0 A | 4 |
0x14 | udiv | udiv R 0 A | 4 |
0x10 | store | store R 0 A | 4 |
0x20 | rmove | rmove RX RY | 2 |
0x21 | radd | radd RX RY | 2 |
0x22 | rsub | rsub RX RY | 2 |
0x23 | rsmul | rsmul RX RY | 2 |
0x24 | rsdiv | rsdiv RX RY | 2 |
0x25 | rcomp | rcomp RX RY | 2 |
0x33 | rumul | rumul RX RY | 2 |
0x34 | rudiv | rudiv RX RY | 2 |
0x80 | jump | jump 00 A | 4 |
0x81 | jeq | jeq 00 A | 4 |
0x82 | jneq | jneq 00 A | 4 |
0x83 | sjl | sjl 00 A | 4 |
0x84 | sjgeq | sjgeq 00 A | 4 |
0x85 | sjleq | sjleq 00 A | 4 |
0x86 | sjg | sjg 00 A | 4 |
0x93 | ujl | ujl 00 A | 4 |
0x94 | ujgeq | ujgeq 00 A | 4 |
0x95 | ujleq | ujleq 00 A | 4 |
0x96 | ujg | ujg 00 A | 4 |
0x99 | halt | halt 00 | 2 |
- register-memory
add
,sub
,smul
,umul
- formatop R 0 A
:- load:
S := R; S1 := [A]
- exec:
S := S op S1 and set FLAGS
- write back:
R := S
- load:
- register-memory
sdiv
,udiv
- formatop R 0 A
,R_next
- ΡΠ΅Π³ΠΈΡΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌR
; Π·Π°RF
ΡΠ»Π΅Π΄ΡΠ΅ΡR0
:- load:
S := R; S1 := [A]
- exec:
S := S / S1 and set FLAGS; S1 := S % S1
- write back:
R, R_next := S, S1
- load:
- register-memory
comp R 0 A
:- load:
S := S; S1 := [A]
- exec:
S := S - S1 and set FLAGS
- load:
load R 0 A
:R := [A]
store R 0 A
:[A] := R
- register-register
radd
,rsub
,rsmul
,rumul
- formatop X Y
:- load:
S := R_X; S1 := R_Y
- exec:
S := S op S1 and set FLAGS
- write back:
R_X := S
- load:
- register-register
rsdiv
,rudiv
- formatop X Y
:- load:
S := R_X; S1 := R_Y
- exec:
S := S / S1 and set FLAGS; S1 := S % S1
- write back:
R_X := S; R_next := S1
- load:
- register-register
rcomp X Y
:- load:
S := R_X; S1 := R_Y
- exec:
S := S - S1 and set FLAGS
- load:
- register-register
rmove X Y
:R_X := R_Y
jump A
:PC := A
jeq
,jneq
,jl
,jleq
,jg
,jgeq
- formatop 00 A
:if op(FLAGS) then PC := A
halt
:FLAGS := HALT
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ Π°Π΄ΡΠ΅ΡΠΎΠ² (modification).
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 2 Π±Π°ΠΉΡΠ°.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΠΎ ΡΠ»ΠΎΠ²ΠΎΠΌ Π² 4 Π±Π°ΠΉΡΠ°.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠ°Π·Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΅ΠΊ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΡ ΡΠ΅Π³ΠΈΡΡΡ-ΡΠ΅Π³ΠΈΡΡΡ ΠΈ ΡΠ΅Π³ΠΈΡΡΡ-ΠΏΠ°ΠΌΡΡΡ.
ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΅Π³ΠΈΡΡΡ-ΡΠ΅Π³ΠΈΡΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°Ρ
COP RA1 RA2
ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 2 Π±Π°ΠΉΡΠ°. ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΅Π³ΠΈΡΡΡ-ΠΏΠ°ΠΌΡΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°ΡCOP R M A
ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 4 Π±Π°ΠΉΡΠ°. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°ΡCOP 0 0 A
ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 4 Π±Π°ΠΉΡΠ°. - Π Π΅Π³ΠΈΡΡΡΡ:
R0-RF
,S
,S1
.
Π―Π²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ.
ΠΠ΄ΡΠ΅ΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΊΠΈΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ:
- ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ
M
(ΠΎΡ 0x0 Π΄ΠΎ 0xF):R_M
. ΠΡΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°M
ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅R_0
ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°R0
. - ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡ Π°Π΄ΡΠ΅Ρ
A
(ΠΎΡ 0x0000 Π΄ΠΎ 0xFFFF):R_M + A
. - ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Π½Π° 2^16:
(R_M + A) % 2^16
. - ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΈΠ· ΠΠΠ£ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ:
[R_M + A]
.
ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ | ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊ | Π€ΠΎΡΠΌΠ°Ρ | ΠΠ»ΠΈΠ½Π° (Π² Π±Π°ΠΉΡΠ°Ρ ) |
---|---|---|---|
0x00 | load | load R M A | 4 |
0x01 | add | add R M A | 4 |
0x02 | sub | sub R M A | 4 |
0x03 | smul | smul R M A | 4 |
0x04 | sdiv | sdiv R M A | 4 |
0x05 | comp | comp R M A | 4 |
0x11 | addr | addr R M A | 4 |
0x13 | umul | umul R M A | 4 |
0x14 | udiv | udiv R M A | 4 |
0x10 | store | store R M A | 4 |
0x20 | rmove | rmove RX RY | 2 |
0x21 | radd | radd RX RY | 2 |
0x22 | rsub | rsub RX RY | 2 |
0x23 | rsmul | rsmul RX RY | 2 |
0x24 | rsdiv | rsdiv RX RY | 2 |
0x25 | rcomp | rcomp RX RY | 2 |
0x33 | rumul | rumul RX RY | 2 |
0x34 | rudiv | rudiv RX RY | 2 |
0x80 | jump | jump 0 M A | 4 |
0x81 | jeq | jeq 0 M A | 4 |
0x82 | jneq | jneq 0 M A | 4 |
0x83 | sjl | sjl 0 M A | 4 |
0x84 | sjgeq | sjgeq 0 M A | 4 |
0x85 | sjleq | sjleq 0 M A | 4 |
0x86 | sjg | sjg 0 M A | 4 |
0x93 | ujl | ujl 0 M A | 4 |
0x94 | ujgeq | ujgeq 0 M A | 4 |
0x95 | ujleq | ujleq 0 M A | 4 |
0x96 | ujg | ujg 0 M A | 4 |
0x99 | halt | halt 00 | 2 |
addr R M A
:R := R_M + A
- register-memory
add
,sub
,smul
,umul
- formatop R M A
:- load:
S := R; S1 := [R_M + A]
- exec:
S := S op S1 and set FLAGS
- write back:
R := S
- load:
- register-memory
sdiv
,udiv
- formatop R M A
,R_next
- ΡΠ΅Π³ΠΈΡΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌR
; Π·Π°RF
ΡΠ»Π΅Π΄ΡΠ΅ΡR0
:- load:
S := R; S1 := [R_M + A]
- exec:
S := S / S1 and set FLAGS; S1 := S % S1
- write back:
R, R_next := S, S1
- load:
- register-memory
comp R M A
:- load:
S := S; S1 := [R_M + A]
- exec:
S := S - S1 and set FLAGS
- load:
load R M A
:R := [R_M + A]
store R M A
:[R_M + A] := R
- register-register
radd
,rsub
,rsmul
,rumul
- formatop X Y
:- load:
S := R_X; S1 := R_Y
- exec:
S := S op S1 and set FLAGS
- write back:
R_X := S
- load:
- register-register
rsdiv
,rudiv
- formatop X Y
:- load:
S := R_X; S1 := R_Y
- exec:
S := S / S1 and set FLAGS; S1 := S % S1
- write back:
R_X := S; R_next := S1
- load:
- register-register
rcomp X Y
:- load:
S := R_X; S1 := R_Y
- exec:
S := S - S1 and set FLAGS
- load:
- register-register
rmove X Y
:R_X := R_Y
jump A
:PC := R_M + A
jeq
,jneq
,jl
,jleq
,jg
,jgeq
- formatop 0 M A
:if op(FLAGS) then PC := R_M + A
halt
:FLAGS := HALT
- E. Π. ΠΠΎΡΠ΄Π°ΡΠ΅Π½ΠΊΠΎΠ²Π° - ΠΠΎΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΠΠ
- Π. Π. ΠΠΎΡΠ΄Π°ΡΠ΅Π½ΠΊΠΎΠ²Π° - ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΠΠ. Π£ΡΠ΅Π±Π½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΡΠΎΠ±ΠΈΠ΅
- Π. Π. ΠΠ°ΡΠ»Π° - ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΠΠ ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- Π£ΡΠ΅Π±Π½Π°Ρ ΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π£Π-3
- Π‘Π±ΠΎΡΠ½ΠΈΠΊ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡΡΠ΅Π±Π½ΡΠΌ ΠΌΠ°ΡΠΈΠ½Π°ΠΌ
- ΠΠ΅Π·Π°Π΄ΡΠ΅ΡΠ½Π°Ρ Π£Π-0 archieved