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

Эмуляция ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ матСматичСского сопроцСссора FSUB

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

Π₯отя дСкларируСтся, Ρ‡Ρ‚ΠΎ Π‘++ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅Π½Π½Ρ‹ΠΉ язык, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π² ΡΠ·Ρ‹ΠΊΠ΅ отсутствуСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. ΠžΡ‚Ρ‡Π°ΡΡ‚ΠΈ, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π» устраняСтся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ (Loki, Boost) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ срСдства мСтапрограммирования для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ языка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ конструкциями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ лямбд/Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), Π½ΠΎ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ уступаСт… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Эмуляция ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ матСматичСского сопроцСссора FSUB (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ информация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ эмуляция сопроцСссор Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. Анализ задания ΠΈ Π²Ρ‹Π±ΠΎΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, языка ΠΈ ΡΡ€Π΅Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

2. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

2.1 Анализ процСсса ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹Π±ΠΎΡ€ структур Π΄Π°Π½Π½Ρ‹Ρ… для хранСния

2.2 Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° основных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области

2.3 ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ структурной схСмы ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

3. ОписаниС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

3.1 ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ эмуляции ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ FSUB матСматичСского сопроцСссора

3.2 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FSUB

3.3 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FLD

3.4 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Print_st

4. ВСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π Π΅Π°Π»ΠΈΠΈ нашСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΈΠΊΡ‚ΡƒΡŽΡ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌ качСством Ρ‚ΠΎΠ²Π°Ρ€Π° являСтся Π΅Π³ΠΎ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ связано, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, с Π±ΠΎΠ»ΡŒΡˆΠΈΠΌ ассортимСнтом ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ устройства, ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹ Π½Π΅ Π±Ρ‹Π» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Π§Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ. Ни ΠΊΡ‚ΠΎ Π½Π΅ ΡΡ‚Π°Π½Π΅Ρ‚ ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚ΡŒ Π²Π΅Ρ‰ΡŒ Ссли сущСствуСт Π΅Ρ‘ Π΄Π΅ΡˆΠ΅Π²Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³. Но Ρ€Π°Π΄ΠΈ справСдливости Π½Π°Π΄ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° качСствСнный. Но Ρ€ΡƒΡΡΠΊΠΈΠ΅ Π½Π΅ ΡΠ΄Π°ΡŽΡ‚ся ΠΈ ΠΏΠΎ ΡΡ‚ΠΎΠΌΡƒ китайский ΡˆΠΈΡ€ΠΏΠΎΡ‚Ρ€Π΅Π± ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π΅ΠΌΡƒ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Π° Π΄Π΅Π»ΠΎΠ²Ρ‹Ρ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ Π΄ΠΎΠ»Π³ΠΎ. Π§Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ это ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠ΅ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ элСктронС Ρ‡ΠΈΠΏΡ‹, ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ. Рядовой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ столкнулся с ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ максимально ΡƒΠ΄Π΅ΡˆΠ΅Π²Π»Π΅Π½ΠΈΡ своСй ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ с Ρ†Π΅Π»ΡŒΡŽ получСния прСимущСства Π² ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠΉ Π±ΠΎΡ€ΡŒΠ±Π΅. И ΠΏΠΎ ΡΡ‚ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ сСйчас Π½Π΅ Ρ€Π΅Π΄ΠΊΠΎΡΡ‚ΡŒ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ всСвозмоТныС элСктронныС устройства, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠ΅Π΄ΠΈΠ°ΠΏΠ»Π΅Π΅Ρ€Ρ‹, Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹ ΠΈ Ρ‚. Π΄. Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π±Π°Π·Π΅, лишСнной ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΊ казалось ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… процСссоров Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… систСм ΠΈ ΠΌΠ°ΡˆΠΈΠ½.

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

1. Анализ задания ΠΈ Π²Ρ‹Π±ΠΎΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, языка ΠΈ ΡΡ€Π΅Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Для написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΡΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ сопроцСссора Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ инструмСнт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Π°ΠΊ ΡƒΠΆ ΠΏΠΎΠ²Π΅Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ сущСствуСт нСсколько способов Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚ΡƒΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ просмотрСны ΠΈ ΠΎΡ†Π΅Π½Π΅Π½Ρ‹ нСсколько языков программирования. Π”Π°Π»Π΅Π΅ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

Pascal, достоинства :

Β· Удобная срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, доступный Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Β· ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Π°Ρ справочная систСма, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ язык Π±Π΅Π· обращСния ΠΊ ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΌ источникам.

Β· Высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ компиляции, высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Β· ВстроСнная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вставки Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ ассСмблСра.

НСдостатки:

Β· ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ рассчитан Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ DOS, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сходит Π½Π° Π½Π΅Ρ‚. Однако Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ… вСрсиях компилятора ΠΈ ΡΡ€Π΅Π΄Ρ‹ Π²Π²Π΅Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° вмСстС с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ (TD).

Β· Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ CRT имССтся ошибка (Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ подсчёт количСства Ρ†ΠΈΠΊΠ»ΠΎΠ² для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ delay, Π½Π΅ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹ΠΉ Π½Π° Π±Ρ‹ΡΡ‚Ρ€Ρ‹Π΅ процСссоры, процСссоры с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ частотой ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Π΅ срСды), ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… с Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ частотой Π±ΠΎΠ»Π΅Π΅ 200 MHz сразу происходило Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ с ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ΠΌ «Runtime error 200 at…». Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ исправлСния модуля CRT. Π’ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠšΠ»Π°ΡƒΡΠ° Π₯Π°Ρ€Ρ‚Π½Π΅Π³Π³Π° ошибка 200 Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Π½ΠΎ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Delay Π½Π° Π±Ρ‹ΡΡ‚Ρ€Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… мСньшС ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ, ΠΈ ΡΡ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎ Π½Π΅Π·Π½Π°Π½ΠΈΡŽ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‚ΠΎΠΆΠ΅ считаСтся нСдостатком Turbo Pascal.

Assembler, достоинства:

Β· Π―Π·Ρ‹ΠΊ ассСблСра позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ самый быстрый ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π΅ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ трансляторами языков Π±ΠΎΠ»Π΅Π΅ высокого уровня, всё зависит ΠΎΡ‚ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚Π΅ΠΉ программиста.

Β· Если ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ достаточно большой, Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ся Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π² Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ… процСссора, Ρ‚. Π΅. частично ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ находятся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, Ρ‚ΠΎ ΠΈΡΠΊΡƒΡΠ½Ρ‹ΠΉ программист, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, способСн Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π²Ρ‹ΡΠΎΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ трансляторами ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ: ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ (Π·Π° ΡΡ‡Ρ‘Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ вычислСний ΠΈ/ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ обращСния ΠΊ ΠžΠŸ, пСрСраспрСдСлСния Π΄Π°Π½Π½Ρ‹Ρ…), ΠΎΠ±ΡŠΡ‘ΠΌ ΠΊΠΎΠ΄Π° (Π² Ρ‚ΠΎΠΌ числС Π·Π° ΡΡ‡Ρ‘Ρ‚ эффСктивного использования ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²).

Β· ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ максимального использования спСцифичСских возмоТностСй ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΌΠ΅Π½ΡŒΡˆΠΈΠΌΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌΠΈ рСсурсов.

Β· ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ€Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ нСпосрСдствСнный доступ ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Π΅, Π² Ρ‚ΠΎΠΌ числС ΠΏΠΎΡ€Ρ‚Π°ΠΌ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, рСгистрам процСссора, ΠΈ Π΄Ρ€.

Β· Π―Π·Ρ‹ΠΊ ассСмблСра примСняСтся для создания Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² оборудования ΠΈ ΡΠ΄Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы

Β· Π―Π·Ρ‹ΠΊ ассСмблСра ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания «ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ» BIOS.

Β· Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ языка ассСмблСра ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ компиляторы ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ языков высокого уровня, Π° Ρ‚Π°ΠΊΠΆΠ΅ рСализуСтся ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

Β· БущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ исслСдования Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дизассСмблСра.

НСдостатки:

Β· Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство ассСмблСра практичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ нивСлируСтся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π² ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… компиляторах языков высокого уровня.

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

Β· Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, мСньшСС количСство доступных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ½Π΄ΡƒΡΡ‚Ρ€ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ языками программирования.

Β· ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ ΠΈ ΡΠΈΡΡ‚Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ (ΠΊΡ€ΠΎΠΌΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎ-совмСстимых).

Π‘++, достоинства:

Β· C++ — Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ язык, содСрТащий срСдства создания эффСктивных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ практичСски любого назначСния, ΠΎΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… комплСксов самого Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ назначСния. Π’ Ρ‡Π°ΡΡ‚ности:

Β· ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ стили ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ программирования, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ООП, ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, макросы).

Β· ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² «Π²ΡΠ΅Π³Π΄Π° сначала А, ΠΏΠΎΡ‚ΠΎΠΌ Π’» ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ дСструкторов. Π­Ρ‚ΠΎ позволяСт Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΎΡΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ рСсурсы, Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ Ρ‡Π΅ΠΌΡƒ-Π»ΠΈΠ±ΠΎ автоматичСски. НапримСр, для чтСния Ρ„Π°ΠΉΠ»Π° достаточно объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° ifstream. Π€Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ автоматичСски, ΠΊΠΎΠ³Π΄Π° пСрСмСнная пСрСстанСт Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ. МногиС языки Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ явного написания ΠΊΠΎΠ΄Π° Π² Ρ‚Π°ΠΊΠΎΠΌ случаС. Π‘++ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ситуации ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ возникновСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Β· Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π° ΡΡ‚Π°ΠΏΠ΅ компиляции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹.

Β· ΠšΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ. Доступны компиляторы для большого количСства ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C++ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для самых Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ ΡΠΈΡΡ‚Π΅ΠΌ.

Β· Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. Π―Π·Ρ‹ΠΊ спроСктирован Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ программисту ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ всСми аспСктами структуры ΠΈ ΠΏΠΎΡ€ΡΠ΄ΠΊΠ° исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Ни ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ·Ρ‹ΠΊΠΎΠ²Ρ‹Ρ… возмоТностСй, приводящая ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходам, Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ для использования — ΠΏΡ€ΠΈ нСобходимости язык позволяСт ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Β· Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, адрСсами.

Β· Высокая ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ΡΠ·Ρ‹ΠΊΠΎΠΌ Π‘, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСсь ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π‘-ΠΊΠΎΠ΄ (ΠΊΠΎΠ΄ Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠ°ΠΌΠΈ скомпилирован компилятором Π‘++; Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, написанныС Π½Π° Π‘, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ· Π‘++ нСпосрСдствСнно Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, позволяя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ, написанным Π½Π° Π‘, Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, написанный Π½Π° Π‘++).

НСдостатки:

Β· ΠžΡ‚Ρ‡Π°ΡΡ‚ΠΈ нСдостатки C++ унаслСдованы ΠΎΡ‚ ΡΠ·Ρ‹ΠΊΠ°-ΠΏΡ€Π΅Π΄ΠΊΠ° — Π‘ΠΈ, — ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ большСй совмСстимости с Π‘ΠΈ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ нСдостатки, ΠΊΠ°ΠΊ:

Β· Бинтаксис, ΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ошибки:

Β· ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ присваивания обозначаСтся ΠΊΠ°ΠΊ =, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ сравнСния ΠΊΠ°ΠΊ ==. Π˜Ρ… Π»Π΅Π³ΠΊΠΎ ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈ этом опСрация присваивания Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, поэтому присваиваниС Π½Π° ΠΌΠ΅ΡΡ‚Π΅ выраТСния являСтся синтаксичСски ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, Π° Π² ΠΊΠΎΠ½ΡΡ‚рукциях Ρ†ΠΈΠΊΠ»Π° ΠΈ Π²Π΅Ρ‚влСния появлСниС числа Π½Π° ΠΌΠ΅ΡΡ‚Π΅ логичСского значСния Ρ‚Π°ΠΊΠΆΠ΅ допустимо, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Π°Ρ конструкция оказываСтся синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ошибки:

Β· if (x=0) { ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ }

Β· Π—Π΄Π΅ΡΡŒ Π² ΡƒΡΠ»ΠΎΠ²Π½ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ΠΏΠΎ ΠΎΡˆΠΈΠ±ΠΊΠ΅ написано присваиваниС вмСсто сравнСния. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x Ρ Π½ΡƒΠ»Ρ‘ΠΌ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° присвоит x Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ условия Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ if. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½ΡƒΠ»ΡŒ соотвСтствуСт логичСскому Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ «Π»ΠΎΠΆΡŒ» (false), Π±Π»ΠΎΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΡƒΡΠ»ΠΎΠ²Π½ΠΎΠΉ конструкции Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ся Π½ΠΈΠΊΠΎΠ³Π΄Π°. Ошибки Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ, Π½ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных компиляторах прСдлагаСтся диагностика Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… конструкций.

Β· ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания (=), ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (++), Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (—) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ ΡΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠΈ с ΠΎΠ±ΠΈΠ»ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ это позволяСт, хотя ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Ρ‹Π²Π°Π΅Ρ‚, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Π΅ выраТСния. НаличиС этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Π‘ΠΈ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ инструмСнт Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π² Π½Π°ΡΡ‚оящСС врСмя ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ компиляторы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… выраТСниях. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² языков C ΠΈ C++ — ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ программисту ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π»ΡŽΠ±ΠΎΠΌ стилС, Π° Π½Π΅ Π½Π°Π²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ «Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ» ΡΡ‚ΠΈΠ»ΡŒ.

Β· ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ (#define) ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ, Π½ΠΎ ΠΎΠΏΠ°ΡΠ½Ρ‹ΠΌ срСдством. Они сохранСны Π² C++ нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π½ΠΈΡ…, благодаря шаблонам ΠΈ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½Ρ‹ΠΌ функциям, Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ Π²Π΅Π»ΠΈΠΊΠ°. Π’ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½Ρ‹Ρ… стандартных Π‘-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасных макросов.

Β· НСкоторыС прСобразования Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹. Π’ Ρ‡Π°ΡΡ‚ности, опСрация Π½Π°Π΄ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ числами Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Β· ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ break Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π΅Ρ‚Π²Π΅ΠΉ ΠΏΡ€ΠΈ Π΅Π³ΠΎ отсутствии ΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ошибки ΠΈΠ·-Π·Π° пропуска break. Π­Ρ‚Π° ΠΆΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ «Ρ‚Ρ€ΡŽΠΊΠΈ», Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ break ΠΈ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

Β· ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€, унаслСдованный ΠΎΡ‚ Π‘, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π΅Π½. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ с ΠΎΠ΄Π½ΠΎΠΉ стороны ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нСльзя (ΠΈΠ»ΠΈ тяТСло) ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ мСтапрограммирования, Π° Ρ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, вслСдствиС своСй примитивности, ΠΎΠ½ Ρ‡Π°ΡΡ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ°ΠΌ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ дСйствий ΠΏΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Ρƒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. НСкоторыС языки программирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Scheme ΠΈ Nemerle) ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ бСзопасныС систСмы мСтапрограммирования (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ макросами, Π½ΠΎ ΠΌΠ°Π»ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ макросы Π‘/Π‘++).

Β· ΠŸΠ»ΠΎΡ…Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ (ΠΏΠΎ ΡΡƒΡ‚ΠΈ, Π² ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠΌ Π‘ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ языка отсутствуСт, Π΅Ρ‘ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠ΅Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ). ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ интСрфСйса внСшнСго модуля Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΡƒΡŽ вставку Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (#include) ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ замСдляСт ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ большого количСства ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обрабатываСтся компилятором, оказываСтся ΠΎΡ‡Π΅Π½ΡŒ Π²Π΅Π»ΠΈΠΊ). Π­Ρ‚Π° схСма Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ скопирована Π² C++. Для устранСния этого нСдостатка, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ компиляторы Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прСкомпиляции Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Precompiled Headers.

Β· К ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΌ нСдостаткам C++ ΠΌΠΎΠΆΠ½ΠΎ отнСсти:

Β· Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… C++ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ, Π° ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ компилятора сопряТСно с Π±ΠΎΠ»ΡŒΡˆΠΈΠΌ количСством ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’ Ρ‡Π°ΡΡ‚ности:

Β· Π’ ΡΠ·Ρ‹ΠΊΠ΅ практичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ сохранён Π½Π°Π±ΠΎΡ€ конструкций Π‘ΠΈ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ срСдства. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π½ΠΎΠ²Ρ‹Π΅ срСдства ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΡΡ‚Π°Ρ€Ρ‹Π΅, Π½ΠΎ Π² ΡΠ·Ρ‹ΠΊΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

Β· ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° мноТСствСнного наслСдования Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠžΠžΠŸ-подсистСмС языка Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ†Π΅Π»Ρ‹ΠΉ ряд логичСских ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ создаёт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трудности Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ компилятора. НапримСр, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠ»Π°ΡΡ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ нСсколько Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, большС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ (с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ привСдСния Ρ‚ΠΈΠΏΠ° Π² ΡΡ‚ΠΈΠ»Π΅ C) ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ²ΠΎΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ располоТСна с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ смСщСниСм ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Ρ‚. Π΅. значСния указатСля). По ΡΡ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ нСльзя ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ Π±Π΅Π· использования ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… синтаксичСских срСдств (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° dynamic_cast).

Β· Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π² ΡΠ²ΠΎΡ‘ΠΌ исходном Π²ΠΈΠ΄Π΅ приводят ΠΊ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΎΡ‡Π΅Π½ΡŒ большого ΠΎΠ±ΡŠΡ‘ΠΌΠ°, Π° Π²Π²Π΅Π΄Ρ‘нная ΠΏΠΎΠ·ΠΆΠ΅ Π² ΡΠ·Ρ‹ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ частичной спСцификации шаблонов Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠ° ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ся ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ компиляторами.

Β· ΠœΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ шаблонов C++ слоТно ΠΈ ΠΏΡ€ΠΈ этом ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ях. Оно состоит Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ срСдствами шаблонов C++ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка программирования Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ компиляции. Π‘Π°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ вСсьма ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Π°, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ вСсьма Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Π―Π·Ρ‹ΠΊΠΈ Lisp/Scheme, Nemerle ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ простыС для восприятия подсистСмы мСтапрограммирования. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΡΠ·Ρ‹ΠΊΠ΅ D Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° сравнимая ΠΏΠΎ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΠΈ, Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ простая Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ подсистСма шаблонного мСтапрограммирования.

Β· Π₯отя дСкларируСтся, Ρ‡Ρ‚ΠΎ Π‘++ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅Π½Π½Ρ‹ΠΉ язык, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π² ΡΠ·Ρ‹ΠΊΠ΅ отсутствуСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. ΠžΡ‚Ρ‡Π°ΡΡ‚ΠΈ, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π» устраняСтся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ (Loki, Boost) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ срСдства мСтапрограммирования для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ языка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ конструкциями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ лямбд/Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), Π½ΠΎ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ уступаСт качСству встроСнных Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΈΠ΅ возмоТности Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языков, ΠΊΠ°ΠΊ сопоставлСниС с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ, Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΊΡ€Π°ΠΉΠ½Π΅ слоТно ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ срСдствами мСтапрограммирования.

Β· НСкоторыС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ нСдостатком языка C++ отсутствиС встроСнной систСмы сборки мусора. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π² C++ имССтся достаточно срСдств, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ использованиС опасных ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ сборки мусора (Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π° Π½Π΅ ΡΠ·Ρ‹ΠΊΠ°). ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ встроСнной сборки мусора позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ самому Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ управлСния рСсурсами.

ВзвСсив всС Π·Π° ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования Π‘++. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ благодаря Ρ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ язык являСтся самым ΠΌΠΎΡ‰Π½Ρ‹ΠΌ срСдством Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Π΄Π°Π½Π½ΠΎΠ΅ врСмя. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΌΠ°Π»ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ сыграл Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ Ρ‡Ρ‚ΠΎ самая удобная срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Visual Studio Ρ‚Π°ΠΊΠΆΠ΅ поддСрТиваСтс Π‘++.

2. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

2.1 Анализ процСсса ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹Π±ΠΎΡ€ структур Π΄Π°Π½Π½Ρ‹Ρ… для хранСния ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ ΠΊ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ°ΠΌ, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ Π² ΠΌΠ°Ρ‚СматичСском сопроцСссорС Intel 80×87. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ задания числового значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ стСка эмулированного матСматичСского сопроцСссора, ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Ρ… элСмСнтов стСка. Π’ Ρ‚ΠΎΠΌ числС ΠΈ ΠΈΠ΄ΡƒΡ‰ΠΈΡ… Π½Π΅ ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΡƒ. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ эмуляции сопроцСссора часто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ быстроС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π±ΠΈΡ‚Π°ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ структура bits, прСдставлСнная Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.1

Π’Π°Π±Π»ΠΈΡ†Π° 2.1

Ρ‚ΠΈΠΏ

имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π±ΠΈΡ‚)

unsigned char

b0

unsigned char

b1

unsigned char

b2

unsigned char

b3

unsigned char

b4

unsigned char

b5

unsigned char

b6

unsigned char

b7

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° bits объСдинСнa Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ bait_tabс полями Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.2

Π’Π°Π±Π»ΠΈΡ†Π° 2.2

Ρ‚ΠΈΠΏ

Π½Π°Π·Π²Π°Π½ΠΈΠ΅

bits

bit

unsigned char

bait

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ структуры для мантиссы ΠΈ ΠΏΠΎΡ€ΡΠ΄ΠΊΠ°:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ud16 с ΠΏΠΎΠ»ΡΠΌΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.3

Π’Π°Π±Π»ΠΈΡ†Π° 2.3

Ρ‚ΠΈΠΏ

Π½Π°Π·Π²Π°Π½ΠΈΠ΅

bait_tab

data[2]

short

val

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ud64 с ΠΏΠΎΠ»ΡΠΌΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.4

Π’Π°Π±Π»ΠΈΡ†Π° 2.4

Ρ‚ΠΈΠΏ

Π½Π°Π·Π²Π°Π½ΠΈΠ΅

bait_tab

data[8]

_int64

val

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ud80 с ΠΏΠΎΠ»ΡΠΌΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.5

Π’Π°Π±Π»ΠΈΡ†Π° 2.5

Ρ‚ΠΈΠΏ

Π½Π°Π·Π²Π°Π½ΠΈΠ΅

ud64

mant

ud16

exp

Π’ ΡΠ°ΠΌΠΎΠΌ ΠΆΠ΅ сопроцСссорС стСковыС рСгистры ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄ структуры str с ΠΏΠΎΠ»ΡΠΌΠΈ, прСставлСнной Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.6

Π’Π°Π±Π»ΠΈΡ†Π° 2.6

Ρ‚ΠΈΠΏΠ°

Π½Π°Π·Π²Π°Π½ΠΈΠ΅

bait_tab

data[10]

ud80

val

Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ рСгистры состояния, Ρ‚Π΅Π³ΠΎΠ² ΠΈ ΠΊΠΎΠ½Ρ‚роля.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° regs прСдставлСна Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.7

Π’Π°Π±Π»ΠΈΡ†Π° 2.7

Ρ‚ΠΈΠΏ

имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π±ΠΈΡ‚)

unsigned

IE

unsigned

DE

unsigned

ZE

unsigned

OE

unsigned

UE

unsigned

PE

unsigned

SF

unsigned

ES

unsigned

C0

unsigned

C1

unsigned

C2

unsigned

TOP

unsigned

C3

unsigned

B

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° _sreg с ΠΏΠΎΠ»ΡΠΌΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.8

Π’Π°Π±Π»ΠΈΡ†Π° 2.8

Ρ‚ΠΈΠΏ

Π½Π°Π·Π²Π°Π½ΠΈΠ΅

regs

data

unsigned short int

sreg

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° _creg, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

Π’Π°Π±Π»ΠΈΡ†Π° 2.9

Ρ‚ΠΈΠΏ

имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π±ΠΈΡ‚)

unsigned

IM

unsigned

DM

unsigned

ZM

unsigned

OM

unsigned

UM

unsigned

PM

unsigned

PC

unsigned

RC

Π’Π°Π±Π»ΠΈΡ†Π° 2.10

Ρ‚ΠΈΠΏ

Π½Π°Π·Π²Π°Π½ΠΈΠ΅

unsigned short int

creg

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° _twr, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

Π’Π°Π±Π»ΠΈΡ†Π° 2.11

Ρ‚ΠΈΠΏ

имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π±ΠΈΡ‚)

unsigned char

pr0

структура _twr с ΠΏΠΎΠ»ΡΠΌΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2.12

Π’Π°Π±Π»ΠΈΡ†Π° 2.12

Ρ‚ΠΈΠΏΠ°

Π½Π°Π·Π²Π°Π½ΠΈΠ΅

unsigned short int

twr

2.2 Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° основных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области Для вычитания Π΄Π²ΡƒΡ… стСковых рСгистров, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ порядок ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅ΠΌ мантиссы. Π”Π°Π»Π΅Π΅ Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ мантиссы ΠΈΠ»ΠΈ порядка, устанавливаСм Ρ„Π»Π°Π³ΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ 0.

2.3 ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ структурной схСмы ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

int main () — главная функция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π½Π΅ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ΡŒΡΡ функция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка сопроцСссора, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ΡŒΡΡ FSUB.

int fld (str reg[],_sreg &sreg,_creg creg,_twr twr, int st0, int stimm) — Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка сопроцСссора.

int print_st (str reg[],_sreg sreg,_creg creg,_twr twr, int id) — ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ 1-ΠΉ элСмСнт стСка сопроцСссора.

int fsub (str reg[],_sreg &sreg,_creg creg,_twr twr, int fl, int s1, int s2) — функция Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°ΡΡ слоТСниС Π΄Π²ΡƒΡ… стСковых рСгистров ΠΈ Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка.

Бтруктурная схСма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°:

Рис. 1. Бтруктурная схСма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

3. ОписаниС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

3.1 ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ эмуляции ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ FSUB матСматичСского сопроцСссора Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ void main (), с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ начинаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, производится инициализация эмулятора сопроцСссора, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями, послС этого прСдлагаСтся Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ввСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

1 — fsub

2 — fsub n

3 — fsub st (n), st (n)

4 — fld

0 — Π²Ρ‹Ρ…ΠΎΠ΄ Π’ ΡΠ»ΡƒΡ‡Π°Π΅ Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π΄Π΅Ρ‚ 1, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Ρ‡Ρ‚Π΅Ρ‚ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, находящССся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, 2 — Π²Ρ‹Ρ‡Ρ‚Π΅Ρ‚ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, 3 — ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ стСка, 4 — помСстит Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

3.2 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FSUB

Π›ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдставлСна Π±Π»ΠΎΠΊ-схСмой Π½Π° Ρ€ΠΈΡ. 3.1.

Рис. 3.1. Лист 1

Рис. 3.1. Лист 2

3.3 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FLD

Π›ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдставлСна Π±Π»ΠΎΠΊ-схСмой Π½Π° Ρ€ΠΈΡ. 3.2.

Рис. 3.2. Лист 1

Рис. 3.2. Лист 2

3.4 ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Print_st

Π›ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдставлСна Π±Π»ΠΎΠΊ-схСмой Π½Π° Ρ€ΠΈΡ. 3.3.

Рис. 3.3. Лист 1

4. ВСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

4.1 Π’Ρ‹Π±ΠΎΡ€ стратСгии тСстирования ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСстов Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ тСст, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ случаи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ пользовании этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Для этого составим Π½Π°Π±ΠΎΡ€ тСстов:

План тСстирования:

1. Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ рСгистры st0 ΠΈ st1 ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fsub

2. Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ рСгистр st0 ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ n ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fsub n

3. Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ рСгистры st1 ΠΈ st5 ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fsub st1, st5

4. Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ рСгистры st0 ΠΈ st2 ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fsub st0, st2

5. Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ рСгистры st0 ΠΈ st3 ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fsub st0, st3

6. Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ рСгистры st0 ΠΈ st6 ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fsub st0, st6

7. Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ рСгистры st0 ΠΈ st7 ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fsub st0, st7

8. Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ рСгистры st0 ΠΈ st7 ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fsub st0, st4

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстов: ΠŸΠ΅Ρ€Π΅Π΄ тСстированиСм.

twr =98B; swr =E; cwr =D

Π’Π°Π±Π»ΠΈΡ†Π° 4.1

НазваниС рСгистра

ΠœΠ°Π½Ρ‚ΠΈΡΡΠ°

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ

St0

5,54

St1

4,562

St2

Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

St3

St4

Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ

St5

1,12

St6

нСчисло

St7

пусто

ПослС 1 тСста (fsub) рСгистры Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ся.

Π’Π°Π±Π»ΠΈΡ†Π° 4.2

НазваниС рСгистра

ΠœΠ°Π½Ρ‚ΠΈΡΡΠ°

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ

St0

— 4,008

St1

4,562

St2

Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

St3

St4

Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ

St5

1,12

St6

нСчисло

St7

пусто

ПослС 2 тСста (fsub n, n = -5000,52), рСгистры Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ся.

Π’Π°Π±Π»ΠΈΡ†Π° 4.3

НазваниС рСгистра

ΠœΠ°Π½Ρ‚ΠΈΡΡΠ°

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ

St0

9,9252

St1

4,562

St2

Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

St3

St4

Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ

St5

1,12

St6

нСчисло

St7

пусто

ПослС 3 тСста (fsub st1, st5), рСгистры Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ся.

Π’Π°Π±Π»ΠΈΡ†Π° 4.4

НазваниС рСгистра

ΠœΠ°Π½Ρ‚ΠΈΡΡΠ°

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ

St0

8,7952

St1

4,562

St2

Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

St3

St4

Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ

St5

1,12

St6

нСчисло

St7

пусто

ПослС 4 тСста (fsub st0, st2).

twr =98B

swr =400E (Ρ„Π»Π°Π³ IE = 1, DE = 1)

cwr =D

Π’Π°Π±Π»ΠΈΡ†Π° 4.5

НазваниС рСгистра

ΠœΠ°Π½Ρ‚ΠΈΡΡΠ°

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ

St0

8,7952

St1

4,562

St2

Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

St3

St4

Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ

St5

1,12

St6

нСчисло

St7

пусто

ПослС 5 тСста (fsub st0, st3), рСгистры Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹.

Π’Π°Π±Π»ΠΈΡ†Π° 4.6

НазваниС рСгистра

ΠœΠ°Π½Ρ‚ΠΈΡΡΠ°

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ

St0

8,7952

St1

4,562

St2

Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

St3

St4

Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ

St5

1,12

St6

нСчисло

St7

пусто

ПослС 6 тСста (fsub st0, st6); twr =98B; swr =600E (Ρ„Π»Π°Π³ IE = 1)

cwr =D

Π’Π°Π±Π»ΠΈΡ†Π° 4.7

НазваниС рСгистра

ΠœΠ°Π½Ρ‚ΠΈΡΡΠ°

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ

St0

8,7952

St1

4,562

St2

Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

St3

St4

Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ

St5

1,12

St6

нСчисло

St7

пусто

ПослС 7 тСста (fsub st0, st7).

twr =98B

swr =410E (Ρ„Π»Π°Π³ IE = 1, SF = 1)

cwr =D

Π’Π°Π±Π»ΠΈΡ†Π° 4.8

НазваниС рСгистра

ΠœΠ°Π½Ρ‚ΠΈΡΡΠ°

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ

St0

8,7952

St1

4,562

St2

Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

St3

St4

Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ

St5

1,12

St6

нСчисло

St7

пусто

ПослС 8 тСста (fsub st0, st4).

twr =98B

swr =600E (Ρ„Π»Π°Π³ IE = 1)

cwr =D

Π’Π°Π±Π»ΠΈΡ†Π° 4.9

НазваниС рСгистра

ΠœΠ°Π½Ρ‚ΠΈΡΡΠ°

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ

St0

8,7952

St1

4,562

St2

Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

St3

St4

Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ

St5

1,12

St6

нСчисло

St7

пусто

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»Π° написана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ сути, Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ матСматичСского сопроцСссора fsub, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Ρ‘ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ. Π‘Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π² Π²ΠΈΠ΄Π΅ эмуляции 3 рСгистра. РСгистор Ρ‚Π΅Π³ΠΎΠ², рСгистр ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ состояний.

Π‘Ρ‹Π»Π° ΠΈΠ·ΡƒΡ‡Π΅Π½Π° систСма ΠΊΠΎΠΌΠ°Π½Π΄ процСссора 80×87 ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСссоров. Π‘Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ прСдставлСниС ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ устройства ΠΊΠ°ΠΊ процСссор, Ρ‡Ρ‚ΠΎ Π΄ΠΎ Π½Π΅ Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±Ρ‹Π»ΠΎ извСстно Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ «Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика» .

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ П. 1. ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

#include

#include

#include

struct bits

{

unsigned char b0: 1;

unsigned char b1: 1;

unsigned char b2: 1;

unsigned char b3: 1;

unsigned char b4: 1;

unsigned char b5: 1;

unsigned char b6: 1;

unsigned char b7: 1;

};

union bait_tab

{

bits bit;

unsigned char bait;

};

struct regs

{

unsigned IE: 1; // Ошибка Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ;

unsigned DE: 1; // Ошибка Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°;

unsigned ZE: 1; // Ошибка дСлСния Π½Π° Π½ΠΎΠ»ΡŒ;

unsigned OE: 1; // Ошибка антипСрСполнСния;

unsigned UE: 1; // Ошибка пСрСполнСния;

unsigned PE: 1; // Ошибка точности;

unsigned SF: 1; // Π‘ΠΈΡ‚ ошибки Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΡΡ‚Π΅ΠΊΠΎΠΌ;

unsigned ES: 1; // Π‘ΠΈΡ‚ суммарной ошибки;

unsigned C0: 1; // Π‘ΠΈΡ‚ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° (Condition Code);

unsigned C1: 1; // Π‘ΠΈΡ‚ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° (Condition Code);

unsigned C2: 1; // Π‘ΠΈΡ‚ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° (Condition Code);

unsigned TOP:3; // Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ рСгистра Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка;

unsigned C3: 1; // Π‘ΠΈΡ‚ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° (Condition Code);

unsigned B: 1; // Π‘ΠΈΡ‚ занятости.

};

union _sreg

{

regs data;

unsigned short int sreg;

};

union _creg

{

struct

{

//маски

unsigned IM: 1; // Маска Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ;

unsigned DM: 1; // Маска Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°;

unsigned ZM: 1; // Маска дСлСния Π½Π° Π½ΠΎΠ»ΡŒ;

unsigned OM: 1; // Маска антипСрСполнСния;

unsigned UM: 1; // Маска пСрСполнСния;

unsigned PM: 1; // Маска точности;

unsigned PC: 2; // ПолС управлСния Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ;

unsigned RC: 2; // ПолС управлСния ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ.

} data;

unsigned short int creg;

};

union _twr

{

struct

{

unsigned char pr0:2;// 00 — занят допустимым Π½Π΅ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

//unsigned char pr1:2;// 01 — содСрТит Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

//unsigned char pr2:2;// 10 — содСрТит ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ числСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

//unsigned char pr3:2;// 11 — рСгистр пуст

//unsigned char pr4:2;

//unsigned char pr5:2;

//unsigned char pr6:2;

//unsigned char pr7:2;

} data[8];

unsigned short int twr;

};

union ud16

{

bait_tab data[2];

short val;

};

union ud32

{

bait_tab data[4];

int val;

};

union ud64

{

bait_tab data[8];

_int64 val;

};

struct ud80

{

ud64 mant;

ud16 exp;

};

union str

{

bait_tab data[10];

ud80 val;

};

int fld (str reg[],_sreg &sreg,_creg creg,_twr twr, int st0, int stimm);

int print_st (str reg[],_sreg sreg,_creg creg,_twr twr, int id);

int fsub (str reg[],_sreg &sreg,_creg creg,_twr twr, int fl, int s1, int s2);

int main ()

{

str reg[9]={};

_sreg sreg;

_creg creg;

_twr twr;

setlocale (LC_ALL," Russian");

int d = -1;

sreg.sreg = 0;

creg.creg = 0;

sreg.data.TOP = 7;

creg.data.PC = 3;

twr.twr = 0xffff;

memset (reg, 0, sizeof (reg));

while (d ≠ 0)

{

printf («1 — fsubn2 — fsub nn3 — fsub st (n), st (n)n4 — fldn0 — Π²Ρ‹Ρ…ΠΎΠ΄n»);

scanf («%d» ,&d);

switch (d)

{

case 1:// fsub========================================================================================

fsub (reg, sreg, creg, twr, 1,0,0);

//print_st (reg, sreg, creg, twr, 0);

break;

case 2:

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ нСпосрСдствСнный ΠΎΠΏΠ΅Ρ€Π°Π½Π΄: n»);

fld (reg, sreg, creg, twr, 0,9);

print_st (reg, sreg, creg, twr, 0);

break;

case 3:

int s1;

int s2;

printf («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° рСгистров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: n»);

scanf («%d %d» ,&s1,&s2);

//fld (reg, sreg, creg, twr, s1,0);

//fld (reg, sreg, creg, twr, s2,0);

fsub (reg, sreg, creg, twr, 1, s1,s2);

break;

case 4:

printf («Π”ΠΎΠ±ΠΎΠ²Π»Π½Π΅Π½ΠΈΠ΅ значСния Π² ΡΡ‚Π΅ΠΊ: n»);

fld (reg, sreg, creg, twr, 0,0);

break;

}

}

}

int fld (str reg[],_sreg &sreg,_creg creg,_twr twr, int st0, int stimm)

{

short p = 0;

char l[10];

_int64 i = 0;

scanf («%s» ,&l);

for (int m = 0; m <= strlen (l); m++)

{

if ((l[m] == '0')&&(p <= 0))

{

p—;

}

else

{

if ((i == 0)&&(l[m] ≠ ','))p++;

}

if (l[m] == ',')

{

for (int e = m; e < strlen (l); e++)

{

l[e] = l[e+1];

}

char* ends;

i = strtol (l,&ends, 10);

if (l[m] ≠ '0')break;

}

}

/*if (p > 0)

{p++;}

else

{p—;}*/

if (i ≠ 0)

{

twr.data[st0]. pr0 &= 0;

}

else

twr.data[st0]. pr0

p—;

if (stimm == 0)

{

if (st0 ≠ 0)

{

reg[st0]. val.mant.val = i;

reg[st0]. val.exp.val = p;

}

else

{

reg[sreg.data.TOP]. val.mant.val = i;

reg[sreg.data.TOP]. val.exp.val = p;

sreg.data.TOP =sreg.data.TOP — 1;

}

}

else

{

reg[8]. val.mant.val = i;

reg[8]. val.exp.val = p;

fsub (reg, sreg, creg, twr, 2,0,0);

}

return 0;

}

int print_st (str reg[],_sreg sreg,_creg creg,_twr twr, int id)

{

int ssn;

if (id ≠ 0)

{

ssn = id;

}

else

{

ssn = sreg.data.TOP;

}

double a = (double)reg[ssn]. val.mant.val;

short b = reg[ssn]. val.exp.val;

for (int i = 0; i <= abs (b); i++)

{

a /=10;

}

printf («%10.5fn», a);

return 0;

}

int fsub (str reg[],_sreg &sreg,_creg creg,_twr twr, int fl, int s1, int s2)

{

_int64 a;

short am;

_int64 b;

short bm;

int sn1;

int sn2;

if (fl == 1)

{

if ((s2 == 0)&&(s1 == 0))

{

//sn1 = sreg.data.TOP + 2;

//sn2 = sreg.data.TOP + 1 ;

sn1 = 7;

sn2 = 6;

}

else

{

sn1 = sreg.data.TOP + s1;

sn2 = sreg.data.TOP + s2;

}

a = reg[sn1]. val.mant.val;

am = reg[sn1]. val.exp.val;

b = reg[sn2]. val.mant.val;

bm = reg[sn2]. val.exp.val;

}

else

{

a = reg[sreg.data.TOP +1]. val.mant.val;

am = reg[sreg.data.TOP +1]. val.exp.val;

b = reg[8]. val.mant.val;

bm = reg[8]. val.exp.val;

}

short dm = am — bm;

if (a > b)

{

for (int i = 0; i < dm; i++)

{

a *= 10;

}

//reg[sn1]. val.exp.val+=dm;

}

else

{

for (short n = 0; n <= (-1)*dm; n++)

{

b *= 10;

}

if (fl == 1)

{

reg[sn1]. val.exp.val += (-1)*dm;

}

else

{

reg[sreg.data.TOP +1]. val.exp.val += (-1)*dm;

}

}

a-= b;

//printf («%dn», a);

if (fl == 1)

{

reg[sn1]. val.mant.val = a;

//sreg.data.TOP+=2;

print_st (reg, sreg, creg, twr, sn1);

}

else

{

reg[sreg.data.TOP]. val.mant.val = a;

//sreg.data.TOP+=1;

}

return 0;

}

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