modelmachine
Model machine emulator
TODO
- ΠΡΠΎΠ²Π΅ΡΠΈΡΡ test.alu.swap
- Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ
- ΠΠΎΠ΄ΡΠΌΠ°ΡΡ Π΅ΡΠ΅ ΠΎ mock Π² ΡΠ΅ΡΡΠ°Ρ
- ΠΠ΅ΡΠ΅Π΄Π΅Π»Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
- ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
- Π Π°ΡΡΠΈΡΠΈΡΡ howto
ΠΠΎΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°
ΠΠΎΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° - ΡΡΠΎ ΡΠΈΡΡΠ°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΏΠΎΠ½ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ². ΠΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΎΠ½Π° Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌ Π²Π½ΠΈΠ·Ρ.
Quickstart
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
# python3 -m pip install --upgrade modelmachine
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° modelmachine
.
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ modelmachine test
. ΠΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°
ΡΠ΅ΡΠΈΡ ΡΠ΅ΡΡΠΎΠ², Π²ΡΠ΅ ΡΠ΅ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡΡ ΡΡΠΏΠ΅Ρ
ΠΎΠΌ.
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ , ΠΏΠΎ ΠΈΡ ΠΎΠ±ΡΠ°Π·Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½. ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
$ modelmachine run program.mmach
Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΎΡΠ»Π°Π΄ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
$ modelmachine debug program.mmach
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ (mmasm) Π² Π΅Π΅ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄.
$ modelmachine asmg source.mmasm result.mmach
ΠΡΠΈΠΌΠ΅Ρ
mm3
[config]
input = 0x100,0x101
output = 0x103
[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
[input]
-123 456
- ΠΡΠ΅, ΡΡΠΎ ΠΈΠ΄Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΈΠΌΠ²ΠΎΠ»Π°
;
- ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ. - ΠΠ΅ΡΠ²Π°Ρ ΡΡΡΠΎΡΠΊΠ° - ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ ΡΠΌΠΎΡΡΠΈ Π½ΠΈΠΆΠ΅.
- ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ΄ΡΠΈ ΡΠ΅ΠΊΡΠΈΡ
config
, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ°Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π²Π²ΠΎΠ΄ ΠΈ Π²ΡΠ²ΠΎΠ΄. - ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΠΈΡ ΠΊΠΎΠ΄Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π½Π°Π±ΠΎΡ 16-ΡΠΈΡΠ½ΡΡ ΡΠΈΡΠ΅Π», Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π² ΠΏΠ°ΠΌΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΡΠΎΠΏΡΡΠΊΠ°ΡΡ ΡΠ°ΡΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Π½Π΅Π»ΡΠ·Ρ. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΡΠ»ΠΎΠ²Ρ Π² ΡΡΡΠΎΠΊΠ΅, ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡ ΡΠ°Π·Π±ΠΈΠ²Π°Ρ ΡΠ°Π·ΡΡΠ΄Ρ Π½Π° ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ.
- ΠΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ.
- ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΈΠ΄Π΅Ρ ΡΠ΅ΠΊΡΠΈΡ Π²Π²ΠΎΠ΄Π° - Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ΅Π», ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠΌΠΈ
ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ. ΠΡ
ΡΠΈΡΠ»ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΡΠΈΡΠ»ΠΎΠΌ ΡΡΠ΅Π΅ΠΊ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅
input
Π² ΡΠ΅ΠΊΡΠΈΠΈconfig
. - ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΠΈΡ Π²Π²ΠΎΠ΄Π° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΏΡΡΡΠ°Ρ, ΡΠΎ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΡΠ°ΡΡΡΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π° Π΄ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
- ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π±ΡΠ΄ΡΡ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Ρ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π° ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ,
Π»Π΅ΠΆΠ°ΡΠΈΠ΅ Π² ΡΡΠ΅ΠΉΠΊΠ°Ρ
, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ
Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅
output
Π² ΡΠ΅ΠΊΡΠΈΠΈconfig
.
Π―Π·ΡΠΊ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°
ΠΠ»Ρ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΠΈΠ΅ΠΉ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ. ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π½Π΅ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΏΡΠ΅Π΄Π²ΠΎΡΡΡΡΡΡ ΡΠΎΡΠΊΠΎΠΉ. ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°:
-
.config ΡΠΈΡΠ»ΠΎ
- Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡΠ»ΠΎ
. -
.code
- Π΄Π°Π»ΡΡΠ΅ ΠΈΠ΄Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π°Π΄ΡΠ΅ΡΠ°0x00
. -
.word ΡΠΏΠΈΡΠΎΠΊ_ΡΠΈΡΠ΅Π»
- ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΡΠ΅Π» Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠ°ΠΊ Π΅ΡΡΡ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΠ°ΡΡ ΡΡΠ΅Π΅ΠΊ. -
.dump ΠΈΠΌΡ_ΠΌΠ΅ΡΠΊΠΈ
- ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡΠΈΠΌΡ_ΠΌΠ΅ΡΠΊΠΈ
, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π΄Π²ΡΡ ΡΡΠ΅Π΅ΠΊ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ ΡΠΈΡΠ»ΠΎ. ΠΠ»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΎΡΠΌΠ°Ρ.dump ΠΈΠΌΡ_ΠΌΠ΅ΡΠΊΠΈ(ΡΠ°Π·ΠΌΠ΅Ρ)
. Π’Π°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠΊΠΈ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:.dump array(5), sum
ΠΠΎΠ΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ΅ ΠΆΠ΅, ΡΡΠΎ ΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ² mmm
. ΠΠΌΡ ΠΌΠ΅ΡΠΊΠΈ - ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΡ
Π±ΡΠΊΠ², ΡΠΈΡΡ ΠΈ Π·Π½Π°ΠΊΠ° _
, ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ - Π½Π΅ ΡΠΈΡΡΠ°.
ΠΠ΄ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π»ΠΈΠ±ΠΎ ΠΈΠΌΡ ΠΌΠ΅ΡΠΊΠΈ, Π»ΠΈΠ±ΠΎ ΡΡΡΠΎΠΊΡ Π²ΠΈΠ΄Π°
ΠΈΠΌΡ_ΠΌΠ΅ΡΠΊΠΈ(ΠΈΠΌΡ_ΡΠ΅Π³ΠΈΡΡΡΠ°)
, Π³Π΄Π΅ ΠΈΠΌΡ_ΡΠ΅Π³ΠΈΡΡΡΠ°
- ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ R0-RF
.
ΠΠ²ΠΎΠ΄ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ.
.config 0x100
sum: .word 0
array: .word -1, 2, 3, 4, 5
zero: .word 0
size_word: .word 2
size_array: .word 10
.dump array(5), sum
.code
load R2, size_word
load RF, size_array
load R5, zero
rsub R6, R6
rpt: add R5, array(R6)
radd R6, R2
rcomp R6, RF
jneq rpt
store R5, sum
halt
ΠΠ½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ
ΠΠ°Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ°Π·Π±ΠΈΡΡΡ Π½Π° ΡΠ°ΠΉΠ»Ρ-ΠΌΠΎΠ΄ΡΠ»ΠΈ:
-
memory.py
- ΠΏΠ°ΠΌΡΡΡ; Π΄Π΅Π»ΠΈΡΡΡ Π½Π° Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ°:ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²Π°Ρ
ΠΈΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ
; ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ Π΄Π΅Π»ΠΈΡΡΡ Π½Π°little-endian
ΠΈbig-endian
-
numeric.py
- ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½Π°Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ° Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ Π΄Π²ΠΎΠΈΡΠ½ΡΡ Π·Π½Π°ΠΊΠΎΠ² -
alu.py
- Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΎ-Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ΅ΡΠΊΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ:R1
,R2
,S
,FLAGS
ΠΈPC
. -
cu.py
- ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡΠ΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅Π΅ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΠ΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΎ-Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ -
io.py
- ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° -
cpu.py
- ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ² Π² Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ -
asm.py
- Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ Π°Π΄ΡΠ΅ΡΠΎΠ²
ΠΠ΄Π΅ΡΡ Π΄Π°Π½ΠΎ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠ° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄Π°ΠΌ.
memory.py
AbstractMemory
- ΠΊΠ»Π°ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ
Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ ΡΠ°ΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ: fetch
ΠΈ put
, ΠΊΠΎΡΠΎΡΡΠ΅
ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π° Π²Ρ
ΠΎΠ΄ Π°Π΄ΡΠ΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΡΠΎΠ², Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ,
ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΊΡΠ°ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΡΠ΅ΠΉΠΊΠΈ (ΡΠ»ΠΎΠ²Π°). Π‘ΡΡΠΎΠ³ΠΎ
ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅Π·Π΄Π΅.
RandomAccessMemory
- ΠΊΠ»Π°ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΏΠ°ΠΌΡΡΡ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°. ΠΡΠΈ
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΈΡ
ΡΠ»ΠΎΠ². ΠΡΠ»ΠΈ
is_protected=True
, ΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ· Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ
Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΈΠ½Π°ΡΠ΅, ΠΌΠ΅ΡΠΎΠ΄ fetch
Π²Π΅ΡΠ½Π΅Ρ Π½ΡΠ»Ρ.
RegisterMemory
- ΠΊΠ»Π°ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²ΡΡ ΠΏΠ°ΠΌΡΡΡ. ΠΠ΅ΡΠΎΠ΄ add_register
Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ ΡΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΉ
ΡΠ΅Π³ΠΈΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ.
numeric.py
ΠΠ»Π°ΡΡ Integer ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ: +
, -
, *
, /
, %
, ==
, !=
. ΠΠ»ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ
get_value
ΠΈ get_data
. ΠΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠΎΡΠΎΠ½Ρ Π½ΡΠ»Ρ.
alu.py
ΠΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΎ-Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ΅ΡΠΊΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ:
-
R1
,R2
,S
Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. -
FLAGS
Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ»Π°Π³ΠΎΠ² ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. -
PC
ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ ΡΡΠ΄Π° Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°R1
ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°Ρ .
Π‘Ρ Π΅ΠΌΠ° ΡΠ°Π±ΠΎΡΡ:
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
add
,sub
,smul
,sdiv
,umul
,udiv
,sdivmod
,udivmod
. ΠΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄divmod
Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:S := R1 op R2
. ΠΠ»ΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π³ΠΈΡΡΡFLAGS
- ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ»Π°Π³ΠΎΠ² CF, OF, SF ΠΈ ZF. -
add
ΠΈsub
- ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ. -
smul
ΠΈsdiv
- Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ. -
umul
ΠΈudiv
- Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ. -
sdivmod
ΠΈudivmod
- Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΡΡΠ°ΡΠΊΠΎΠΌ.S := R1 / R2; R1 := R1 % R2
. - ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ
move
:S := R1
. - ΠΠΎΠΌΠ°Π½Π΄Ρ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π°
jump
ΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°cond_jump
ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎ ΡΡ Π΅ΠΌΠ΅PC := R1
, ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡcond_jump
Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ. - ΠΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΡΠ°Π½ΠΎΠ²Π°
halt
ΠΏΡΠΎΡΡΠΎ Π²ΡΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ»Π°Π³ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ HALT Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΡΠ»Π°Π³ΠΎΠ²
cu.py
Π£ΠΏΡΠ°Π²Π»ΡΡΡΠ΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ.
AbstractControlUnit
ΠΠ±ΡΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎ ΡΡ Π΅ΠΌΠ΅:
-
fetch_and_decode
- Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ° ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅PC
Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡRI
, Π·Π°ΡΠ΅ΠΌ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π°Π΄ΡΠ΅ΡΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ², Π·Π°ΡΠ΅ΠΌ ΡΡΠ΅ΡΡΠΈΠΊPC
ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π΄Π»ΠΈΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΡΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. -
load
- Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΡΠΈΡΠ°Π½Π½ΡΠΌ Π°Π΄ΡΠ΅ΡΠ°ΠΌ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°R1
ΠΈR2
-
execute
- Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΎ-Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ ΡΡ Π΅ΠΌΠ° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. -
write_back
- ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΡΠ΄Π° ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΡΠΈΡΠ°Π½Π½ΡΡ Π² Π½Π°ΡΠ°Π»Π΅).
ΠΡΠ΅ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² AbstractControlUnit
.
Π’Π°ΠΊΠΆΠ΅ Π² Π½Π΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ
ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ:
-
step
- ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ Π²ΡΡΠ΅. -
get_status
- Π²Π΅ΡΠ½ΡΡΡ ΡΡΠ°ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° (Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ/ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½). ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΎΡΡΠ°Π½ΠΎΠ²Π°halt
. -
run
- Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ, ΠΏΠΎΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½.
ΠΠ°Π»Π΅Π΅, Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΈ AbstractControlUnit
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ 4 ΠΌΠ΅ΡΠΎΠ΄Π°.
io.py
Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°.
- ΠΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π°Π΄ΡΠ΅Ρ Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
- ΠΠ΅ΡΠΎΠ΄
load_source
Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ½Π°Π΄ΡΠ°ΡΠΈΡΠΈΡΠ½ΡΡ ΡΠ»ΠΎΠ² ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ. - ΠΠ΅ΡΠΎΠ΄
load_data
Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ (ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΡΠΈΡΠ΅Π») ΠΏΠΎ Π΄Π°Π½Π½ΡΠΌ Π°Π΄ΡΠ΅ΡΠ°ΠΌ. - ΠΠ΅ΡΠΎΠ΄Ρ
get_int
ΠΈput_int
ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°. Π Π°Π·ΠΌΠ΅Ρ ΡΠ»ΠΎΠ²Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
cpu.py
Π€ΠΈΠ½Π°Π»ΡΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ° Π²ΡΠ΅Ρ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² Π² Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΡΡΠ°Π²Π½ΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΡΡΡΠΏ
ΠΊ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π·
cpu.io_unit
, ΠΊ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌ ΡΠ΅ΡΠ΅Π·cpu.registers
ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. -
load_program
- Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ Π΄Π°Π½Π½ΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ. -
print_result
- ΠΏΠ΅ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. -
run_file
- Π·Π°Π³ΡΡΠ·ΠΊΠ°, ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ
ΠΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ?
- ΠΡΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΡΡΠΎΠΉΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ ΠΈΡ ΠΊΠΎΠ΄Ρ.
- ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΡ Π² ΡΠ°Π±Π»ΠΈΡΡ Π½ΠΈΠΆΠ΅ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΅ΡΠ΅ Π½ΠΈΠΆΠ΅.
- ΠΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ.
- ΠΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ CPU ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ,
Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ
CPU_LIST
Π² ΡΠ°ΠΉΠ»Π΅cpu.py
. - ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ
ΡΡΠΈΡ
ΠΊΠ»Π°ΡΡΠΎΠ² Π² ΡΠ°ΠΉΠ»Ρ
tests/test_cu.py
ΠΈtests/test_cpu.py
. - ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Π² ΠΏΠ°ΠΏΠΊΡ
samples
. - ΠΡΠΈΡΠ»Π°ΡΡ pull request.
Π’Π°Π±Π»ΠΈΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½
OPCODE | mm-3 | mm-2 | mm-v | mm-1 | mm-m |
---|---|---|---|---|---|
0x00 | move | move | move | load | load |
0x01 | add | add | add | add | add |
0x02 | sub | sub | sub | sub | sub |
0x03 | smul | smul | smul | smul | smul |
0x04 | sdiv | sdiv | sdiv | sdiv | sdiv |
0x05 | comp | comp | comp | comp | |
0x13 | umul | umul | umul | umul | umul |
0x14 | udiv | udiv | udiv | udiv | udiv |
0x10 | store | store | |||
0x20 | swap | move | |||
0x21 | radd | ||||
0x22 | rsub | ||||
0x23 | rsmul | ||||
0x24 | rsdiv | ||||
0x25 | rcomp | ||||
0x33 | rumul | ||||
0x34 | rudiv | ||||
0x80 | jump | jump | jump | jump | jump |
0x81 | jeq | jeq | jeq | jeq | jeq |
0x82 | jneq | jneq | jneq | jneq | jneq |
0x83 | sjl | sjl | sjl | sjl | sjl |
0x84 | sjgeq | sjgeq | sjneq | sjgeq | sjgeq |
0x85 | sjleq | sjleq | sjleq | sjleq | sjleq |
0x86 | sjg | sjg | sjg | sjg | sjg |
0x93 | ujl | ujl | ujl | ujl | ujl |
0x94 | ujgeq | ujgeq | ujgeq | ujgeq | ujgeq |
0x95 | ujleq | ujleq | ujleq | ujleq | ujleq |
0x96 | ujg | ujg | ujg | ujg | ujg |
0x99 | 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 |
mm-3
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΡΡΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 7 Π±Π°ΠΉΡ.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΠ΅ΠΉΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
ΠΠΠ Π1 Π2 Π3
. - Π Π΅Π³ΠΈΡΡΡΡ:
S
,R1
,R2
,FLAGS
,PC
,RI
,ADDR
.
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²:
-
S
- ΡΠ΅Π³ΠΈΡΡΡ ΡΡΠΌΠΌΠ°ΡΠΎΡ, Π² Π½Π΅Π³ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. -
R1
,R2
- ΡΠ΅Π³ΠΈΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. -
FLAGS
- ΡΠ΅Π³ΠΈΡΡΡ ΡΠ»Π°Π³ΠΎΠ². -
PC
- ΡΠ΅Π³ΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. -
RI
- ΡΠ΅Π³ΠΈΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. -
ADDR
- ΡΠ΅Π³ΠΈΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ (add
, sub
,
smul
, sdiv
, umul
, udiv
) ΠΠΠ A1 A2 A3
:
- ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ
Π1
Π² ΡΠ΅Π³ΠΈΡΡΡR1
(R1 := [A1]
). - ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ
Π2
Π² ΡΠ΅Π³ΠΈΡΡΡR2
(R2 := [A2]
). - ΠΠ°ΠΏΡΡΡΠΈΡΡ Π² ΠΠΠ£ ΡΡ
Π΅ΠΌΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΡ
ΠΠΠ
. ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°
S
Π² ΡΡΠ΅ΠΉΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌΠ3
. ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄Π΅Π»Π΅Π½ΠΈΡ, Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π΄Π²Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°: ΡΠ°ΡΡΠ½ΠΎΠ΅ β Π² ΡΡΠ΅ΠΉΠΊΡ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌΠ3
, ΠΎΡΡΠ°ΡΠΎΠΊ β Π² ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΠ΅ΠΉΠΊΡ, ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ(Π3+1) mod 16^4
.
-
jump A1 A2 A3
:PC := A3
- Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ: ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ
R1
ΠΈR2
, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡPC := A3
. - ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ
move
: [A3] := R1.
mm-2
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π΄Π²ΡΡ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 5 Π±Π°ΠΉΡ.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΠ΅ΠΉΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
ΠΠΠ Π1 Π2
. - Π Π΅Π³ΠΈΡΡΡΡ:
R1
,R2
,FLAGS
,PC
,RI
,ADDR
.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ add
, sub
, smul
, sdiv
, umul
,
udiv
:
R1 := [A1], R2 := [A2]
R1 := R1 op R2
[A1] := R1
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ cmp
:
R1 := [A1], R2 := [A2]
ΠΠ°ΠΏΡΡΡΠΈΡΡ Π² ΠΠΠ£ ΡΡ Π΅ΠΌΡ
sub
, Π²ΡΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡFLAGS
-
jump A1 A2
:PC := A2
- Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ Π΄Π΅Π»Π°ΡΡΡΡ ΠΈΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°
FLAGS
-
move A1 A2
:[A1] := [A2]
- ΠΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΡΠ°Π½ΠΎΠ²Π°
halt
Π²Π·Π²ΠΎΠ΄ΠΈΡ ΡΠ»Π°Π³HALT
Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅FLAGS
mm-v
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ (variable) ΡΠ°ΡΠΌΠ°ΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 1 Π±Π°ΠΉΡ.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ Π² 5 ΡΡΠ΅Π΅ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠ°Π·Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΅ΠΊ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
- Π Π΅Π³ΠΈΡΡΡΡ:
R1
,R2
,FLAGS
,PC
,RI
,ADDR
.
Π’Π°Π±Π»ΠΈΡΠ° ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄:
ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ | ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊ | Π€ΠΎΡΠΌΠ°Ρ | ΠΠ»ΠΈΠ½Π° (Π² Π±Π°ΠΉΡΠ°Ρ ) |
---|---|---|---|
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
, sdiv
, umul
,
udiv
:
R1 := [A1], R2 := [A2]
R1 := R1 op R2
[A1] := S
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ cmp
:
R1 := [A1], R2 := [A2]
ΠΠ°ΠΏΡΡΡΠΈΡΡ Π² ΠΠΠ£ ΡΡ Π΅ΠΌΡ
sub
, Π²ΡΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡFLAGS
-
jump A1
:PC := A1
- Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ Π΄Π΅Π»Π°ΡΡΡΡ ΠΈΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°
FLAGS
-
move A1 A2
:[A1] := [A2]
- ΠΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΡΠ°Π½ΠΎΠ²Π°
halt
Π²Π·Π²ΠΎΠ΄ΠΈΡ ΡΠ»Π°Π³HALT
Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅FLAGS
mm-1
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΎΠ΄Π½ΠΎΠ°Π΄ΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 3 Π±Π°ΠΉΡΠ°.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΠ΅ΠΉΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
ΠΠΠ Π
. - Π Π΅Π³ΠΈΡΡΡΡ:
S
,R
,S1
,FLAGS
,PC
,RI
.
Π Π΅Π³ΠΈΡΡΡΡ S
ΠΈ S1
Ρ
ΡΠ°Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ, Π° Π½Π΅ Π·Π°ΡΠΈΡΠ°ΡΡΡΡ ΠΏΡΠΈ
Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠ°Π½ΡΡΠ΅. Π ΡΠ΅Π³ΠΈΡΡΡ R
Π·Π°ΠΊΠ³ΡΡΠΆΠ°Π΅ΡΡΡ
ΠΎΠΏΠ΅ΡΠ°Π½Π΄ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ (ΠΈΡΠΊΠ»ΡΡΠ°Ρ Π΄Π΅Π»Π΅Π½ΠΈΠ΅) add
, sub
, smul
,
umul
:
R := [A]
S := S op R
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π΅Π»Π΅Π½ΠΈΡ sdivmod
, udivmod
:
R := [A]
S := S / R; S1 := S % R
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ cmp
:
R := [A]
ΠΠ°ΠΏΡΡΡΠΈΡΡ Π² ΠΠΠ£ ΡΡ Π΅ΠΌΡ
sub
, Π²ΡΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡFLAGS
-
jump A
:PC := A
- Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ Π΄Π΅Π»Π°ΡΡΡΡ ΠΈΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°
FLAGS
-
load A
:S := [A]
-
store A
:[A] := S
-
swap
:S, S1 := S1, S
- ΠΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΡΠ°Π½ΠΎΠ²Π°
halt
Π²Π·Π²ΠΎΠ΄ΠΈΡ ΡΠ»Π°Π³HALT
Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅FLAGS
mm-m
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ Π°Π΄ΡΠ΅ΡΠΎΠ² (modification).
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 2 Π±Π°ΠΉΡΠ°.
- Π Π°Π·ΠΌΠ΅Ρ Π°Π΄ΡΠ΅ΡΠ°: 2 Π±Π°ΠΉΡΠ°.
- ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΠΎ ΡΠ»ΠΎΠ²ΠΎΠΌ Π² 4 Π±Π°ΠΉΡΠ°.
- ΠΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠ°Π·Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΅ΠΊ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΡ ΡΠ΅Π³ΠΈΡΡΡ-ΡΠ΅Π³ΠΈΡΡΡ ΠΈ ΡΠ΅Π³ΠΈΡΡΡ-ΠΏΠ°ΠΌΡΡΡ.
ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΅Π³ΠΈΡΡΡ-ΡΠ΅Π³ΠΈΡΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°Ρ
ΠΠΠ RA1 RA2
ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 2 Π±Π°ΠΉΡΠ°. ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΅Π³ΠΈΡΡΡ-ΠΏΠ°ΠΌΡΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°ΡΠΠΠ R M A
ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 4 Π±Π°ΠΉΡΠ°. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°ΡΠΠΠ 0 0 A
ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ 4 Π±Π°ΠΉΡΠ°. - Π Π΅Π³ΠΈΡΡΡΡ:
R0-RF
,S
,RZ
,FLAGS
,PC
,RI
.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΡΡΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
- Π½Π°Π»ΠΈΡΠΈΠ΅ Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΡΡ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ R0-RF
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ. S
, RZ
- Π½Π΅Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ
ΠΠΠ£.
Π’Π°ΠΊΠΆΠ΅ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΊΠΈΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ:
- ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ
M
(ΠΎΡ 0x0 Π΄ΠΎ 0xF):[M]
. ΠΡΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°M
ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅[M]
ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°R0
. - ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡ Π°Π΄ΡΠ΅Ρ
A
(ΠΎΡ 0x0000 Π΄ΠΎ 0xFFFF):[M] + A
. - ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Π½Π° 2^16:
([M] + A) % 2^16
. - ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΈΠ· ΠΠΠ£ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ:
[[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
:
S := [M] + A
R := S
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ΅Π³ΠΈΡΡΡ-ΠΏΠ°ΠΌΡΡΡ (ΠΈΡΠΊΠ»ΡΡΠ°Ρ Π΄Π΅Π»Π΅Π½ΠΈΠ΅) add
,
sub
, smul
, umul
(ΡΠΎΡΠΌΠ°Ρ op R M A
):
S, RZ := R, [[M] + A]
S := S op RZ
R := S
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡ-ΠΏΠ°ΠΌΡΡΡ sdivmod
ΠΈ udivmod
(ΡΠΎΡΠΌΠ°Ρ op R M A
, R_next
- ΡΠ΅Π³ΠΈΡΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ R
):
S, RZ := S, [[M] + A]
S, RZ := S / RZ, S % RZ
R, R_next := S, RZ
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ comp R M A
:
S, RZ := S, [[M] + A]
- ΠΠ°ΠΏΡΡΡΠΈΡΡ Π² ΠΠΠ£ ΡΡ
Π΅ΠΌΡ
sub S RZ
, Π²ΡΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡFLAGS
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ load R M A
:
R := [[M] + A]
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠ³ΡΡΠ·ΠΊΠΈ store R M A
:
[[M] + A] := R
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ΅Π³ΠΈΡΡΡ-ΡΠ΅Π³ΠΈΡΡΡ (ΠΈΡΠΊΠ»ΡΡΠ°Ρ Π΄Π΅Π»Π΅Π½ΠΈΠ΅) radd
,
rsub
, rsmul
, rumul
(ΡΠΎΡΠΌΠ°Ρ op RX RY
):
S, RZ := RX, RY
S := S op RZ
RX := S
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡ-ΡΠ΅Π³ΠΈΡΡΡ rsdiv
ΠΈ rudiv
(ΡΠΎΡΠΌΠ°Ρ - op RX RY
; RX_next
- ΡΠ΅Π³ΠΈΡΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ RX
, Π΅ΡΠ»ΠΈ
RX = RF
, ΡΠΎ RX_next = R0
):
S, RZ := RX, RY
S, RZ := S / RZ, S % RZ
RX, RX_next := S, RZ
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ rcomp RX RY
:
S, RZ := RX, RY
ΠΠ°ΠΏΡΡΡΠΈΡΡ Π² ΠΠΠ£ ΡΡ Π΅ΠΌΡ
sub S RZ
, Π²ΡΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡFLAGS
-
jump 00 A
:PC := A
- Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ Π΄Π΅Π»Π°ΡΡΡΡ ΠΈΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°
FLAGS
- ΠΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΡΠ°Π½ΠΎΠ²Π°
halt
Π²Π·Π²ΠΎΠ΄ΠΈΡ ΡΠ»Π°Π³HALT
Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅FLAGS
References
- E. Π. ΠΠΎΡΠ΄Π°ΡΠ΅Π½ΠΊΠΎΠ²Π° - "ΠΠΎΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΠΠ" http://al.cs.msu.su/files/ModComp.pdf
- Π. Π. ΠΠΎΡΠ΄Π°ΡΠ΅Π½ΠΊΠΎΠ²Π° - "ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΠΠ. Π£ΡΠ΅Π±Π½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΡΠΎΠ±ΠΈΠ΅" http://al.cs.msu.su/files/bordachenkova.architecture.model.machines.2010.doc
- Π. Π. ΠΠ°ΡΠ»Π° - "ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΠΠ ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ" http://arch.cs.msu.ru/Page2.htm
- http://cmcmsu.no-ip.info/1course/um3.command.set.htm