Skip to content

cmc-python/modelmachine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

modelmachine

Model machine emulator

МодСльная машина

МодСльная машина - это чистая архитСктурная концСпция, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ функционирования Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… процСссоров. По своСй структурС ΠΎΠ½Π° Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ поколСния. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΠΎ ссылкам Π²Π½ΠΈΠ·Ρƒ.

Quickstart

Установка ΠΏΠ°ΠΊΠ΅Ρ‚Π° происходит ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

# 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 Π² ram
  • S := 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
  • Для краткости описаниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сокращСно Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΡƒΡ… шагов, Ссли Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ значСния.
ΠžΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ ситуации

Π’ случаС ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ ситуации машина Π±ΡƒΠ΄Π΅Ρ‚ остановлСна ΠΈ Π²Ρ‹Π²ΠΎΠ΄ производится Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Бписок ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ситуаций:

  • Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹;
  • Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль;
  • Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись элСмСнта стСка Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ стСка;
  • Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись Π΄Π°Π½Π½Ρ‹Ρ… Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ доступных адрСсов ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, Ρ‚ΠΊ ячСйка ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ исполнСнии ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ move 0000 ffff.
НСописанныС рСгистры

ВсС ΠΌΠ°ΡˆΠΈΠ½Ρ‹ содСрТат Π½Π°Π±ΠΎΡ€ ΠΎΠ±Ρ‰ΠΈΡ… рСгистров:

  • FLAGS - рСгистр Ρ„Π»Π°Π³ΠΎΠ².
  • PC - рСгистр ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ инструкции.
  • IR - рСгистр для хранСния инструкции.
  • ADDR - рСгистр для хранСния адрСса для инструкции ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСадрСсуСмыС рСгистры: A1, A2, R, M. Π’ Π½ΠΈΡ… ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΈΠ· рСгистра IR.

Π­Ρ‚ΠΈ рСгистры ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹ Π² описании ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Ρ… машин для краткости. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ этих рСгистров ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅.

mm-3

АрхитСктура трСхадрСсной модСльной ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

  • Π Π°Π·ΠΌΠ΅Ρ€ ячСйки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти: 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
  • sdiv, udiv:
    • load: R1 := [A1]; R2 := [A2]
    • exec: S := R1 / R2 and set FLAGS; R1 := R1 % R2
    • write back: [A3] := S; [A3 + 1] := R1
  • 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
  • move: [A3] := [A1]
  • halt: FLAGS := HALT

mm-2

АрхитСктура двухадрСсной модСльной ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

  • Π Π°Π·ΠΌΠ΅Ρ€ ячСйки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти: 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
  • sdiv, udiv:
    • load: R1 := [A1]; R2 := [A2]
    • exec: R1 := R1 / R2 and set FLAGS; R2 := R1 % R2
    • write back: [A1] := R1; [A1 + 1] := R2
  • jump: PC := A2
  • cmp:
    • load: R1 := [A1]; R2 := [A2]
    • exec: R1 := R1 - R2 and set FLAGS
  • jeq, jneq, jl, jleq, jg, jgeq: if op(FLAGS) then PC := A2
  • move: [A1] := [A2]
  • halt: FLAGS := HALT

mm-v

АрхитСктура модСльной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ (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 - format op A1 A2:
    • load: R1 := [A1]; R2 := [A2]
    • exec: R1 := R1 op R2 and set FLAGS
    • write back: [A1] := R1
  • sdiv, udiv - format op A1 A2:
    • load: R1 := [A1]; R2 := [A2]
    • exec: R1 := R1 / R2 and set FLAGS; R2 := R1 % R2
    • write back: [A1] := R1; [A1 + 1] := R2
  • jump A1: PC := A1
  • cmp A1 A2:
    • load: R1 := [A1]; R2 := [A2]
    • exec: R1 := R1 - R2 and set FLAGS
  • jeq, jneq, jl, jleq, jg, jgeq - format op A: if op(FLAGS) then PC := A
  • move A1 A2: [A1] := [A2]
  • halt: FLAGS := HALT

mm-1

АрхитСктура одноадрСсной модСльной ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

  • Π Π°Π·ΠΌΠ΅Ρ€ ячСйки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти: 3 Π±Π°ΠΉΡ‚Π°.
  • Π Π°Π·ΠΌΠ΅Ρ€ адрСса: 2 Π±Π°ΠΉΡ‚Π°.
  • АрифмСтичСскиС вычислСния производятся с ΠΎΠ΄Π½ΠΎΠΉ ячСйкой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти.
  • Код ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ помСщаСтся Π² ΠΎΠ΄Π½Ρƒ ячСйку ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти COP А.
  • РСгистры: S, R.

РСгистры S ΠΈ S1 хранят ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ постоянно, Π° Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…. Π’ рСгистр R загруТаСтся ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ для арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ОписаниС команд

  • add, sub, smul, umul:
    • load: R := [A]
    • exec: S := S op R and set FLAGS
  • sdiv, udiv:
    • load: R := [A]
    • exec: S := S / R and set FLAGS; S1 := S % R
  • jump A: PC := A
  • cmp:
    • load: R := [A]
    • exec: calc S - R and set FLAGS
  • 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

mm-s

АрхитСктура стСковой модСльной ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

  • Π Π°Π·ΠΌΠ΅Ρ€ ячСйки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти: 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
  • 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
  • jump A: PC := A
  • cmp:
    • load: R1 := [SP+3]; R2 := [SP]
    • exec: calc R1 - R2 and set FLAGS; SP := SP + 6
  • 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

mm-0

АрхитСктура бСзадрСсной стСковой модСльной ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

  • Π Π°Π·ΠΌΠ΅Ρ€ ячСйки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти: 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
  • 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
  • jump: PC := PC + A - A Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ Π΄ΠΎ 16 Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ числа с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π·Π½Π°ΠΊΠ°
  • cmp:
    • load: R1 := [SP + A]; R2 := [SP]
    • exec: calc R1 - R2 and set FLAGS; SP := SP + 1
  • 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

mm-r

АрхитСктура модСльной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с рСгистрами (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 - format op R 0 A:
    • load: S := R; S1 := [A]
    • exec: S := S op S1 and set FLAGS
    • write back: R := S
  • register-memory sdiv, udiv - format op 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
  • register-memory comp R 0 A:
    • load: S := S; S1 := [A]
    • exec: S := S - S1 and set FLAGS
  • load R 0 A: R := [A]
  • store R 0 A: [A] := R
  • register-register radd, rsub, rsmul, rumul - format op X Y:
    • load: S := R_X; S1 := R_Y
    • exec: S := S op S1 and set FLAGS
    • write back: R_X := S
  • register-register rsdiv, rudiv - format op 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
  • register-register rcomp X Y:
    • load: S := R_X; S1 := R_Y
    • exec: S := S - S1 and set FLAGS
  • register-register rmove X Y: R_X := R_Y
  • jump A: PC := A
  • jeq, jneq, jl, jleq, jg, jgeq - format op 00 A: if op(FLAGS) then PC := A
  • halt: FLAGS := HALT

mm-m

АрхитСктура модСльной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ адрСсов (modification).

  • Π Π°Π·ΠΌΠ΅Ρ€ ячСйки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти: 2 Π±Π°ΠΉΡ‚Π°.
  • Π Π°Π·ΠΌΠ΅Ρ€ адрСса: 2 Π±Π°ΠΉΡ‚Π°.
  • АрифмСтичСскиС вычислСния производятся со словом Π² 4 Π±Π°ΠΉΡ‚Π°.
  • Код ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΎΠ΅ количСство ячССк Π² зависимости ΠΎΡ‚ выполняСмой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. АрифмСтичСскиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΡ‹ рСгистр-рСгистр ΠΈ рСгистр-ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ рСгистр-рСгистр ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ COP RA1 RA2 ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ 2 Π±Π°ΠΉΡ‚Π°. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ рСгистр-ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ COP R M A ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ 4 Π±Π°ΠΉΡ‚Π°. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ COP 0 0 A ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ 4 Π±Π°ΠΉΡ‚Π°.
  • РСгистры: R0-RF, S, S1.

ЯвляСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ модСльной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с рСгистрами.

АдрСсация Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ производится Ρ‚Π°ΠΊΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ:

  1. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ содСрТимоС адрСсуСмого рСгистра с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ M (ΠΎΡ‚ 0x0 Π΄ΠΎ 0xF): R_M. Если Π½ΠΎΠΌΠ΅Ρ€ рСгистра M Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ R_0 Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ Π²Π½Π΅ зависимости ΠΎΡ‚ содСрТимого рСгистра R0.
  2. Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡƒ адрСс A (ΠΎΡ‚ 0x0000 Π΄ΠΎ 0xFFFF): R_M + A.
  3. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ остаток ΠΎΡ‚ дСлСния этого адрСса Π½Π° 2^16: (R_M + A) % 2^16.
  4. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΈΠ· ΠžΠ—Π£ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ адрСсу: [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 - format op R M A:
    • load: S := R; S1 := [R_M + A]
    • exec: S := S op S1 and set FLAGS
    • write back: R := S
  • register-memory sdiv, udiv - format op 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
  • register-memory comp R M A:
    • load: S := S; S1 := [R_M + A]
    • exec: S := S - S1 and set FLAGS
  • load R M A: R := [R_M + A]
  • store R M A: [R_M + A] := R
  • register-register radd, rsub, rsmul, rumul - format op X Y:
    • load: S := R_X; S1 := R_Y
    • exec: S := S op S1 and set FLAGS
    • write back: R_X := S
  • register-register rsdiv, rudiv - format op 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
  • register-register rcomp X Y:
    • load: S := R_X; S1 := R_Y
    • exec: S := S - S1 and set FLAGS
  • register-register rmove X Y: R_X := R_Y
  • jump A: PC := R_M + A
  • jeq, jneq, jl, jleq, jg, jgeq - format op 0 M A: if op(FLAGS) then PC := R_M + A
  • halt: FLAGS := HALT

See also

References

  1. E. А. Π‘ΠΎΡ€Π΄Π°Ρ‡Π΅Π½ΠΊΠΎΠ²Π° - ΠœΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π­Π’Πœ
  2. Π•. А. Π‘ΠΎΡ€Π΄Π°Ρ‡Π΅Π½ΠΊΠΎΠ²Π° - АрхитСктура Π­Π’Πœ. Π£Ρ‡Π΅Π±Π½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ пособиС
  3. Π’. Π“. Π‘Π°ΡƒΠ»Π° - Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Π­Π’Πœ ΠΈ систСмы программирования
  4. УчСбная трёхадрСсная машина УМ-3
  5. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΌ машинам
  6. БСзадрСсная УМ-0 archieved