Ассемблердің қарапайым құрылымдары
Ассемблер тілін оқуды атаулар (идентификаторлар), сандар және жолдар (символдар тізбегі) тәрізді қарапайым құрылымдардың - жазылу ережелерінен бастаймыз.
Идентификаторлар
Идентификатор программаның әртүрлі обьектілерін - айнымалыларды, белгілерді, амалдар атауларын және т.б. - белгілеу үшін қажет.
Ассемблер тілінде идентификатор латын әріптерінен (бас, кіші), цифрлардан және ? . @ _ $ символдарынан тұратын тізбек.
Идентификаторларға келесі шектеулер қойылады:
· идентификатордың ұзындығы 255 сиволға дейін жетуі мүмкін, бірақ транслятор олардың алдыңғы 31 символын ғана таниды;
· идентификатор цифрдан басталмайды ( 7А – қате, А7 – дұрыс );
· нүкте идентификатордың бірінші символы ғана болуы мүмкін (.А – дұрыс, А. - қате );
· идентификаторда бір атаулы бас және кіші әріптер эквивалентті болып саналады ( АХ, Ах, аХ және ах – бәрі бірдей ).
Идентификатордың мүмкін болатын ұзындығын(ТАSM-де) командалық жолда /mv кілтін пайдалану арқылы өзгертуге болады. Сонымен қатар трансляторға бас және кіші әріптерді ажыратуды көрсету мүмкіндігі бар.
Идентификаторлар қызметші сөздер және атаулар болып бөлінеді. Қызметші сөздер – транслятор үшін мағынасы алдын-ала анықталған сөздер. Олар регистрлер (АХ, SI т.с.с.), командалар атаулары (ADD, NEG т.с.с.) және т.б. объектілерді белгілеуде қолданылады. Басқа идентификаторлар атаулар деп аталады, программа жасаушы оларды айнымалыларды, белгілерді және басқа программа объектілерін белгілеу арқалы өзінің қалауынша қолдана алады.
Бүтін сандар
Бүтін сандар 10-дық , 2-ліқ , 8-дік және 16-лық санау жүйелерінде жазылады. Ондық санау жүйесінде сандар әдеттегідей жазылады, ал басқа санау жүйелеріндегі сандардың соңында спецификатор - әріп (арнайы белгі) қойылады. Ол әріп санның қандай санау жүйесінде жазылғанын көрсетеді. Екілік санау жүйесінде жазылған санның соңында b (binary ) әріпі, сегіздік санау жүйесінде жазылған санның соңында o(octal) немесе q (“o” әріпі нөлге ұқсайды, сондықтан шатастырып алмас үшін “q” әріпі жазылады) әріпі, ал оналтылық санау жүйесінде жазылған санның соңында h әріпі жазылады. Ондық санау жүйесінде жазылған санның соңында d әріпі жазылады, бірақ жазбаса да болады.
Мысалдар:
ондық сандар: 123,-386,+40,123d,-386d,101d
екілік сандар: 101b,-11000b
сегіздік сандар: 74q,-74q,101b
он алтылық сандар: 1AFh,-1AFh
Оналтылық санды жазу барысында, егер бұндай сандар «әріптік» цифрдан (А-F) басталса, мысалы А25h, онда бұл жазудың санды немесе идентификаторды көрсетіп тұрғаны түсініксіз. Сондықтан шатаспас үшін: егер оналтылық сан А–F символдарынан басталса, онда санның алдына міндетті түрде ең болмағанда бір нөл жазу керек. Мысалы 0А25h – сан, ал А25h – идентификатор.
3.1.3 Жолдар (символдар тізбегі)
Жолдар бір немесе қос тырнақшаларға алынып жазылған символдар тізбегі: ‘А’, “А”,‘АВС’, “АВС”.
Айта кететін жайттар:
· символдар ретінде орыс, қазақ алфавиттерінің әріптерін қолдануға болады;
· жолдарда бас және кіші әріптер бірдей болып есептелмейді;
· егер жол ішінде символ ретінде тырнақша қолданылатын болса, онда ол былайша жасалады: егер жол бір тырнақшаларға алынып жазылған болса, онда бір тырнақшалар екі рет қайталанады, ал қос тырнақшалар қайталанбайды, және керісінше, егер жол қос тырнақшаларға алынып жазылған болса, онда қос тырнақшалар екі рет қайталанады, ал бір тырнақшалар қайталанбайды:
Сөйлемдер
Ассемблерде программа сегменттер деп аталатын жеке блоктарға бөлінеді. Программа осындай бір немесе бірнеше сегменттерден тұруы мүмкін. Программа сегменттері олардың типтеріне (кодтар, мәліметтер, стек) байланысты белгілі бір атаулаға иеленеді. Программаның сегменттерге бөлінуі Intil процессорларының жадты сегментттеп ұйымдастыруының нәтижесі. Әр сегмент тілдің сөйлемдері деп аталатын жеке жолдардан тұрады.
Сөйлемді келесі жолға түсіруге немесе бір жолға екі сөйлем жазуға болмайды. Егер сөйлемде 131-ден артық символ болса, онда 132-ші символ және қалған символдар ескерілмейді. Сөйлемдердің жазылуында пробел қою ережелерін ескеру қажет:
· қатар тұрған идентификаторлар немесе сандар арасына міндетті түрде ең болмағанда бір пробел қойылады;
· идентификатордың және санның ішіне пробел қойылмайды;
· қалған жерлерде пробелды қойса да, қоймаса да болады;
· бір пробел қойылған жерге тағы да пробелдер қоюға болады.
Ассемблер тілінде сөйлемдер мағынасына қарай үш топқа бөлінеді:
· коментариилер (түсініктемелер),
· командалар,
· директивалар.
Ассемблер трансляторының бұл сөйлемдерді түсінуі үшін сөйлемдер белгілі бір ережелерге сәйкес құрылады.
Осылардың әрқайсысын жеке – жеке қарастырамыз.
3.2.1 Түсініктемелер (Комментариилер)
Сөйлемдер-түсініктемелер программаның мағына-сына әсер етпейді, трансляциялану кезеңінде олар ескерілмейді. Олар программада түсініктемелер жазу үшін қолданылады.
Түсініктемелердің алдына «үтір нүкте» (;) қойылады. Түсініктемелерде кез келген символды және орыс, казақ әріптерін қолдануға болады. Мысалы, келесі программада 1-ші және 4-ші жолдар түсініктемелер:
;бұл түсініктеме
ADD AX, 0
MOV BX, 2
;соңы
Сөйлемдер-түсініктемелер бір ғана команда үшін емес, түсініктемелердің соңында келтірілетін командалар тобын түсініктемелеу үшін де қолданылады. Бос жолдарды әдетте программаны бірнеше бөліктерге бөлу үшін пайдалауға болады.
Ассемблер тілінде көп жолды түсініктемелер де қолданылады. Ол COMMENT жолынан басталады:
COMMENT < маркер > < мәтін >
(СOMMENT – АТ директиваларының бір). Маркер ретінде COMMENT сөзінен кейінгі, пробелдан өзгеше, алғашқы символ алынады. Бұл символ түсініктемелердің соңында да қойылады. Мысалы:
COMMENT * осының бәрі түсініктеме болып саналады *
Командалар
Сөйлемдер–командалар машиналық команданың символдық түрде жазылуы. Жалпы жазылу синтаксисі:
[<белгі>]<мнемокод>[<операндалар>][;<түсіні-ктеме>]
Мысалы:
LAB: ADD SI,2 ;индексті өзгерту
NEG A
СBW
Белгі – символдық атау. Егер белгі бар болса, онда одан кейін міндетті түрде қос нүкте қойылады. Белгінің мәні осы белгі қойылған команданың бірінші байтының адресін білдіреді. Белгі программаның басқа жерінен командаға өту үшін қажет.
Ассемблерде жолда тек белгі ғана қойюға (қос нүктемен) болады. Бұндай белгі, программаның келесі командасын белгілейді деп есептеледі. Бұл екі жағдайда пайдалы: команданы екі немесе одан да көп белгімен белгілеу қажет болғанда және белгі өте ұзын болғанда команданың қалған бөлігі оңға қарай көп жылжып кетпеу үшін.
Мысалы:
INITIALIZATION:
LAB: ADD BX,AX
Мнемокод (мнемоникалық код) команданың міндетті бөлігі. Бұл команда орындайтын амалды символдық түрінде көрсететін қызметші сөз. Ассемблерде амалдың цифрлық коды қолданылмайды, амалдар тек есте тез сақталатын өзінің символдық атауларымен көрсетіледі («мнемоникалық» деген сөз «жеңіл сақталатын» мағынасын білдіреді ).
Операндтар- командалар мен директиваларда берілетін амалдарды орындауға қатысатын объектілер. Команда операндтар бар болған жағдайда, олар пробелдермен ажыратылады. Әдетте операндтар өрнек түрінде жазылады. Қарапайым жағдайда: сандар, айнымалылар. Ассемблер командасының машина командасынан айырмашылығы ұяшықтардың адрестері көрсетілмейеді, және қандай-да бір айнымалыларға (ұяшыққа) қатынау үшін оған атау беріліп, командада сол атау көрсетіледі.
Түсініктемелерді команданың соңында да келтіруге болады. Ол үшін үтір нүкте қойып, артынан кез келген түсініктеме ретінде қарастырылған мәтінді жазу керек. Бұндай түсініктемелердің сөйлем–түсініктемелерден өзгешелігі олар нақтылы берілген команданы түсініктеу үшін қолданылады.
Директивалар
Ассемблер тілінде машиналық командалардан басқа хабарламалар да көрсетіледі. Мысалы, программада қандай типті айнымалылар мен тұрақтылар қолданылады және оларға қандай атаулар берілетіні жайлы хабарлама. Ол хабарламаларды директивалар деп атайды.
Директиваның жазылу синтасисі:
[<обьектінің аты>]<директива> <операндалар> [;<түсініктеме>]
Мысал:
X DB 10,-56 OFFh ;X массив
Жалпы директиваның жазылуы команданың жазылу форматы тәрізді. Айырмашылығы: директива міндетті түрде онда сипатталатын тұрақтылар мен айнымалылардың атауларнан басталады. Директива аты мнемокод сияқты қызтемші сөз болып саналады. Және де, қандай қызметші сөздер қандай директиваны және мнемокодты анықтайтыны алдын – ала белгілі, шатастырып алу мүмкін есес. Директиваның қалған бөліктері (операндтар мен түсініктемелер) командадағы тәрізді жазылады.