Sin(x) = x x3 3! + x5 5! x7 7! + Мұнда х аргументі градуспен емес, радианмен өлшенеді



бет2/3
Дата05.12.2023
өлшемі41,21 Kb.
#134386
1   2   3
24 ТАРАУ
ЖОҒАРЫ ЖӘНЕ ТӨМЕН ТІЛДЕР

Машина кодтарында бағдарламалау — тіс тазалағышпен тіс тазалаған сияқты. Онымен тамақ бөліктерін алу өте қиын, бірақ олардың өздері соншалықты кішкентай, түскі ас мәңгілікке созылады. Машина кодтарын сатып алу өте қарапайым есептеу тапсырмаларын белгілейді - санды жадтан процессорға жүктеу, оны басқа санмен қосу, нәтижені қайтадан жазу жад-бұл елестету мүмкін емес нәрсе осындай кішкентай кірпіштерден бүкіл ғимарат жиналады.


22-тараудың басында біз екілік деректерді жадқа қосқыштармен енгіздік, бірақ содан бері біз керемет түрде алға жылжыдық. Сол тарауда мен қалай қолдану керектігін айттым қарапайым бағдарламалар деректерді енгізу үшін пернетақтаны пайдаланыңыз (мысалы, машина кодтары) және оларды монитор экранында қараңыз. Осыдан кейін біздің қиялымызда жұмыс жасаңыз компьютер ыңғайлы болды, бірақ біз барлық мүмкін жақсартуларды әлі таусылған жоқпыз.
Естеріңізде болса, машиналық кодтардың байттары сәйкес келеді MOV, ADD, CALL, HLT қысқа мнемоникалық кодтары, соның арқасында бағдарлама кем дегенде қарапайым ағылшын тіліндегі нұсқаулар жиынтығына ұқсайды. Жиі мнемикалық код команданың әрекетін нақтылайтын дәлелден тұрады. Мысалы, процессордың командалық жүйесінде 8080 командасы бар 46h коды жад ұяшығынан, мекен-жайдан байтты регистрге орналастырады ол HL регистрлерінің жұбында жазылған. Мнемикалық кодты қолдану бұл әрекет айқын көрінеді:
MOV B,[HL]
Әрине, ассемблер тілінде бағдарлама жасау әлдеқайда көп оны машиналық кодтарға жазудан гөрі оңай. Өкінішке орай, ассемблер процессоры түсінбейді. Сондықтан мнемикалық кодтардағы бағдарлама қағазға жазылуы керек. Ол сізге дайын болған кезде іске қосу, сіз құрастыру операторларын қолмен түрлендіресіз екілік машиналық кодтар және оларды жадқа енгізіңіз.
Бірақ неге бұл тапсырманы автоматтандыруға болмайды? Бұл үшін 8080 процессоры бар компьютер жеткілікті CP/M ОЖ басқарады.
Бастау үшін program1 мәтіндік файлын жасаңыз.ASM және оған бағдарламаны ассемблерге енгізіңіз (ASM түрі дәл және файлда ассемблер бағдарламасы бар дегенді білдіреді). Файлды құру және өңдеу үшін CP/M бағдарламасының жиынтығынан мәтіндік редакторды қолдануға болады ED.COM.
Біз өзімізге тым күрделі міндет қоймаймыз:
ORG 0100h LXI DE,Text MVI C,9 CALL 5 RET Text: DB 'Hello!$' END
Бұл бағдарламаның барлық дерлік операторлары бізге таныс. Команда Біз бұрын кездестірмеген ORG 8080 процессорының командалық жүйесіне кірмейді. Ол жай ғана келесі пәрмен 0100h мекенжайында орналасуы керек екенін көрсетеді. сіз сияқты есіңізде болсын, дәл осы мекен-жайдан бастап, CP / M бағдарламаларды жадқа жүктейді.
Келесі пәрмен-LXI-16 биттік мәнді DE регистрлерінің жұбына жүктейді. Мұнда мән мекенжайы белгімен көрсетілген Бағдарламаның соңында DB операторының алдында орналасқан мәтін (Data Byte, байт деректер). DB операторының дәлелдері болуы мүмкін үтірмен бөлінген бірнеше байт мәндері немесе (сияқты бізде) апострофтармен қоршалған мәтін жолы.
MVI командасы регистрге орналастырады 9 саны. Бұл сан мәтін жолының экранында көрсетілетін CP/M функциялары, DE регистрлерінде жазылған мекенжай бойынша басталады, жәнеейся доллар белгішесімен аяқталады (жолдың соңы $ белгісімен белгіленетіні таңқаларлық, бірақ CP/m осылай жұмыс істейді). Функцияны call 5 операторы шақырады. Соңында, RET командасы бағдарламаның орындалуын тоқтатады және басқаруды жүйеге береді (бағдарламаны басқаша тоқтатуға болады). END операторы файлдың соңын ассемблердегі бағдарламамен белгілейді.
Сонымен, бізде 7 жолдан тұратын мәтіндік файл бар. Енді оны құрастыру керек, яғни операторларды түрлендіру керек машиналық кодтарға құрастыру. Осы уақытқа дейін біз мұны қолмен жасадық. Бірақ CP / M арнайы бағдарламаны қамтиды ASM.COM, бұл түрлендіруді автоматты түрде орындайды. Жүйені шақырғаннан кейін пәрменді енгізу жеткілікті:
ASM PROGRAM1.ASM
ASM бағдарламасы дискіден PROGRAM1 файлын табады.ASM және файл жасайды PROGRAM1.COM, онда ассемблер операторларына сәйкес келетін машина кодтары орналастырылады (адал мен ассембляция процесінің бір қадамын өткізіп жібердім, бірақ болып жатқанның мәнін түсіну үшін бұл маңызды емес). Осыдан кейін program1 бағдарламасын командалық бағдарламадан бастауға болады ол экранда " Сәлем!"және жұмысты аяқтайды.
Файл PROGRAM1.COM құрамында келесі 16 байт бар:
11 09 01 0E 09 CD 05 00 C9 48 65 6C 6C 6F 21 24
Алғашқы 3 байт-LXI командасы, келесі 2-команда MVI. 3 байтты call 5 командасы алады, ал 1 — RET командасы. Соңғы 7 байт-Hello әріптерінің ASCII кодтары, леп белгісі және $ белгісі.
Ассемблер бағдарламасының жұмысы, мысалы, ASM.COM, ассемблер тілінде бағдарламасы бар файлды оқуға дейін азаяды (бағдарламашылар оны көбінесе бастапқы код файлы деп атайды) және машиналық кодтары бар орындалатын (орындалатын) файлды жасау. Шын мәнінде, ассемблерлер өте қарапайым бағдарламалар, өйткені олардың жұмысы мнемоникалық және машиналық кодтар арасындағы бір-біріне сәйкес келеді. Ассемблер файлдан жолды оқиды, бөледі ол команданың мнемикалық коды мен аргументтерінде, содан кейін команданың және аргументтердің осындай тіркесіміне сәйкес келетін машиналық кодты табады (тізімде барлық мүмкін комбинациялар болуы керек). Салыстыру нәтижесінде дәйектілік пайда болады командалар тізбегіне дәл сәйкес келетін машиналық кодтар.
Ескерту: мәтін белгісінің орнына оның 0109h мекен-жайы кодқа ауыстырылады. Бағдарлама 0100h мекен-жайынан бастап жадқа жүктелгеннен кейін мәтіндік жол болады. Әдетте, Ассемблерде бағдарлама жазатын бағдарламашы нақты мекен-жайларды ауыстыру туралы алаңдамайды — мұны ассемблер жасайды.
Бірінші ассемблер бағдарламасын жазған бағдарламашы, әрине, оны машиналық кодтарға қолмен аударуға мәжбүр болды. Келесі, жақсартылған ассемблер нұсқасы компьютерді автоматты түрде біріктіруге болады бірінші ассемблердің көмегімен. Жаңа ассемблер келеді жаңа процессор пайда болған сайын дамытыңыз. Бірақ сіз мұны ескі процессоры мен ескі құрастырушысы бар компьютерде жасай аласыз.
Әрине, ассемблер бағдарламалары бағдарламашыны жұмыстың ең алғыссыз бөлігінен — операторларды машина кодтарына қолмен аударудан құтқарады. Дегенмен, ассемблер тілі екі үлкен кемшілікпен ауырады. Олардың біріншісі туралы сіз, мүмкін, олар қазірдің өзінде болжаған шығар: ассемблер тілінде бағдарламалау өте қиын міндет. Микропроцессордың әрекетін тікелей басқара отырып, сіз алаңдауыңыз керек сансыз ұсақ-түйектер.
Екінші кемшілігі-ассемблердегі бағдарлама емес портативті (портативті). Мысалы, Intel 8080 процессорына арналған ассемблер тілінде жазылған бағдарлама мүмкін емес Motorola 6800 процессоры бар компьютерде іске қосыңыз. Ол үшін алдымен оны Ассемблерде қайта жазу керек процессор. Бұл, әрине, қиын болмайды, өйткені сіз бастапқы бағдарламаны құру арқылы негізгі ұйымдастырушылық және алгоритмдік мәселелерді шешесіз бе, бірақ жұмыс әлі де жеткілікті.
23-тарауда мен қазіргі микропроцессорларда өзгермелі сандармен жұмыс істеуге арналған командалар бар деп жаздым нүкте. Олар, әрине, бағдарламашының өмірін жеңілдетеді, бірақ олай емес әсіресе. Қарапайым арифметикалық амалдарды орындау үшін процессор командалары туралы ұмытқым келеді, математикалық өрнектер үшін ғасырлар бойы дәлелденген алгебралық жазу формасын қолдану, мысалы:
A ´ Sin(2 ´ PI + B) / C
мұндағы A, B және C-ерікті сандар, ал PI - 3,14159.
Сонымен, мәселе неде? Егер бұл өрнек мәтіндік файлда жазылса, біз сол файлдағы жолдарды оқып, оларды машиналық кодтарға түрлендіретін ассемблер тілінде бағдарлама жасай аламыз.
Егер сізге бұл өрнекті есептеу қажет болса бір күні сіз калькуляторға барасыз. Бағдарламаны құру сізді оны есептеу қажеттілігіне итермелеген шығар A, B коэффициенттерінің әртүрлі мәндерімен бірнеше рет. Сонымен, осы өрнектен басқа коэффициенттерді есептеу үшін сізге басқалар қажет болады.
Мұның бәрі жоғары деңгейлі бағдарламалау тіліне арналған тапсырмалар (жоғары деңгей). Ассемблер тілі төмен деңгейлі тіл болып саналады (төмен деңгей), өйткені ол компьютердің аппараттық құралдарымен тікелей байланысады. Іс жүзінде жоғары деңгейлі тілдер ассемблерден басқа кез-келген тіл деп аталады, бірақ бұл дегенді білдірмейді, олардың барлығы бірдей. Кейбір тілдердің деңгейі деңгейден жоғары басқа тілдер. Сіз бағдарламалау тілі деген не екенін білесіз бе ең жоғары деңгей? Бұл кезде компания президенті жалдайды пернетақтада немесе одан да жақсысы, аяқтарын үстелге қою диктант хатшы: "сол жылы пайда мен шығынды есептеңіз, жылдық есеп жазыңыз, 1000 дана басып шығарыңыз және жіберіңіз акционерлерге"! Әрине, нақты бағдарламалау тілдері, тіпті жоғары деңгей, бұл идеалдан өте алыс.
Адам тілдері жүздеген және мыңдаған жылдар бойы өзара ену, кездейсоқ өзгерістер мен қарыз алу арқылы қалыптасады. Тіпті Эсперанто сияқты жасанды тілдердің негізі бүкіл ғасырлық тарихы бар нақты тілдерге негізделген. Тағы бір нәрсе-бағдарламалау тілдері. Оларды жасау әрқашан ойластырылған және мақсатты болды. Бағдарламалау тілін жасаушы оған адам мен машинаның қарым-қатынасы туралы идеясын енгізді. 1993 жылы 1950 жылдардан бастап 1000-нан астам бағдарламалау тілдері жасалды деп есептелді.
Әрине, тілді ойлап табу (яғни синтаксисті дамыту - өрнектерді құру ережелері) - тек жарты шайқас. Сондай-ақ, компиляторды (компиляторды), яғни тіл операторларын машина кодтарына түрлендіретін бағдарламаны жазу керек. Сияқты ассемблерге, компилятор таңбадан кейін файлды оқиды бастапқы бағдарламамен, оны сөздерге, операторларға және сандар. Компиляторды жазу, әрине, әлдеқайда қиын ассемблер. Ассемблер операторы біреуіне аударылады машина коды, ал жоғары деңгейлі тіл операторы ереже көптеген машиналық командаларға айналады. Компиляторлардың дамуы кең әдебиетке арналған.
Жоғары деңгейлі бағдарламалау тілдерінің өзіндік ерекшеліктері бар артықшылықтары мен кемшіліктері. Жоғары деңгейлі тілдің басты артықшылығы-ол әдетте үйренудің және қолданудың қарапайымдылығында ассемблерден әлдеқайда жоғары. Жоғары деңгейлі тілдегі бағдарлама ассемблерге қарағанда қысқа және түсінікті. Жоғары деңгейлі тілдер негізінен портативті, яғни бірдей жақсы олар әртүрлі процессорлары бар компьютерлерде жұмыс істейді. Бұл дегеніміз, бағдарламаны құру кезінде нәзіктіктерге терең үңілудің қажеті жоқ ол жұмыс істейтін компьютердің архитектурасы. Әрине, әр процессор үшін сізге жеке процессор қажет компилятор. Ол жасаған орындалатын файл да болады тек осы процессорға жарамды.
Екінші жағынан, ассемблердегі Бағдарлама іс жүзінде әрқашан жоғары деңгейлі тілдегі ұқсас бағдарламадан тиімдірек. Бұл жасалған орындалатын файлды білдіреді жоғары деңгейлі тіл компиляторы, көп орын алады және ассемблердегі функционалды бірдей бағдарламаға қарағанда баяу жұмыс істейді. Айта кету керек, соңғы жылдары бұл ереже бұрынғы өзгеріссіз орындалмайды. Микропроцессорлар күрделене түсті, ал компиляторлар жасалған кодтарды оңтайландыруда үлкен жетістіктерге жетті.
Жоғары деңгейлі тіл процессорды пайдалануды жеңілдетеді, бірақ оны қуатты етпейді. Процессор орындай алатын кез келген әрекеттерді бағдарламалауға болады ассемблер тілінде. Бұл дегеніміз, жоғары деңгейлі тілдегі бағдарлама процессорға жаңа мүмкіндіктер бермейді. Сонымен қатар, бағдарламаны портативті ету үшін, бұл процессордың кейбір нақты мүмкіндіктерінен бас тарту керек.
Мысал келтірейін. Көптеген процессорларда командалар бар батарея мазмұнының биттік ауысуын орындау солға немесе оңға. Ешқандай жоғары деңгейлі тілде ұқсас командалар жоқ. Бұл әрекетті орындау үшін оны бөлу немесе көбейту арқылы ауыстыру керек 2 (алайда, көптеген заманауи компиляторларда екіге көбейту немесе бөлу үшін дәл қолданылады биттік ауысым командалары). Көптеген жоғары тілдерде жоқ логикалық операциялардың биттерімен орындауға арналған деңгейлер мен командалар.
Алғашқы үй компьютерлеріне арналған қолданбалы бағдарламалардың көпшілігі Ассемблерде жазылған. Бұл күндері ол кез - келген шешімді қоспағанда, іс жүзінде қолданылмайды нақты міндеттер. Процессорлардың архитектурасы неғұрлым күрделі болса, олар үшін құрастыру бағдарламаларын жазу соғұрлым қиын болады. Сонымен қатар, компиляторлар да жетілдірілуде. Ассемблердің танымалдылығын төмендетудегі маңызды рөл қол жетімді жедел жад пен дискінің көлемін ұлғайту да ойнады. Бағдарламашыларға енді кодтар жасаудың қажеті жоқ, бұл жадтың ең аз мөлшеріне және толығымен бір дискетке сәйкес келді.
Көптеген алғашқы компьютерлердің дизайнерлері тырысты алгебралық көмегімен олар үшін тапсырмаларды тұжырымдау жазбалар, бірақ шынымен жұмыс істейтін компилятор жасаңыз 1952 жылы ғана сәтті болды, оны UNIVAC компьютеріне жазды Грейс Мюррей Хоппер (1906-1992), содан кейін Ремингтон рэнд компаниясында жұмыс істеді. Грейс Хоппер өз өмірін байланыстырды 1944 жылы Есептеу техникасы, бірақ тіпті тоғызыншы ондықты алмастыра отырып, digital корпорациясындағы қоғаммен байланыс үшін жауап беретін компьютерлік индустрияда жұмысын жалғастырды Equipment.
Бүгінгі таңда өзектілігін жоғалтпаған ең көне жоғары деңгейлі тіл-ФОРТРАН (FORTRAN), оның бастапқы нұсқасынан көп нәрсе сақталмаса да. Айтпақшы, көптеген бағдарламалау тілдерінің атаулары әдетте жазылады бас әріптермен, өйткені олар аббревиатуралар. Мысалы, Фортранның атауы "формула аудармасы" (формула аудармасы) тіркесінен тұрады. ФОРТРАН 1950 жылдардың ортасында IBM-де сериялы компьютерлер үшін жасалған 704 және ұзақ уақыт бойы ғылыми және инженерлік бағдарламалау. Бұл әсіресе кең қолдаудың арқасында математикалық есептеулер үшін ыңғайлы жұмыс мүмкіндігін қоса алғанда, өзгермелі нүкте операциялары күрделі сандармен.
Әр тілдің қолдаушылары мен қарсыластары көп. Олардың даулары көбінесе эмоционалды түрде жүреді. Тырысу бейтараптықты сақтау үшін Мен мысал ретінде қазір ешкім қолданбайтын тілді қолдануды шештім, — АЛГОЛ (ALGOL). Оның есімі де қысқартылған "Алгоритмдік тілден" (алгоритмдік тіл). Алгол мысалында жоғары деңгейлі тілдердің табиғатын зерттеу ыңғайлы, өйткені ол көптеген жолдармен пайда болған көптеген қарапайым тілдердің тікелей атасы соңғы 40 жылда. Тіпті қазіргі уақытта кейде "Алгол типті бағдарламалау тілдері" туралы естуге тура келеді.
Бірінші нұсқасы — АЛГОЛ 58 — 1957-58 жылдары жасалған. халықаралық бағдарламашылар комитеті. Екі жылдан кейін болды жетілдірілген нұсқа — ALGOL 60 шығарылды. Ақыр соңында, бұл Алгол 68-ге жетті, бірақ бұл тарауда мен "қайта өңделген" құжатында сипатталған тілдің нұсқасы туралы сөйлесемін алгоритмдік тілдің сипаттамасы АЛГОЛ 60", оның жұмысы 1962 жылы аяқталды, ал 1963 жылы жарық көрді.
Алголға шағын бағдарлама жазайық. Бізде осы тілдің компиляторы бар деп есептейміз ALGOL.COM, CP/M немесе MS-DOS-да жұмыс істейді. Біз бұл бағдарламаны бірінші файлға жазамыз.ALG (назар аударыңыз файл түріне).
Алголдағы бағдарлама негізгі сөздер (keywords) begin және end арасында. Бастау үшін біреуін экранға шығарыңыз мәтін жолы:

Begin
print ('This is my fist ALGOL program!');


ende
Компиляторды іске қосу үшін пәрмен жолына теру керек:
ALGOL FIRST.ALG
Бұған жауап ретінде компилятор бағдарламаның үшінші жолында танылмаған кілт сөз туралы хабарлайды:


Достарыңызбен бөлісу:
1   2   3




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет