ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ модСль Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы. 
Эмулятор

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Эмулятор — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, созданныС для оборудования, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ³ΠΎ ΠŸΠš. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ содСрТит Π² ΡΠ²ΠΎΡ‘ΠΌ составС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ модСлирования ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, выполняСмых Π² Ρ…ΠΎΠ΄Π΅ функционирования. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π»ΠΈΠ½Ρƒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π±Π°ΠΉΡ‚Π°. Π‘ΠΈΡ‚Ρ‹ 0βˆ’3 ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° содСрТат ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΡΠΎΠΎΡ‚вСтствии с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄. Π‘ΠΈΡ‚Ρ‹ 4βˆ’7 ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π°ΠΉΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для здания… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ модСль Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы. Эмулятор (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎ ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΠ°ΡƒΠΊΠΈ Π£ΠΊΡ€Π°ΠΈΠ½Ρ‹ Π‘Π΅Π²Π°ΡΡ‚ΠΎΠΏΠΎΠ»ΡŒΡΠΊΠΈΠΉ ΠΠ°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ВСхничСский УнивСрситСт ΠšΠ°Ρ„Π΅Π΄Ρ€Π° ΠΊΠΈΠ±Π΅Ρ€Π½Π΅Ρ‚ΠΈΠΊΠΈ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ записка ΠΊ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ модСль Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы. Эмулятор»

ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ «ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»: студСнт Π³Ρ€ΡƒΠΏΠΏΡ‹ М-22Π΄ Маслов Π’.О.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»: Π‘ΠΌΠ°Π³ΠΈΠ½Π° А.О.

Π‘Π΅Π²Π°ΡΡ‚ΠΎΠΏΠΎΠ»ΡŒ 2010

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

2. ОписаниС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

4. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° эмулятора

5. ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ Ρ‚СстированиС Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

БиблиографичСский список ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ Π½Π°ΡΡ‚оящСС врСмя Π² ΡΠ²ΡΠ·ΠΈ с Π±ΡƒΡ€Π½Ρ‹ΠΌ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, всС большСС ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ срСди программистов ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ языки высокого уровня; ΠΎΠ΄Π½Π°ΠΊΠΎ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанныС Π½Π° Ρ‚Π°ΠΊΠΈΡ… языках, Ρ‚Π΅Ρ€ΡΡŽΡ‚ Π² Π±Ρ‹ΡΡ‚родСйствии ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ языками (ассСмблСрами), Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ высокого уровня ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ (ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ€Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для написания Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… вирусов, Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Ρ‚. ΠΏ.) слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ языки Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня. НСсмотря Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ языков программирования высокого уровня, ассСмблСр нСльзя Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΌ, изТившим сСбя языком, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π½ΠΈ Π±Ρ‹Π» ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор, ΠΎΠ½ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ программиста Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ€Π΅; Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ассСмблСр часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ максимальноС быстродСйствиС ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° «ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌ» ΡƒΡ€ΠΎΠ²Π½Π΅.

Эмулятор — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, созданныС для оборудования, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ³ΠΎ ΠŸΠš. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ содСрТит Π² ΡΠ²ΠΎΡ‘ΠΌ составС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ модСлирования ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, выполняСмых Π² Ρ…ΠΎΠ΄Π΅ функционирования.

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ ЦСлью Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, являСтся ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства Π­Π’Πœ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программиста. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ выполнСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ кросс-эмулятор — ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ модСль Π­Π’Πœ с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ.

Π—Π°Π΄Π°Π½Π° структура микропроцСссорной систСмы (№ 3):

ОбъСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти — 4096 Π±Π°ΠΉΡ‚.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π»ΠΈΠ½Ρƒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π±Π°ΠΉΡ‚Π°. Π‘ΠΈΡ‚Ρ‹ 0−3 ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° содСрТат ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΡΠΎΠΎΡ‚вСтствии с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄. Π‘ΠΈΡ‚Ρ‹ 4−7 ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π°ΠΉΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для здания адрСса памяти, Π³Π΄Π΅ находится ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ ΠΈΠ»ΠΈ константа.

АрифмСтичСскиС ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π°Π΄ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ, находящСмся Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΈ Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ элСмСнтом стСка. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Бписок ΠΊΠΎΠΌΠ°Π½Π΄ для структуры № 3 :

Π’ ΡΠΎΠΎΡ‚вСтствии с Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ, Π΄Π»ΠΈΠ½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ составляСт ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π±Π°ΠΉΡ‚Π°, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ схСматичСски ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС:

Код ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

АдрСс

АдрСс

Π‘Π°ΠΉΡ‚ № 1

Π‘Π°ΠΉΡ‚ № 2

Рисунок 1 — ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

2. ОписаниС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π’Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для эмулятора являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», сгСнСрированный ассСмблСром. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» содСрТит ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΡ эмулятору, ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ. Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° «ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ-Π±Π°ΠΉΡ‚».

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ€Π΅ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ процСссора содСрТит Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π²Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹: ORG — ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Π°Π΄Ρ€Π΅Ρ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ, ΠΊΡƒΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΈ DATA — Π·Π°Π΄Π°Π½ΠΈΠ΅ константы. Π§Ρ‚ΠΎΠ±Ρ‹ эмулятор ΠΌΠΎΠ³ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, каТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ свой Π±Π°ΠΉΡ‚-ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΅Π΅ Ρ‚ΠΈΠΏ:

01 — адрСс; ADDRESS

02 — ΠΊΠΎΠΌΠ°Π½Π΄Π°; COMMAND

03 — Π΄Π°Π½Π½Ρ‹Π΅; DATA

НапримСр: 01 10 02 E5 02 23 01 20 03 D2 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ начиная с Π°Π΄Ρ€Π΅ΡΠ° 10 ΠΈΠ΄ΡƒΡ‚ 2 ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ E5 23, Π° Π·Π°Ρ‚Π΅ΠΌ с Π°Π΄Ρ€Π΅ΡΠ° 20 ΠΈΠ΄ΡƒΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ D2.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ являСтся Π²Ρ‹Π²ΠΎΠ΄ Π² ΠΎΠΊΠ½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния элСмСнтов стСка (R0, R1, R2, R3, R4, R5, R6, R7), PC (счСтчик адрСса ΠΊΠΎΠΌΠ°Π½Π΄), rgCOM (рСгистр ΠΊΠΎΠΌΠ°Π½Π΄), Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³ΠΎΠ² (ноль, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅) ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояния ячССк ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти.

3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

1. ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ чтСния ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, сгСнСрированного транслятором.

2. Π’ Ρ†ΠΈΠΊΠ»Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ Π΄Π²Π° Π±Π°ΠΉΡ‚Π°. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ адрСса, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π°ΠΉΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ: Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ являСтся ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ адрСса, Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ этого адрСса, Π° Π΅ΡΠ»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ являСтся ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ячСйку памяти.

3. Когда Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½, Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ чтСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

4. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, адрСс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится Π² ΡΡ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠ΅ адрСса ΠΊΠΎΠΌΠ°Π½Π΄.

5. АнализируСм ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ количСство Π±Π°ΠΉΡ‚ΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Π§ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ — исходныС Π΄Π°Π½Π½Ρ‹Π΅.

6. ВыполняСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΡ€ΠΈ нСобходимости Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, фиксируя ΠΈΡ… Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π΅ Ρ„Π»Π°Π³ΠΎΠ².

7. ИзмСняСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΡΡ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠ΅ адрСса ΠΊΠΎΠΌΠ°Π½Π΄, Π³ΠΎΡ‚ΠΎΠ²ΡΡΡŒ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

8. Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡ€Π°Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

4. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° эмулятора микропроцСссорный ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° эмулятор Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡ‚ΡŒ классов: Main, Processor, ALU, Memory ΠΈ Stack.

Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс.

Β· Класс Processor Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ:

int PC — БЧАК: ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π°Π΄Ρ€Π΅Ρ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

int rgCOM — рСгистр ΠΊΠΎΠΌΠ°Π½Π΄: Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠΎΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Π€Π»Π°Π³ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° int zero (ноль), int overflow (ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅), int negative

(ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ).

Stack — структура Π΄Π°Π½Π½Ρ‹Ρ… с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ доступа ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ LIFO (послСдним ΠΏΡ€ΠΈΡˆΠ΅Π»ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅Π»), стСк состоит ΠΈΠ· Π²ΠΎΡΡŒΠΌΠΈ элСмСнтов (R0, R1, R2, R3, R4, R5, R6, R7).

Error — пСрСмСнная которая сообщаСт ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅ (Ссли такая имССтся).

Π­Ρ‚Π° пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ значСния:

Β· 0 — ошибок Π½Π΅Ρ‚

Β· 1 — ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

Β· 2 — нСизвСстная ΠΊΠΎΠΌΠ°Π½Π΄Π°

Β· 3 — нСизвСстный Π±Π°ΠΉΡ‚-ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ

Β· 4 — Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π°

Β· 5 — послС Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ»ΠΈ адрСс

Β· 6 — Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Processor:

public Processor (Memory ram) — связываСт процСссор с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

private void clear () — сбрасываСт всС значСния элСмСнтов Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π΅ ΠΈ ΠΏΠ°ΠΌΡΡ‚ΠΈ.

public void execute () — ΠΌΠ΅Ρ‚ΠΎΠ΄ выполняСт всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ: ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

public void executeOneCom () — выполняСт ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

private boolean twoBytes (int c) — опрСдСляСт сколько Π±Π°ΠΉΡ‚ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅.

public boolean loadObjectFile (DataInput f) — считываСт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ адрСс послСднСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚. ΠΊ. ΠΈΠ½Π°Ρ‡Π΅ нСльзя ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠΎΠ³Π΄Π° достигнут Π΅Π΅ ΠΊΠΎΠ½Π΅Ρ†). Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true ΠΈ Π² ΡΠ»ΡƒΠΆΠ΅Π±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ вписываСт сообщСниС ΠΎΠ± ΡΡ‚ΠΎΠΌ ΠΈ Π°Π΄Ρ€Π΅Ρ послСднСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π˜Π½Π°Ρ‡Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ сообщСниС с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ошибки.

public String toString () — ΠΌΠ΅Ρ‚ΠΎΠ΄ выводящий Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» состояниС стСка, рСгистра ΠΊΠΎΠΌΠ°Π½Π΄, БЧАКа ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³ΠΎΠ² — послС выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Алгоритм Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ:

flag — ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ, i — индСкс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ячСйки памяти, m — ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π±Π°ΠΉΡ‚Π°, b — Π±Π°ΠΉΡ‚

1. ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ 2 Π±Π°ΠΉΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, ΠΈΠ½Π°Ρ‡Π΅ ΠΊΠΎΠ½Π΅Ρ†. m = ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π±Π°ΠΉΡ‚Π°, b = Π±Π°ΠΉΡ‚.

2. Если m = адрСс, Ρ‚ΠΎ:

a. Ссли это Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (flag = 0), Ρ‚ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ счСтчик ΠΊΠΎΠΌΠ°Π½Π΄ Π² b

b. Ссли flag = Π΄Π°Π½Π½Ρ‹Π΅, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅, ΠΊΠΎΠ½Π΅Ρ†

c. flag < адрСс, i < b

d. ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏ. 1

3. Если m = ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ‚ΠΎ:

4. Ссли flag — Π΄Π°Π½Π½Ρ‹Π΅, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅, ΠΊΠΎΠ½Π΅Ρ†

a. flag < ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ < i+1

b. ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏ.6

5. Если m = Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ:

a. Ссли Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ

b. flag < Π΄Π°Π½Π½Ρ‹Π΅

c. ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏ.6

6. m Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎ, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅

7. Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΡΡ‡Π΅ΠΉΠΊΡƒ i Π±Π°ΠΉΡ‚ b, i < i+1, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏ.1

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ загруТаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² ΡΡ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠ΅ адрСса ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ принимаСтся Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, слСдуСт Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π°ΠΉΡ‚ ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° АЛУ.

Β· Класс ALU Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ:

АЛУ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс. Π’ ΠΠ›Π£ содСрТатся Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

public int execute (int com) — опрСдСляСт Ρ‡Ρ‚ΠΎ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° (ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ), ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ Π΅Ρ‘.

private void setFlags (int r) — Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ„Π»Π°Π³ΠΎΠ² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°:

ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Ссли r < 0 ΠΈΠ»ΠΈ r > 255 Ρ‚ΠΎ 1(ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΅ΡΡ‚ΡŒ) ΠΈΠ½Π°Ρ‡Π΅ 0 (Π½Π΅Ρ‚):

ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ: Ссли r < 128 Ρ‚ΠΎ 1(ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚) ΠΈΠ½Π°Ρ‡Π΅ 0 (Π½Π΅Ρ‚);

ноль: Ссли r == 128 Ρ‚ΠΎ 1(Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ноль) ΠΈΠ½Π°Ρ‡Π΅ 0 (Π½Π΅Ρ‚).

Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ прСдставлСниС чисСл Π² ΡΠΌΡƒΠ»ΡΡ‚ΠΎΡ€Π΅. По ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, ячСйка памяти ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ — 8 Π±ΠΈΡ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ числа ΠΎΡ‚ -128 Π΄ΠΎ 127 (Ρ‚. ΠΊ. Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π΅ΡΡ‚ΡŒ опСрация вычитания). Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ — Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ. Для хранСния чисСл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΈΠΏ int.

РСализация ΠΊΠΎΠΌΠ°Π½Π΄ микропроцСссора:

t — Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, reg — рСгистр АЛУ, proc. overflow — ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

МнСмокод

Код

ОписаниС

РСализация

ADD

АдрСс

ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]=стСк[0]+ ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]

proc.stack.peek ()+ram.read (reg); setFlags (t);

ram.write (t & 0xFF, reg);

ADC

АдрСс

ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]=стСк[0]+ ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]+ Ρ„Π»Π°Π³ пСрСполнСния

proc.stack.peek ()+ram.read (reg)+proc.overflow; setFlags (t); ram. write (t & 0xFF, reg);

SUB

АдрСс

ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]=стСк[0]-ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]

proc.stack.peek ()-ram.read (reg); setFlags (t); ram. write (t & 0xFF, reg);

SUB

АдрСс

ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]=стСк[0]- ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]- Ρ„Π»Π°Π³ пСрСполнСния

proc.stack.peek ()-ram.read (reg)-proc.overflow; setFlags (t); ram. write (t & 0xFF, reg);

AND

АдрСс

ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]=стСк[0]& ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]

proc.stack.peek () & ram. read (reg); setFlags (t); ram. write (t & 0xFF, reg);

OR

АдрСс

ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]=стСк[0] | ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]

proc.stack.peek () | ram. read (reg); setFlags (t);

ram.write (t & 0xFF, reg);

NOT

инвСрсия Π±ΠΈΡ‚ стСк[0]

proc.stack.pop ();

t = (~t) & 0xFF; setFlags (t); proc.stack.push (t);

PUSH

АдрСс

сдвиг стСка; стСк[0]=ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]

if (!proc.stack.push (ram.read (reg))) { return 1;

POP

АдрСс

сдвиг стСка; ΠΏΠ°ΠΌΡΡ‚ΡŒ[адрСс]= стСк[0]

ram.write (proc.stack.pop (), reg);

INC

рСгистр

стСк[0]=стСк[0]+1

proc.stack.pop (); t++; setFlags (t); proc.stack.push (t);

DEC

рСгистр

стСк[0]=стСк[0]-1

proc.stack.pop (); t—; setFlags (t); proc.stack.push (t);

JMP

АдрСс

бСзусловный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄

proc.PC = reg;

JNZ

АдрСс

ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Ссли Π½Π΅ 0

if (proc.zero == 0) proc. PC = reg;

БАLL

АдрСс

ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅; адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° сохраняСтся Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π΅;

proc.PC-2;

proc.PC = reg; if (!(proc.stack.push (t & 0xFF) && proc.stack.push (t &0xF00))) { return 1;

RET

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° находится Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π΅;

int t1 = proc.stack.pop (); int t2 = proc.stack.pop (); t = t1 & t2; proc. PC = t;

Π’Π°Π±Π»ΠΈΡ†Π° 1. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

Β· Класс Stack Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΡ‚Π΅ΠΊΠΎΠΌ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

public Stack (int n) — ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС ячСйки стСка Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π²Π½Ρ‹ΠΌ -1(Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ).

public int peek () — ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ (Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ) элСмСнта стСка.

public boolean push (int x) — позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт Π² ΡΡ‚Π΅ΠΊ: для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ всС элСмСнты стСка ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ — i-Ρ‹ΠΉ элСмСнт пСрСдвигаСтся Π² ΠΏΡ€Π°Π²ΠΎ Π½Π° i+1, Π° Π½Π° ΠΌΠ΅ΡΡ‚ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ добавляСтся Π½ΡƒΠΆΠ½Ρ‹ΠΉ элСмСнт.

public int pop () — позволяСт Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ (ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ) Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт стСка, ΠΏΡ€ΠΈ этом всС ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ элСмСнты ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½Ρƒ ячСйку Π² Π»Π΅Π²ΠΎ.

Β· Класс Memory Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ:

ΠŸΠ°ΠΌΡΡ‚ΡŒ прСдставлСна Π² Π²ΠΈΠ΄Π΅ массива Ρ†Π΅Π»Ρ‹Ρ…: индСкс — это адрСс ячСйки (addr), элСмСнт — Π΅Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ (data).

ΠœΠ΅Ρ‚ΠΎΠ΄ public Memory () — ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ массив Ρ†Π΅Π»Ρ‹Ρ… 4096 элСмСнтов.

public int size () — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти.

public int read (int addr) — Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ адрСса памяти.

public void write (int data, int addr) — запись Π΄Π°Π½Π½Ρ‹Ρ… Π² Π°Π΄Ρ€Π΅Ρ памяти.

public void clear () — обнуляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ячССк памяти.

public String toString () — прСдставлСниС памяти ΠΊΠ°ΠΊ строк.

ΠŸΠ°ΠΌΡΡ‚ΡŒ прСдставлСна Π² Π²ΠΈΠ΄Π΅ массива Ρ†Π΅Π»Ρ‹Ρ…: индСкс — это адрСс ячСйки (addr), элСмСнт — Π΅Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ (data).

Β· Класс Main содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ public static void main (String[] args) Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ассСмблСра — p. loadObjectFile (new RandomAccessFile («f.bin», «r»)), Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ состояниС ячССк памяти послС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ System.out.println (ram);

Для записи ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ public static void writeprog () .

5. ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ Ρ‚СстированиС Для тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ написан ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ со ΡΡ‚Π΅ΠΊΠΎΠΌ, ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ORG ΠΈ DATA.

ВСстовый ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ORG 2

PUSH 100

ADD 101

PUSH 100

POP 128

ADD 101

ORG 2

DATA 170

DATA 160

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· Π»ΠΈΡΡ‚ΠΈΠ½Π³Π° тСстового ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

01 02 02 70 02 64 02 00 02 65 02 70 02 65 02 80 02 80 02 00 02 64 01 64 03 AA 03 A0

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:

Начиная с Π°Π΄Ρ€Π΅ΡΠ° 2 Π² ΡΡ‡Π΅ΠΉΠΊΠΈ памяти Π±ΡƒΠ΄ΡƒΡ‚ заносится Ρ‚Π°ΠΊΠΈΠ΅ адрСса: 70 64 0 65

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А:

Листинг класса Processor:

import java.io.*;

import java.util.Arrays;

public class Processor {

ALU alu;

Memory ram;

Stack stack;

public int PC; // program counter ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π°Π΄Ρ€Π΅Ρ слСд. ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

public int rgCOM; // command register Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠΎΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

int end; // ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

int zero;

int overflow;

int negative;

/*

* 0 — ошибок Π½Π΅Ρ‚

* 1 — ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

* 2 — нСизвСстная ΠΊΠΎΠΌΠ°Π½Π΄Π°

* 3 — нСизвСстный Π±Π°ΠΉΡ‚-ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ

* 4 — Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π°

* 5 — послС Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ»ΠΈ адрСс

* 6 — Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»

*/

int error;

public Processor (Memory ram) {

this.ram = ram;

clear ();

}

/*

* сброс процСссора ΠΈ ΠΏΠ°ΠΌΡΡ‚ΠΈ

*/

private void clear () {

stack = new Stack (8);

PC = 0;

rgCOM = 0;

zero = 0;

overflow = 0;

negative = 0;

error = 0;

ram.clear ();

alu = new ALU (ram, this);

}

public void execute () {

while (PC ≠ end) executeOneCom ();

}

public void executeOneCom () {

if (error == 0) {

int first = ram. read (PC);

rgCOM = first >> 4;

PC++;

if (twoBytes (rgCOM))

// 0xF00 = 1111 0000 0000 (2 систСма)

alu.reg = (((first << 8) & 0xF00)

error = alu. execute (rgCOM);

if (error ≠ 0) {

System.out.println («Π’ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка: ΠΊΠΎΠ΄ ошибки «+ error);

} else {

System.out.println (this);

}

}

}

private boolean twoBytes (int c) {

if (c == 6 || c == 15 || c == 9 || c == 10) {

return false;

} else {

return true;

}

}

public boolean loadObjectFile (DataInput f) {

clear ();

final int ADDRESS = 1;

final int COMMAND = 2;

final int DATA = 3;

int i = 0; // индСкс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ячСйки памяти

int flag = 0;

int m; // ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π±Π°ΠΉΡ‚Π°

int b; // Π±Π°ΠΉΡ‚

while (true)

try {

m = f. readInt ();

b = f. readInt ();

if (m == ADDRESS) {

if (flag == 0) PC = b;

if (flag == DATA) {

error = 5;

return false;

}

flag = ADDRESS;

i = b;

} else {

if (m == COMMAND) {

if (flag == DATA) {

error = 5;

return false;

}

flag = COMMAND;

end = i+1;

} else if (m == DATA) {

if (flag == 0) {

error = 4;

return false;

}

flag = DATA;

} else {

error = 3;

return false;

}

ram.write (b, i);

i++;

}

} catch (EOFException e) {

return true;

} catch (IOException e) {

error = 6;

return false;

}

}

public String toString () {

StringBuilder s = new StringBuilder ();

s.append (String.format («stack:%sn», Arrays. toString (this.stack.s)));

s.append (String.format («PC:%xn», this. PC));

s.append (String.format («rgCOM:%xn», this. rgCOM));

s.append (String.format («Π½ΠΎΠ»ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:%d %d %dn» ,

this.zero,

this.negative,

this.overflow));

return s. toString ();

}

}

Листинг класса ALU:

public class ALU {

int reg;

Memory ram;

Processor proc;

public ALU (Memory ram, Processor proc) {

this.ram = ram;

this.proc = proc;

}

/*

* 0 — всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ

* 1 — ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

* 2 — нСизвСстная ΠΊΠΎΠΌΠ°Π½Π΄Π°

*/

public int execute (int com) {

int t;

switch (com) {

//ADD

case 0:

t = proc.stack.peek ()+ram.read (reg);

setFlags (t);

ram.write (t & 0xFF, reg);

break;

//ADC

case 1:

t = proc.stack.peek ()+ram.read (reg)+proc.overflow;

setFlags (t);

ram.write (t & 0xFF, reg);

break;

//SUB

case 2:

t = proc.stack.peek ()-ram.read (reg);

setFlags (t);

ram.write (t & 0xFF, reg);

break;

//SUB

case 3:

t = proc.stack.peek ()-ram.read (reg)-proc.overflow;

setFlags (t);

ram.write (t & 0xFF, reg);

break;

//AND

case 4:

t = proc.stack.peek () & ram. read (reg);

setFlags (t);

ram.write (t & 0xFF, reg);

break;

//OR

case 5:

t = proc.stack.peek () | ram. read (reg);

setFlags (t);

ram.write (t & 0xFF, reg);

break;

//NOT

case 6:

t = proc.stack.pop ();

t = (~t) & 0xFF;

setFlags (t);

proc.stack.push (t);

break;

//PUSH

case 7:

if (!proc.stack.push (ram.read (reg))) {

return 1;

}

break;

//POP

case 8:

ram.write (proc.stack.pop (), reg);

break;

//INC

case 9:

t = proc.stack.pop ();

t++;

setFlags (t);

proc.stack.push (t);

break;

//DEC

case 10:

t = proc.stack.pop ();

t—;

setFlags (t);

proc.stack.push (t);

break;

//JMP

case 11:

proc.PC = reg;

break;

//JNZ

case 13:

if (proc.zero == 0) proc. PC = reg;

break;

//CALL

case 14:

t = proc. PC-2;

proc.PC = reg;

if (!(proc.stack.push (t & 0xFF) &&

proc.stack.push (t & 0xF00))) {

return 1;

}

break;

//RET

case 15:

int t1 = proc.stack.pop ();

int t2 = proc.stack.pop ();

t = t1 & t2;

proc.PC = t;

break;

default:

return 2;

}

return 0;

}

private void setFlags (int r)

proc.overflow = (r < 0

}

Листинг класса Stack:

public class Stack {

int[] s;

int max;

int size;

public Stack (int n) {

s = new int[n];

for (int i = 0; i < n; ++i) {

s[i] = -1;

max = n;

size = 0;

}

}

/*

* Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ элСмСнта

*/

public int peek () {

return s[0];

}

/*

* Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт Π² ΡΡ‚Π΅ΠΊ

*/

public boolean push (int x) {

if (size+1 > max) return false; // ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

for (int i = size; i > 0; i—) {

s[i] = s[i-1];

}

s[0] = x;

size++;

return true;

}

/*

* Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ элСмСнт

*/

public int pop () {

int t = s[0];

for (int i = 1; i < max; i++) {

s[i-1] = s[i];

}

size—;

return t;

}

}

Листинг класса Memory:

class Memory {

private int[] ram;

public Memory () {

ram = new int[4096];

}

public int size () {

return ram. length;

}

public int read (int addr) {

return ram[addr];

}

public void write (int data, int addr) {

ram[addr] = data;

}

public void clear () {

for (int i = 0; i < ram. length; ++i) {

ram[i] = 0;

}

}

public String toString () {

StringBuilder b = new StringBuilder ();

int c = 128;

for (int i = 0, k = 0; i < c; i++) {

int j = 0;

while ((k = i + j*c) < ram. length) {

b.append (String.format («%2h», k));

b.append («:»);

b.append (String.format («%2h», ram[k]));

b.append (««);

j++;

}

b.append («n»);

}

return b. toString ();

}

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ