- Ассемблер тілі - машиналық тідің аналогы болып саналады. Ассемблер тілінде жазылған программа МП-р құрылысының ерекшеліктерін: жадтың ұйымдастырылуын, операндтарды адрестеу тәсілдерін, регистрлерді қолдану ережелерін анықтап, көрсету қажет. Әр МП-ң өзінің Ассемблері болады.
Ассемблер тілінде жазылған программа
жад сегменттері деп аталатын жадблоктарының
тобынан тұрады. Программа осындай бір
немесе бірнеше блок-сегменттерден тұруы
мүмкін. Әр сегмент программа кодының
әр қатарында орналасқан сөйлемдерден
құрылады.
Ассемблер тілінің
сөйлемдері төрт түрлі болады:
Командалар: машиналық кодтардың аналогтары. Бұл командалар трансляциялау кезінде МП-ң сәйкес командаларына түрленеді;
Макрокомандалар: трансляциялау кезінде басқа сөйлемдерге алмасатын сөйлемдер;
Дерективалар: ассемблер трансляторына орындалатын әрекеттер туралы түсінік береді, яғни қызметші ақпараттар жиыны. Дерективалар машиналвқ кодтарға түрленбейді;
Комментарий: кез-келген белгілерден тұрады.
Ассемблер тілінің
екі артықшылығы бар:
Бұл тілдің көмегімен программаны МП
командалары деңгейінде жазуға болады
және сандық кодтардың барлығын еске сақтауды
талап етпейді. Программа командалары
жазылып болған соң, Ассемблер программасы
шақырылады да, ол бұл командаларды олардың
кодтарына айналдырады. Командалар жиыныннан
тұратын программа негізгі не алғашқы
программа деп аталады, ал негізгі программаның
сандық кодтары, яғни машиналық тілге
айналған түрі – объектік программа деп
аталады.
Ассемблердің атқаратын негізгі қызметі
– қолданушыға түсінікті негізгі прогрпмманы
МП түсінетін объекттік программаға айналдыру.
Ассемблердің кең тараған түрлері: IBM фирмасының
MASM(Macro Assembler) программасы және Borland фирмасының
TASM (Turbo Assembler) прграммасы.
2-3) IBM PC компьютерлеріндегі мәліметтердің
ішкі көрсетілімі. IBM PC негізгі блоктары.
IBM PC регистрлері.
Жадыүлгілері.
Қазіргі заман адамдарына электронды-есептеуіш
машинасыз өз өмірін елестету қиын. Дербес
компьютердің минимал комплектациясы
5-ші суретте көрсетілген. Суреттен көріп
тұрғандай, компьютерді бірнеше физикалық
құрылғылар құрайды. Олардың әрқайсысы
жүйелік деп аталатын блокқа жалғанған.
С
урет 5. Компьютер және шеткері
құрылғылар
8086 тектес
микпроцессорлардың құрылымдық сызбасын
қарастырайық (Сурет 6). Бұл МП-ды қарастыру
себебіміз қазіргі заманғы көптеген ЭЕМ-дер
құрылымының МП-ы негізі осы МП-ға негізделеді.
Сурет 6. 8086 микпроцессорының
құрылымдық сызбасы
Б
асқару құрылғысы бағдарлама
байттарын декодтап, операциялық құрылғы
мен шиналық интерфейс жұмысын басқарады.
МП-дың операциялық құрылғысы 16-разрядты
төрт жалпы белгілеу регистрлерінен (AX,BX,CX,DX),
төрт көрсеткіш регистрлерінен
(адрестік регистрлер SP,BP,SI, DI)
және арифметикалық-логикалық құрылғыдан
(АЛҚ) тұрады. Бұл регистрлерге толығырақ
кейін тоқталамыз.
Шиналық интерфейс пен оның
тораптары суретте қос сызықпен белгіленген,
олар МП мен жады немесе сыртқы құрылғылар
арасында ақпарат алмасуды орындайды.
Сыртқы құрылғылармен байланысты буфер
деп аталатын жоғары жүктемеге қабілеті
бар арнайы сызбалар арқылы жүзеге асырылады.
Бағдарламаның ағымды байты
конвейер ("бірінші кірген - соңғы шықты"
принципі немесе FIFO бойынша) болып орналасқан
бірбайттық регистрлерге командалар тізбегіне
жіберіледі. Конвейер кезектегі команданы
біруақытта орындауға және МП-дің өнімділігін
арттыра отырып, келесі команданы жүктеуге
мүмкіндік береді.
i8086/8088 МП-ы 20-разрядты адрестік
шинасына ие. Бұл дегеніміз - максимал
мүмкін адрес FFFFF-қа тең (2^20-1=1048575), яғни
1Мб. i286 тектес процессорлар үшін адрестік
шина 24 разрядты, яғни максимал мүмкін
адрес FFFFFF-қа (2^24-1=16777215) не 16Мб-қа тең. Осылайша,
IBM PC процессорлары үшін максимал мүмкін
адрестерді есептеп алуға болады.
Жады әдетте сызықтық бірөлшемді
байттар түрінде ұйымдастырылады, екі
көрші байтты сөз ретінде қарастыруға
болады. Жадының мегабайттық кеңістігі
шартты түрде көлемдері 64Kb тең 16 сегментке
бөлінеді. МП әр мезетте төрт сегментке
қатынай алады: бағдарлама сақталатын
кодтық сегмент, стек сегменті, бағдарламаның
мәліметтер сегменті және мәліметтердің
қосымша сегменті. Бұл регистрлер 16 биттік,
ал адрестік кеңістік 20 биттік болғандықтан,
МП 20-биттік сумматордағы бастапқы сегменттік
адресті төрт битке солға ығыстырады (16-ға
көбейткенмен эквивалент) және IP, SP, DI,
SI регистрлерінің біріне қосады. Алынған
сан физикалық адрес болып табылады. Мысалы,
жадыдан МП-дың бағдарлама кодының кезекті
байтын ала отырып, келесі формула бойынша
физикалық адресті анықтайды: физикалық
адрес = (IP) + (CS) * 16, мұндағы (IP) - ығысу, тиімді
немесе орындалушы адрес, (CS) - сегменттік
адрес, ал (CS) * 16 - бастапқы сегменттік адрес
деп аталады.
4) Ассемблер тілінде
программа құру келесі кезеңдерден тұрады:
1. есептің қойылымы және программасының
құрылымын анықтау;
2. текстік редактордың көмегімен компьютерге
программа командаларын енгізу;
3. Ассемблердің көмегімен программаны
трансляциялау;
4. загрузчик (жадқа жүктеуші программа)
көмегімен трансляцияланған программаны
(сандық кодтарды) өздігінен орындалатын
модульге айналдыру;
5. программаны орындау;
6. отладчиктің көмегімен программаны
жүргізу.
2-ші кезеңде қолданылатын редактор
ретінде WORD редакторінен басқа кез-келген
текстік редакторді қолдануға
болады. Негізгі программа операторлар
тізбегінен тұрады. Оператор ретінде
Ассемблер тілінің командалары
немесе псевдокомандалар қолданылады.
5) Ақпаратты
қайта жіберу және алмасу командалары.
Арифметикалық командалар. Стекпен жұмыс
жасау командалары.
Ассемблерде қайта жіберу командалар
саны өте көп, соның ішіндегі базалық командаларды
қарастырайық:
MOV қайта жіберу командасы. Дербес
компьютерде байтты немесе сөзді қайта
жіберетін машиналық командалар бар. Қайта
жіберетін шама командадан, регистрден
және жады ұяшығынан алынып регистрге
немесе жады ұяшығына жазылады. Ассемблер
тілінде бұл команданың жазылуы төмендегідей:
MOV Қабылдауыш, Көз
Команданың орындалу нәтижесінде
операнд1-ге операнд2-нің мәні қайта жіберіледі.
ор1:=ор2; Бұл команда жалаушаларды
өзгертпейді.
MOV командасындағы операндалар
комбинациялары:
- R8,R8 - Mem8,R8
- R16,R16 - Mem16,R16
- R8,Mem8 - Mem8,Im8
- R16,Mem16 - Mem16,Im16
- R8,Im8
- R16,Im16
XCHG мәліметтер алмасу командасы.
Машиналық программада қандайда бір екі
шаманың орындарын ауыстыруға тура келеді.
Оны MOV командаларымен де жүзеге асыруға
болады, бірақ ол үшін дербес компьютерде
арнайы команда қарастырылады. Орындарын
ауыстыру (eXCHanGe): XCHG ор1, ор2.
Бұл команда операнда мәндерінің
орындарын ауыстырады (олар не байт, не
сөз өлшемді болу керек).
Мысалы: MOV AX,62 ; AX = 62
MOV SI,135 ; SI = 135
XCHG AX,SI; ; AX = 135, SI = 62
XCHG командасындағы операндалар
комбинациялары:
- R8,R8 - R8,Mem8 - Mem8,R8
- R16,R16 - R16,Mem16 - Mem16,R16
LEA адресті жүктеу командасы.
Команда 16-разрядты регистрге 16-разрядты
ығысу шамасын жүктейді.
Синтаксисі: LEA Қабылдауыш, Көз
LEA командасы үшін операндалар
комбинациялары:
R16,Mem16
Қосу командалары екілік санау
жүйесінде жүзеге асатындығы белгілі.
Командаға берілген мәліметтердің таңбалы
не таңбасыздығын ескермейді. Егер қосу
нәтижесінде алынған нәтиже берілген
орынға сыймайтын болса, тасымал жалаушасы
CF=1 орнатылады. Бұдан басқа тағы да төрт
жалауша орнатылуы мүмкін: PF (қосу нәтижесінде
1 мәніне ие биттер саны жұп болса), SF (қосу
нәтижесінің үлкен (таңбалы) биті көшіріледі),
ZF (қосу нәтижесі 0-ге тең), OF (егер бірдей
таңбалы екі санды қосу кезінде қосу нәтижесі
белгіленген мәннен асып кетсе, мұндай
жағдайда қабылдауыш өз таңбасын өзгертеді).
ADD командасы. Синтаксисі: ADD
Қабылдауыш, Көз
Команданың жұмыс жасау логикасы:
<Қабылдауыш> = <Қабылдауыш> + <Көз>
Қолданылатын операндалар сәйкестігі
MOV командасындағыдай.
ADC командасы. Бұл команданың
ADD командасынан айырмашылығы қосу кезінде
CF тасымалдау битін қолданады. Сондықтан
бұл команданы 32-разрядты сандарды қосу
кезінде қолдануға болады.
6-7) Микросызбаларды
жобалауда логикалық элементтер маңызды
болып табылады.
AND, OR, XOR және TEST командалары
логикалық командалар болып табылады.
Бұл командалар биттерді орнату, түсіру
үшін және ASCII кодында арифметикалық операциялар
орындауда қолданылады. Регистрдегі немесе
жадыдағы 1 байт не 1 сөзді өңдеп, CF, OF, PF,
SF, ZF жалаушаларын орнатады.
Математикалық логиканың негізгі операцияларымен таныспыз.
AND: егер салыстырылушы екі битте
1-ге тең болса, онда нәтиже 1-ге тең , қалған
барлық жағдайларда 0-ге тең.
OR: егер кем дегенде биттердің
біреуі 1 болса, онда нәтиже 1-ге тең . Егер
салыстырылушы биттер 0-ге тең болса, онда
нәтиже 0-ге тең .
XOR: Егер биттердің бірі 0, енді
бірі 1 болса, онда нәтиже 1; ал егер де салыстырылушы
биттер бірдей, яғни екеуі де не 0 не 1 болса,
онда нәтиже 0.
TEST: AND командасы тәрізді жұмыс
жасайды, бірақ биттер өзгеріссіз қалады,
тек жалаушаларды ғана орнатады.
Логикалық командалар
екі операндтан тұрады.
Синтаксистері: Логикалық_команда
Операнд1, Операнд2. Нәтижесінде тек бірінші
операнд мәні ғана өзгереді.
Бір-бірімен өзара байланыссыз
келесі мысалды талдап көрейік: AL регистрінде
1101 0110, ал BH регистрінде 0101 1011:
1. AND AL,BH ; AL ===> 0101 0010
2. OR BH,AL ; BH ===> 1101 1111
3. XOR AL,AL ; AL ===> 0000 0000
4. AND AL,00 ; AL ===> 0000 0000
5. AND AL,0FH ; AL ===> 0000 0110
6. OR CL,CL ; SF және ZF жалаушаларын
орнатады
3-ші және 4-ші мысалдар регистрді
тазалау мысалдары. 5-ші мысалда AL регистрінің
сол жақ төрт биті нөл болды.
OR командасын келесі жағдайларда
қолдануға болады:
1. OR CX,CX ; CX -ті нөлге тексеру
JZ ... ; Көшу, егер нөл болса
2. OR CX,CX ;CX регистріндегінің
таңбасын тексеру
JS ... ; Көшу, егер теріс болса.
TEST командасы операнд мәндерін
өзгертпейді, тек жалаушаларды орнатады.
Мысалы:
1. TEST BL,11110000B ; BL-дің сол жақ битінің
кез келгені
JNZ ... ; 1-ге тең бе?
2. TEST AL,00000001B ; AL регистрінде
JNZ ... ; тақ мән бар ма?
3. TEST DX,OFFH ; DX регистрінде
JZ ... ; нөл ме?
Тағы бір логикалық команда
NOT командасы байт немесе сөздегі биттерге
кері мән орнатады: 0 - 1, 1 - 0. Егер AL регистрінде
1101 0110 мәні болса, NOT AL командасынан кейін
мәнді 0010 1001 мәніне өзгертеді. Жалаушаларды
өзгертпейді.
8) Сегментация памяти
Память трактуется как одномерный
массив байтов, каждый байт ассоциируется
с двоичным адресом (номером), который
называется физическим адресом.
Физический адрес – это 20-битовое
беззнаковое целое от 0h до FFFFFh (метка h
обозначает 16-ричную систему счисления),
которое позволяет описать адресное пространство
объемом 1 Мбайт.
Разрядность основного слова
МП равна 2 Байта = 16 бит, поэтому для вычисления
физического адреса используется выделение
из адресного пространства сегментов
по 64Кбайта (216), и в пределах
сегмента можно определять адрес с помощью
16-битового кода.
Сегменты в адресном пространстве
должны размещаться, только начиная с
байтов, адреса которых кратны 16, т.е. 4
младших бита – нулевые. Такие адреса
называются параграфами.
^ Логический адрес представляет собой пару двухбайтовых
беззнаковых целых чисел, разделенных
двоеточием:
начальный адрес сегмента (базовый),
смещение (эффективный адрес), указывает расстояние в байтах от начала сегмента до адресуемой ячейки памяти.
Например, могут быть указаны
регистры, хранящие соответствующие коды
CS : IP
При вычислении физического
адреса МП расширяет содержимое сегментного
регистра четырьмя нулевыми битами, затем
суммирует полученное число со смещением.
Получим следующую схему образования
физического адреса.
15 12 11 0
DS |
начальный адрес сегмента |
0 0 0 0 |
+ |
|
15 0
смещение внутри сегмента |
|
1
9 0
физический адрес байта |
Ячейка памяти – это неделимый в данной операции
набор последовательных битов.