Файл қосу

Мәліметтер сегменті




|ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БIЛIМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛIГI                    |
|СЕМЕЙ ҚАЛАСЫНЫҢ  ШӘКӘРIМ АТЫНДАҒЫ МЕМЛЕКЕТТIК УНИВЕРСИТЕТI                |
|3-деңгейлi СМЖ құжаты          |ПОӘК              |                        |
|                               |                  |ПОӘК                    |
|                               |                  |042-18-11.1.20.56/03-201|
|                               |                  |3                       |
|ПОӘК                           |№1 баспа          |                        |
|«Микроконтроллерлердің         |26.08.2013 ж.     |                        |
|бағдарламалық қамтамасыз       |                  |                        |
|етілуі» пәнінің оқу-әдістемелік|                  |                        |
|материалдары                   |                  |                        |








           «МИКРОКОНТРОЛЛЕРЛЕРДІҢ БАҒДАРЛАМАЛЫҚ ҚАМТАМАСЫЗ ЕТІЛУІ»

                       ПӘНІНІҢ ОҚУ -ӘДІСТЕМЕЛІК КЕШЕНІ



        5В070200 –«Автоматтандыру және басқару» мамандығына арналған






                         ОҚУ-ӘДІСТЕМЕЛІК МАТЕРИАЛДАР


































                                    Семей
                                    2013

                                   мазмұны





      1. Глоссарий

      2. Дәрістер
      3. Практикалық сабақтар
      4. Студенттің өздік жұмысы





      1  глоссарий



      ЭЕМ  архитектурасы  -  ЭЕМ-ң  құрылымдық,  схемотехникалық,  логикалық
ұйымдастырылуын көрсететiн абстрактiлi көрсетiлуi.


      Жадының  сызықтық  кеңiстiгi  –   адрес   номерлерi   тiзбектi   түрде
тағайындалатын жады ұяшықтарының жиынтығы.


      Басқару құрылғысы - команда кодтарын дешифрациялап,  қажеттi   басқару
сигналдарын таратады.


      Арифметикалық-логикалық құрылғы  мәлiметтердiң  қажеттi  арифметикалық
және логикалық түрлендiрулерiн жүргiзедi.


      Регистрлер  басқарушы  ақпаратты,  яғни  адрестер   мен   мәлiметтердi
сақтауға арналған.


      Байт ЭЕМ-ң негiзгi жадысының минималды адрестелетiн бiрлiгi.


      Сегменттер програмалар мен мәлiметтердi негiзгi  жадыда  орналастыруға
арналған арнайы облыстар.


      Стек   мәлiметтер мен адрестердi  уақытша  сақтауға  арналған  жадының
арнайы ұйымдастырылған облысы.


      Сөз – тiзбектi адресi бар екi байттан тұратын тiзбек.


      Қос сөз – тiзбектi адрестер бойынша орналасқан  төрт  байттан  (32бит)
тұратын тiзбек.


      Төрттiк сөз - тiзбектi адрестер бойынша орналасқан сегiз  байттан  (64
бит) тұратын тiзбек.




2  Дәрістер



      Тақырыбы    1    Ассемблер    туралы    алғашқы     мәліметтер.     РС
    архитектурасы.
      Мақсаты:     Пәннің мазмұнымен таныстыру.
      Дәріс сұрақтары:
      1. ЭЕМ-нің архитектуралық ерекшеліктері.
      2. Регистрлердің жинағы.
      3. Микропроцессордың жұмыс істеу режимдері.


      1. ЭЕМ-нің архитектурасы – бұл ЭЕМ абстракты көрінісі. Оның құрылымын,
схемотехникалық және қисын ұйымдастыруы.
       Суперскалярлық архитектура. Конвейер – бұл команда орындалуын бірнеше
кезеңге бөлетін арнайы құрылғы. i486 бесқадамдық конвейер бар:
      -     кэш-жадынан не ОЖ команданы таңдау;
        * команданы декодтау;
        * жадыда операнд адресі анықталатын адресті генерлеу;
        * арифметикалық-қисын құрылғылар (АҚҚ) көмегімен амалдарды орындау;
        * нәтижені жазу.
      Бір конвейері бар микропроцессорлар скалярлық деп аталады.  Pentium-да
екі конвейер, aл  Pentium  Pro-да  үш,  сондықтан  олар  суперскалярлық  деп
аталады.
      Кэштеу – «біріңші деңгейлі кэш-жадында» код  пен  мәліметтердің  сирек
сақталауына байланысты жадының жұмыс қабілеттілігін көбейтетін тәсіл.


      2. Микропроцессорда 32  регистр  бар,  оларды  келесі  түрде  жүктеуге
болады:
      -     16 қолданушылық регистр;
      -     16 жүйелік регистр.
      Қолданушылық регистрлер.
      Қолданушылық регистрлер аталуының себебі,  программист  оларды  өзінің
программасын құрастырғанда оларды қолдана  алады.  Бұл  регистрлерге  келесі
жатады:
      - сегіз 32-биттік регистр, олар мәліметтер мен адрестерді сақтау  үшін
қолданылады:   eax/ax/ah/al,   ebx/bx/bh/bl,   ecx/cx/ch/cl,   edx/dx/dh/dl,
ebp/bp, esi/si, edi/di, esp/sp;
      -  алты сегменттік регистрлер: cs, ds, ss, es, fs, gs;
      - қалып-күй және басқару регистрлер: eflags/flags флагтар  регистрлері
және eip/ip командаға нұсқағыш регистрлері.


      Жалпы тапсырма регистрлері.
      Осы топтың барлық регистрлері өзінің «кіші» бөліктеріне қатынай алады.

eax/ax/ah/al - аккумулятор. Аралық мәліметтерді сақтау үшін қолданылады.
ebx/bx/bh/bl –  базалық  регистр.  Жадыда  бір  объектінің  базалық  адресін
сақтау үшін қолданылады.
ecx/cx/ch/cl  -  регистр  -  санауыш.  Қайталанатын  әрекеттерді  орындайтын
командаларда қолданылады.
edx/dx/dh/dl – мәліметтер регистрі. Аралық мәліметтерді қолдану үшін.
      Келесі регистрлер тізбекті амалдарды орындау үшін қолданылады:
esi/si  –  түптек  индексі,  тізбек-түптекте   элементтің   ағымды   адресін
сақтайды;
edi/di – қабылдауыш индексі, тізбек-қабылдауышта элементтің  ағымды  адресін
сақтайды.
            Стекпен жұмыс істеу үшін арнайы регистрлер қолданылады:
esp/sp  –  стекке  нұсқағыш  регистрі,  стектің  ағымдағы  сегментінде  стек
биіктігіне нұсқағыш бар;
ebp/bp – стек кадр базасына нұсқағыш регистрі.


      Сегменттік регистрлер.
      Микропроцессор аппаратты түрде сегмент деп аталатын үш  бөлік  ретінде
программаның құрылымдық ұйымдастырылуын  қамтамасыз  етеді.  Мұндай  жадының
ұйымдастырылуы сегменттік деп аталады. Сегменттерге көрсету үшін  сегменттік
регистрлер қолданылады.
      Сегменттердің түрлері:
Код сегменті. Программа командалары бар; cs – код сегменттік регистрі.
Мәліметтер сегменті. Программа өңдейтін мәліметтер бар; ds  –  мәліметтердің
сегменттік регистрі.
Стек сегменті. ss – стектің сегменттік регистрі.
Мәліметтердің қосымша сегменті.


      Қалып-күй және басқару регистрлері.
      Бұл регистрлерге келесі жатады:
eflags/flags флагтар регистрі;
eip/ip командаға нұсқағыш регистрі.
      eflags/flags  –  флагтар   регистрі.   Жеке   биттерде   функционалдық
тапсырмасы бар.
      Флагтарды үш топқа бөлуге болады:
Сегіз қалып-күй флагтары (арифметикалық не қисын командаларының  нәтижелерін
бейнелейді);
df – басқару флагы. Флагтың мәні элемент бойынша бағытын анықтайды;
Енгізу-шығаруды басқаратын бес жүйелік флагтар;


      3. Әр микропроцессордың  басты  сипаттамасы  оның  разрядтылығы  болып
келеді.  МП  8086  оналты  разрядты  ішкі  архитектурасы  бар.  Процессордың
ішіндегі барлық регистрлердің ұзындығы 16 бит.
      Қорғалған режимде сегменттер мен оның ішіндегі  ығысулар  қолданылады.
Бірақ сегменттердің бастапқы адрестері сегменттік  регистрлердің  кестесінен
алынады.
      Қазіргі уақытта  қолданылатын  MS-DOS  версиясы  нақты  режимде  жұмыс
істейді. Сонымен қатар, виртуалды жадыны басқаруға мүмкіндік бермейді.


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 ЭЕМ-нің архитектурасы дегеніміз не?
      2 Ассемблер тілінің қандай мүмкіндіктерін ата аласыз?
      3 Микропроцессорда неше регистр бар?
      4 Қорғалған режимде қандай элементтер қолданылады?




      Тақырыбы 2 Жадыны ұйымдастыру. Ассемблерде қарапайым
                              программаны жасау.
      Мақсаты:      Жадыны ұйымдастыру принциптерімен таныстыру.
      Дәріс сұрақтары:
      1. Жадыны ұйымдастыру:
a) адрестік кеңістікті үлестіру;
b) жадының сегменттелген моделі;
c) нақты режимдегі физикалық адрестің қалыптастыруы.
      2. Ассемблерде қарапайым программаны жасау.


      1. Микропроцессор аппаратты түрде оперативті жадыны қолданудың бірнеше
моделдерімен қамтиды:
 - сегменттелген модель. Бұл моделде программа үшін жады бірнеше  аймақтарға
   (сегменттерге)  бөлінеді.  Ал  программаның  өзі  тек  осы   сегменттерде
   орналасқан мәліметтерге ғана қатынай алады.
 - беттік модель. 4 Кбайт өлшемдес блоктар жинағы ретінде қарастырылады.
Осы  моделдердің  жүзеге   асыруы   микропроцессор   жұмысының   режимдеріне
байланысты:
 - нақты адрестер режимі (нақты режим). Бұл режимде i8086 жұмыс жасады.
 -  қорғалған  режим.  Intel  микропроцессор   (і80286   бастап)   моделінде
   кірістірілген барлық архитектуралық жобаларын жүзеге асырайды.
 - 8086 виртуалды режимі. і8086 үшін жасалған программаларымен  жұмыс  істеу
   мүмкіндігін туғызады.


      Адрестік кеңістікті үлестіру.
      Адрестік кеңістіктің 640 Кбайты  (00000h   9FFFFh  дейін  адрестермен)
негізгі оперативті жадыға беріледі. Оперативті  жадының  бастапқы  килобайты
үзілімдер векторымен толтырылған (4 байт бойынша 256  векторлар).  Үзілімдер
векторының соңынан BIOS мәліметтер аймағы орналасқан  (00400h  004FFh  дейін
адрестермен). BIOS мәліметтер аймағы компьютердің бастапқы  жүктеу  процессі
кезінде ақпаратпен толтырылады.
      Жад аймағы (500h адресімен)  DOS  жүйелік  мәліметтермен  толтырылған.
Осының соңында  IO.SYS және  MSDOS.SYS  файлдарынан  жүктелетін  операциялық
жүйе орналасқан. Әдетінше, жүйе бірнеше ондық Кбайтты алады.
      Егер   CONFIG.SYS   файлына    DEVICE=...   директивалары    (ADM.SYS,
SMARTDRV.SYS,  ЕММ386.ЕХЕ,  ANSI.SYS  және  т.б.  драйверлердің   жүктемесі)
қосылса, онда олар жүйеден кейін жүктеледі. Драйверлерден төмен  COMMAND.COM
командалық процессордың резидентті бөлігі орналасқан. 3 Кбайтты алады.
      Айтылып кеткен операциялық жүйенің компонеттері әдетінше  60-90  Кбайт
алады. 640 Кбайт шекарасына дейінгі қалған барлық жады  кез  келген  жүйелік
немесе қолданбалы программалардың жүктемесі үшін бос болып келеді.
      Адрестік кеңістіктің қалған 384 Кбайты (жоғарғы жады)  тұрақты  сақтау
құрылғылары үшін  арналған. Адрестік кеңістіктің соңында (F0000h  –  FFFFFh)
BIOS негізгі ТСҚ (ПЗУ) орналасқан. Жоғарғы жады адрестік кеңістіктің  бөлігі
бейнебуферді адрестеу үшін беріледі.
      PC/AT компьютерлер құрамына кеңейтілген жады  кіреді  және  максималды
көлемі процессордың адрестік шина еніне байланысты  және  80286  процессорын
пайдаланғанда 15 Мбайтқа дейін жету мүмкін. Ал, 80386/486 процесорлары  үшін
- 4 Гбайт. Бұл жады 100000һ адресінен басталады. Нақты  қарағанда,  машинада
кеңейтілген жадының толық көлемі орнатылмайды, тек қана 2-3 Мбайт.


      Кеңейтілген жадының (l00000h-тан 10FFEFh-қа дейін) біріңші  64  Кбайты
үлкен жадының аймағы деп аталады (High  Memory  Area,  НМА).  Үнсіз  келісім
бойынша  ЕММ386.ЕХЕ  драйвері  кеңейтілген  жадының   128   Кбайтын   UMB-ға
алмастырып, C000... CFFF адрестері бойынша орналастырады.


      Жадының сегменттелген моделі.
      Сегменттелу – бұл бірнеше тәуелсіз адрестік  кеңістіктердің  бір  есеп
шекарасында ғана емес жалпы жүйеде бар болуымен қамтамасыз  ететін  адрестеу
механизмі. Сегменттелу механизмінде мынадай сегмент  түсінігі  бар.  Сегмент
тәуелсіз және аппаратты деңгейде жады блогымен қамтылған.
      Сегменттің  ішінде  программа  сегмент  басына   қатысты   адрестеріне
қатынайды. Яғни 0-мен басталып сегмент  өлшеміне  тең  адресімен  аяқталады.
Микропроцессор  мәліметтерге  қатынаған  кезде  қолданылатын  қатысты  адрес
эффективті деп аталады.


      Нақты режимдегі физикалық адрестің қалыптастыруы.
      Физикалық жадының адрестеу механизмінде келесі сипатамалары бар:
      – 0-ден 1 Мбайтқа дейін диапазонында физикалық адрес өзгертіледі;
      – сегменттің максималды өлшемі 64 Кбайт;
      Нақты бір физикалық адреске қатынау үшін ОЖ сегменттің басталу  адресі
мен сегмент ішіндегі ығыстыруды анықтау керек. Сегменттен құрылған адрес 16-
биттік мән ретінде  көрсетіледі.  Максималды  мәні  216  –1  сәйкес  келеді.
Сегмент басталуының адресі  0  -  64  Кбайт  диапазонында  орналасуы  керек.
Сегменттік регистрінде физикалық адрестің үлкен 16 биті бар.


      2. Жүйелік программаларды жазған кезде  әр  байт  саналады,  сондықтан
программалау  тілі  ретінде  ассемблерді  алу   ыңғайлы.   Ассемблер   тілін
қолданғанда  біз  жүйелік  және  архитектуралық  жағдайларын   қарастырамыз.
Мынадай есепті талдаймыз:  бір  регистрдің  мазмұнына  визулизация  жасаймыз
немесе оған мәнді енгіземіз.
      Ең алдымен алгоритмін  құрастырамыз.  Клавиатурадан  ақпаратты  енгізу
және оны экранға шығару символдық түрде  жүзеге  асырылады.  Бұл  ақпараттың
кодтауы ASCII кестесіне сәйкес  келеді.  Егер  сандармен  жұмыс  жүргізілсе,
онда  символдық  ақпаратты  машиналық  командаларымен  қамтамасыз   етілетін
форматқа түрлендіру қажет. Осындай түрлендіруден  кейін  қажет  есептеулерді
жүргізіп, нәтижені  қайтадан  символдық  түрге  ауыстыру  керек.  Содан  соң
ақпаратты мониторға шығару керек.
   1. 0...9 оналтылық цифрлері үшін ASCII код сәйкесінше  екілік  көріністен
      айырмашылығы бар.   Сондықтан ASCII кодын түрлендіру үшін екі жол бар:
a) екілік алу амалын орындау: (ASCII код)h – 30h
b) ASCII кодында 16-лық цифрімен байттың үлкен тетрадасын нөлге келтіру.
   2. Түрлендіру алгоритмі 16-лық цифрлердің  жолдық  және  қолмен  жазылған
      әріптік символдары айыру қажет. Және  ASCII кодының мәнін  37һ  немесе
      67һ шамаларына дұрыстау керек.


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 2009.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 2005.


      Бақылау сұрақтары:
      1 Микропроцессор аппаратты түрде оперативті жадыны қолданудың неше
         моделдерімен қамтиды?
      2 Адрестік кеңістік дегеніміз не?
      3 Физикалық жадының адрестеу механизмінде қандай сипаттамалары бар?




      Тақырыбы 3 Ассемблерде программа құру.
      Мақсаты:      Ассемблерде программа құру принциптерімен таныстыру.
      Дәріс сұрақтары:
      1. Трансляция, құрастыру, TurboDebugger жөндеуіші
      2. .ЕХЕ және .СОМ түрдес программалар жады мен құрылымы.


      1. Төмеңгі деңгей тілдеріне Ассемблер тілі жатады. Өз атауын Ассемблер
жүйелі программаның атынан алды. Бұл программа ағымды программаларды  машина
командаларының кодтарына айналдырады.  «Ассемблер»  термині  assembler  (бір
бүтінге бөліктерді жинау) ағылшын сөзінен шыққан.
      Бастапқы программада немесе  бастапқы  модульде  операторлар  бөліктер
ретінде қызмет жасайды, ал құрастыру  нәтижесі  –  объект  модуль  ретіндегі
машина командалар тізбегі. Құрастыру  процессі  ассемблерлеу  немесе  аудару
(трансляция) деп аталады (Сурет 1 қараңыз).
   [pic]Сурет 1. Бастапқы модуль, Ассемблер және объект модуль арасындағы
                                   қатынас


      Программаның ағымды текстін  дайындауы  кез  келген  текстік  редактор
арқылы  жасалынады.   Мысалы,   Windows   жүйесінің   WordPad   не   Блокнот
программаларында ұйыдастыруға болады. Ағымды тексті бар  файлдың  кеңейтілуі
.ASM болуы керек. Келесі әрекет мынадай болады, программаның ағымды  текстін
машина командаларының кодына айналдыру.  Бұл  әрекет  Ассемблер  программасы
(TASM 5.0, фирмалық атаулары  -  Turbo  Assembler,  Turbo  Link  және  Turbo
Debugger)  арқылы  орындалады.  Трансляциядан  кейін  екі  файл  құрылады  –
трансляция листингі және OBJ кеңейтілуімен объекттік файлы.  Листинг  өзімен
қандай-да бір текстік редакторда ағымды программаны  оқуға  болатын  текстік
файлды көрсетеді. Транслятор  тапқан  қателер  туралы  ақпаратты  да  өзінде
сақтайды.
      Листинг элементтерінің трансляциясын байқайық (Сурет 2 қараңыз).
                                    [pic]
                  Сурет 2. Программаны аудару (трансляция)


      Берілген суреттегі программаны талқылайық. Аssume, segment, ends,  end
операторлары  бар  сөйлемдер  трансляциядан  өтпейді  және  жады   аймағында
көрсетілмейді. Олар тек трансляторға қызмет ақпаратын  (assume  –  команданы
аудару тәсілі, segment және end – сегменттер шегін,  end  –  ағымды  текстті
өңдеу әрекетін аяқтау) жіберу үшін қажет.


      2.  MS-DOS  басқарумен  орындалатын  программалар   .СОМ   және   .ЕХЕ
программалық  файлдарының   біреуіне   қатысты   болады.   Олардың   негізгі
айырмашылығы - .СОМ программалары бір сегменттен тұрады және  бұл  сегментте
программалық   кодтар,   мәліметтер   және   стек   орналасады.   Ал    .ЕХЕ
программаларында мәліметтер, стек  үшін  жеке  сегменттер  болады.  Сонымен,
.СОМ  типтес  программалардың  өлшемі   -   64   Кбайт,   ал   .ЕХЕ   типтес
программалардың   өлшемі   шектелмеген,   себебі,   оған    программа    мен
мәліметтердің кез келген сегменттер саны кіреді.
      .ЕХЕ программаның құрылымы мен жады
      title  .ЕХЕ типтес программа                 ЕS,DS--->
      text    segment ‘Code’
            assume  CS  :  text,  DS  :  data                         CS--->
                           (IP
      myproc proc
            mov AX, data
            mov DS, AX
                …                            ;      программаның      тексті

            myproc endp                               SS(
      text    ends
      data                                                           segment
                                    <-SP
            …                      ; мәліметтерді анықтау
      data    ends
      stck segment stack
        dw 128 dup(0)
      stck ends
      end myproc
      .COM программаның құрылымы мен жады
      title .COM типтес программа           CS,DS,ES,SS--->
      text    segment ‘Code’
                 assume      CS      :      text,      DS       :       text
                (IP
            org 100h
      myproc proc
      hello db 'Здравствуй мир!$'
      mov                              ah,                               09h

      lea dx, hello     ;программаның тексті
      int 21h
      mov ax, 4c00h
      int 21h
      myproc                                                            endp

      text ends
      end myproc


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 «Ассемблер» деген сөзі қанадай мағынаны береді?
      2 Ассемблер тілінде жазылған программаның кеңейтілуі қандай?
      3 *.СОМ және .ЕХЕ программалық файлдарының айырмашылығы неде?




      Тақырыбы 4 Ассемблер синтаксисі. Командалар форматы.
      Мақсаты:      Ассемблердің синтаксисімен таныстыру.
      Дәріс сұрақтары:
      1. Ассемлердің синтаксисі.
      2. Командалар форматы.
      3. Үзілімдерді өңдеу.


      1. Ассемблер тіліндегі программа бұл  жады  сегменттері  деп  аталатын
жады  блоктары.  Программа  бір  немесе  бірнеше  блоктардан  тұруы  мүмкін.
Ассемблер сөйлемдері төрт типтен тұрады:
    - командалар немесе ұсыныстар;
    - макрокомандалар;
    - директивалар;
    - комментариялар жолдары.


      2. Ассемблердің сөйлемдері  лексемалардан  тұрады.  Лексемалар  келесі
болып табылады:
    - идентификаторлар;
    - символдар тізбегі;
    - бүтін сандар.


      3. Әр машиналық  команда  екі  бөлімнен  тұрады.  Машиналық  командаға
келесі элементтер кіреді:
1. префикстер өрісі;
2. амал кодының өрісі;
3. операндалар өрісі.
      Сондықтан операндалардың тек келесі форматтары мүмкін:
    - регистр-регистр;
    - регистр-жады;
    - жады-регистр;
    - тікелей операнд-регистр;
    -  тікелей операнд-жады.
      3. Үзілімдерді өңдеу.
      Түптекке байланысты үзілімдер келесі түрде жүктеледі:
         – аппараттық, бұл үзілімдер  асинхронды,  яғни  кездейсоқ  уақытта
           шығады;
         – программалық, операциялық жүйенің кейбір әрекеттерін орындайды;
         – ерекшеліктер, программалық үзілімдердің түрлері.


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Ассемблер сөйлемдері қандай типтерден тұрады?
      2 Ассемблердің сөйлемдері недене тұрады?
      3 Үзілімдерді өңдеу амалы дегеніміз не?




      Тақырыбы 5 Ассемблер деректерінің қарапайым типтерін сипаттау.
      Мақсаты:      Ассемблер тілінде деректермен жұмыс жасау принциптерімен

                              таныстыру.
      Дәріс сұрақтары:
      1. Ассемблердің қарапайым мәліметтер типтерін сипаттау.
      2. Адрестеу режимдері.
      3. Сегменттелу директивалары.


      1. Негізгі мәліметтер типтері:
    - байт;
    - сөз;
    - екілік сөз;
    - төрттік сөз.


      2. Адрестеу режимі дегеніміз операнданы  табу  процедура.  Адрестеудің
келесі түрлерін анықтайды:
      Регистрлі. Операнд регистрде орналасады.
      Тікелей. Операнд командаға нұсқағыш болып келеді.
      Тура. Жады адресталады.
      Регистрлі жанама.    микропроцессордың   операциялық бөлім және


      3.  Пернетақта 3 негізгі пернелер типтерден тұрады:
           – символдық (А-дан Z-ке дейін), 0-9,%,$,# және т.б.
           –     функционалдық     пернелер     (HOME,     END,      RETURN,
             DEL,INS,PgUp,PgDown,F1-F12, басқару тілсызықтары).
           – Басқару пернелері: ALT, CTRL, SHIFT  (басқа  пернелермен  жұмыс
             орындалатын).
      Әр перненің жеке скэн-коды бар (1(Esc) –  83  (del))  немесе   (01h  –
53h).
      Осы скэн-кодтардың көмегімен программа кез  келген  перненің  басылуын
анықтайды.
      Мысалы: пернетақтадан енгізілген бір символға сұрату, AH регистріне 00
жүктейді және Int 16h арқылы BIOS-қа қатынас беріледі.
        Сондықтан Int 16h  командасы  орындалғаннан  кейін,  AL  регистрінің
мазмұнын тексеру қажет. Егер AL регистрінде 0 бар болса,  онда  функционалды
перне басылғаны анықталады. Ал егер 0 –  болмаса,  онда  символдық  перненің
коды алынады:
                Mov ah,00      ;   енгізу функциясы
                Int 16h          ;   bios  шақыру
                Cmp   al,00    ;   функционалды перне
                Jz   exit         ;   иә - шығу


          Скэн-кодтар:
      «*» басылуы, 24һ символының кодын AL регистріне орнатады.
      Мысал: «*» үшін скэн-кодты тексеру:
                 Cmp  al,24h        ;    «*» ?
                 Jne   exit1           ;   жоқ - шығу
                 Cmp   ah,09h      ;   қандай скэн-код
                 Je  exit2             ;


      Функционалды перне                                          Скэн-код
      Alt/A                             –                              Alt/Z
1E - 2C
      F1                                –                                F10
3B – 44
      HOME
47
      Жоғ.тілсызық                                                       48
                                                                        PgUP
 49
       Солға тілсызық                                                    4В
       Оңға тілсызық                                                      4D
                                                                         End
   4f
                                                                Төм.тілсызық
50
                                                                      PgDown
51
                                                                         Ins
    52
                                                                         Del
    53


      Мысал: Home (скэн-код 47) пернесін басқанда курсорды 0  жолға  және  0
бағанада орнату.
                Mov ah,00         ;   енгізу функциясы
                Int 16h             ;   bios  шақыру
                Cmp   al,00       ;   функционалды перне
                Jne   exit1         ;   Жоқ - шығу


                   Cmp  al,24h        ;    «*» ?
                 Jne   exit1           ;   жоқ - шығу
                 Cmp   ah,09h      ;   қандай скэн-код
                 Je  exit2             ;


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Ассемблер тілінде деректермен жұмыс жасау үшін қандай типтер
         қолданылады?
      2 Адрестеу режимі дегеніміз не?
      3 Регистрлі түрін сипатта.




      Тақырыбы 6 Деректермен алмасу командалары.
      Мақсаты:      Ассемблер тілінде деректермен алмасу командаларымен
                              таныстыру.
      Дәріс сұрақтары:
      1. Мәліметтерді жіберу командалары.
      2. Портқа енгізу-шығару командалары.
      3. Адрестермен жұмыс істеу командалары.
      4. Стекпен жұмыс істеу командалары.


      1. Бұл топқа келесі командалар жатады:
      mov <орнату операнды >,<операнд-түптек>
      xchg <операнд1>,<операнд2>
      mov – мәліметтерді жіберудің негізгі  командасы.  Ол  жіберудің  түрлі
әдістерін қолданады.
      Бұл команданы қолданудың ерекшеліктерін қарастырайық:
 * Mov командасы арқылы жадының бір аймағынан  екінші  аймаққа  көшу  мүмкін
   емес;
 * Тікелей жадыдан сегменттік регистрге жүктеу мүмкін емес;
 * Бір сегменттік регистрден екінші сегменттік  регистрге  мәліметті  жіберу
   мүмкін емес;
      Екі бағытты  мәліметтерді  жіберу  үшін  xchg  командасы  қолданылады.
Мысал.
      xchg   ax,bx
      xchg   ax,word ptr [si]


            Орталық процессорда келесі командалардың жинағы бар.
      Мәліметтерді жіберу
      MOV   PUSH  POP  XCHG  OUT  IN
      XLAT  LEA   LDS  LES   LAHF SAHF
      PUSHF   POPF
      Арифметикалық амалдар
      ADD   ADC   INC  SUB   SBB  DEC
      CMP   MUL   IMUL DIV   IDIV NEG
      AAA   DAA   AAS  DAS   AAM  AAD
      CBW   CWD
      Қисын амалдар
      NOT   SHL/SAL   SHR    SAR  ROL   ROR
      RCL   RCR   AND  TEST  OR   XOR
      Мәліметтердің блоктарын өңдеу
      REP   MOVS  CMPS SCAS  LODS STOS
      CMPB  CMPSW LODSB      LODSW      MOVSB      MOVSB
      MOVSW   REPE     REPNZ SCASB      SCASW      STOSB
      STOSW
      Басқаруды беру командалары
      CALL  JMP   RET
      Шартты өту командалары
      JA    JLE   JNL  JS
      JAE   JNA   JNLE JZ
      JB    JNAE  JNO  LOOP
      JBE   JNB   JNP  LOOPE
      JC    JNBE  JNS  LOOPNE
      JCXZ  JNC   JNZ  LOOPNZ
      JE    JNE   JO   LOOPZ
      JG    JNE   JP   JGE
      JL    JPE   JNGE JPO
      Үзілімдердің командалары
      INT   INTO  IRET
      Процессордың қалып-күйін басқару
      CLС   CMC   STС  CLD   STD  CLI
      STI   HLT   WAIT ESC   LOCK NOP


      2. Төмеңгі деңгей болып BIOS табылады.  Оның  көмегімен  және  порттар
арқылы құрылғылар басқарылады.
      Порт нөмірлері туралы мәлімет, олардың разрядтылығы, ақпаратты басқару
форматтары  құрылғының  сипаттамасында  беріледі.  Ол  үшін   микропроцессор
командалар жүйесінен екі команда ғана қолданылады:
      in  аккумулятор,   порт_нөмірі   —   порт_нөмірі   нөмірімен   порттан
аккумуляторға енгізу;
      out порт, аккумулятор — порт_нөмірі  нөмірімен  портқа  аккумулятордың
мазмұнын шығару.


      3. Ассмеблерде програманы құрастырғанда жадыда орналасқан  операндалар
адрестерімен жұмыс жүргізіледі. Бұл амалдарды қолдайтын келесі командалар:
      lea бекіту, түптек — ықтималды адресті жүктеу;
      lds бекіту, түптек  —  ds  мәліметтер  сегмент  регистріне  нұсқағышты
жүктеу;
      les  бекіту,  түптек  —  es  қосымша  мәліметтер  сегмент   регистріне
нұсқағышты жүктеу;
      lgs  бекіту,  түптек  —  gs  қосымша  мәліметтер  сегмент   регистріне
нұсқағышты жүктеу;
      lts  бекіту,  түптек  —  fs  қосымша  мәліметтер  сегмент   регистріне
нұсқағышты жүктеу;
      lss бекіту, түптек — ss стек сегмент регистріне нұсқағышты жүктеу;.
      Lea командасы mov командасына ұқсас, өйткені екеуі  де  жіберу  амалын
орындайды. Бірақ, lea командасы  мәліметтерді  емес,  ал  олардың  ықтималды
адрестерін жібереді.
      Мысал: Жолдарды көшіру.
      masm
      model   small
      .data
      str_l db 'Ассемблер — базовый язык компьютера'
      str_2   db     50 dup (' ')
      full_pnt       dd str_l
      .code
      start:
      lea    si,str_l
      lea    di,str_2
      les    bx,full_pnt
      ml:
      mov    al,[si]
      mov     [di],al
      inc    si
      inc    di
      end    start


      4. Бұл топ стекпен ықтималды және жеңіл жұмыс істеу  үшін  бағытталған
арнайы  командалардан  тұрады.  Стек  дегеніміз  программаның   мәліметтерін
уақытша сақтайтын жады аймағы. Егер программист өзінің  программасында  стек
сегментін  жазуды  ұмытса,  онда  tlink  компоновщигі  сәйкесінше  хабарлама
жібереді. Стекпен жұмыс істеу үшін үш регистр қолданылады:
ss — стек сегменттік регистрі;
sp/esp — стекке нұсқағыш регистрі;
bp/ebp — стек кадр базасына нұсқағыш регистрі.
      Стек өлшемі микропроцессор жұмыс режиміне байланысты және 64  Кбайтпен
шектеледі.
      Int 21h, 01һ функциясы. Символды енгізу (экранға шығарып).
      шақыру кезінде: АН=01h
      қайтару кезінде: AL=енгізілген мәліметтердің байты.
      Int 21h, 02һ функциясы. Символды шығару.
      шақыру кезінде: АН=02h
      AL= мәліметтердің байты.
      Int 21h, 06һ функциясы. Тікелей енгізу - шығару.
      шақыру кезінде: АН=06h
                                   DL=символдың   коды   (00h-FEh)   (енгізу
кезінде)
      DL = FFh (енгізу кезінде)
      қайтару кезінде: AL = символдың коды (енгізу кезінде); егер символ жоқ
болса, онда ZF = 1.
      Int 21h, 08һ функциясы. Символды енгізу (экранға шығармай).
      шақыру кезінде: АН = 08h
      қайтару кезінде: AL = енгізілген мәліметтердің байты.
      Int 21h, 09һ функциясы. Жолды  шығару.
      шақыру кезінде: АН=09h
      DS:DX = буфердің адресі.
      Int 21h, 0Аһ функциясы. Клавиатурадан буферленген енгізу.
      шақыру кезінде: АН=0Аh
                             DS:DX = буфердің адресі
      қайтару кезінде: мәліметтер буферге енгізілген. Буфердің форматы: байт
0 – жолдың болатын ұзындығы
                  байт 1 – енгізілген жолдың нақты ұзындығы
                  байт 2 және одан кейін – 0Dh аяқталатын жол.
      Int 21h, 0Сһ функциясы. Енгізу буферін тазарту және енгізу.
      шақыру кезінде: АН=0Сh
                             AL = енгізуге қажет функцияның нөмері (01,  07,
08, 0Аһ)
      DS:DX = буфердің адресі (егер Al = 0Ah)
      қайтару кезінде: енгізілген мәліметтердің байты (егер Al =  0Ah,  онда
мәліметтер буферде орналасады).


      Ассемблерде жазылған программаның мысалы:
      ; комментарий
      .model tiny   ; жадының түрі
      .stack 100h   ; 256 байт өлшемді стек сегменті
      .code
      start:
      ....
      ....
      ....
      outprog:
        mov ax,4c00h  ; программаны аяқтау
        int 21h             ; DOS үзілімі
      end start


      Уақыттың әр мезгілінде тек ss  регистр  адресі  бар  стекке  қатынауға
болады. Бұл стек ағымды деп аталады.  Енді  стекпен  жұмыс  істеудің  келесі
ерекшеліктерді қарастырайық:
            – LIFO (Last In First  Out  —  "соңғы  келді,  біріңші  кетті")
              принципіне байланысты стекте жазу және оқу жүзеге асырылады;
            – Стекке мәліметтер кіші адрестердің жағына қарай жазылады;
            –  esp/sp  және  ebp/bp  регистрлерін   қолданғанда   ассемблер
              автоматты түрде оның мәндерін ss сегменттік регистріне  қарай
              ығыстырады.
      Стекпен  жұмыс  істеу  үшін  ss,  esp/sp   және   ebp/bp   регистрлері
қолданылады.  Әр  регистрде  өзінің  функционалды  тапсырмасы  бар.   esp/sp
регистрі әрқашан стек биіктігіне көрсетеді.
      Стекпен жұмыс істеуді арнайы оқу және жазу командалары ұйымдастырады.
      push түптек — түптек мәнін стек биіктігіне жазады. Жұмыстың  алгоритмі
келесі түрде болады:
(sp) = (sp) - 2; sp мәні 2-ге кішірейді;
түптектен алынған мәндер ss:sp көрсететін адресте жазылады.
      pop тапсырмасы — стек биіктігінен  алынған  мәндер  операнд  көрсеткен
орынға  жазылады.  рор  командасының  жұмыс  алгоритмі   push   командасының
алгоритміне керісінше:
стек биіктігінің мазмұны операнд көрсеткен орынға жазады;
(sp) = (sp) + 2; sp мәні көбейеді.
      Қортындылай келе келесі амалдарды белгілейік:
ішкі программаларды шақыру;
регистр мәндерін уақытша сақтау;
жергілікті айнымалыларды анықтау.


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Мәліметтерді жіберу командалары дегеніміз не?
      2 Портқа енгізу-шығару командаларына қандай командалар жатады?
      3 Стек дегінімз не?




      Тақырыбы 7 Басқаруды беру командалары.
      Мақсаты:      Ассемблер тілінде басқаруды беру командаларымен
                              таныстыру.
      Дәріс сұрақтары:
      1. Басқаруды беру командаларының классификациясы.
      2. Шартсыз өту командалары.
      3. Ассемблер тілінде процедура түсінігі.
      4. Шартты өту командалары.
      5. Циклдерді ұйымдастыру құралдары.


      1. Микропроцессор командаларын әрекет принципі бойынша үш топқа бөлуге
болады:
      1.    Шартсыз беру командалары:
     – шартсыз өту командасы;
     – процедураны шақыру және процедурадан шығу;
     –  программалық  үзілімдерді  шақыру  және  программалық  үзілімдерден
       шығу.
      2.    Шартты беру командалары:
     – салыстыру командаларының нәтижесі бойынша өту командалары;
     – анықталған флагтың қалып-күйі бойынша өту командалары;
     – есх/СХ регистрдің мазмұны бойынша өту командалары.
      3.    Циклді басқару командалары:
     – есх/сх санауышпен циклді ұйымдастыру командасы;
     – қосымша шарт бойынша.
      Белгі арқылы басқаруды беруге болады. Белгі дегеніміз жадының  ұяшығын
анықтайтын символдық атау. Әр белгіге үш атрибутты меншіктеуге болады:
        • белгі сипатталған, код сегментінің атауы;
        • ығысу – белгі сипатталған код сегментінің басы  байтта  өлшенетін
          арақашықтық;
        • белгі типі немесе арақашықтық атрибуты. Соңғы атрибут  екі  мәнді
          қабылдай алады:
              - Near – код сегмент шегінде белгіге өту мүмкін;
              - Far –  сегмент  аралық  басқару  нәтижесінде  белгіге  өтуге
                болады.
      Белгіні екі тәсіл арқылы анықтауға болады:
      Символдық_атауы: ассемблер_командасы
      Символдық_атауы label белгі_типі


      2. JMP белгі – команданың ағымдағы  сегментінде  не  оның  шекарасында
шартсыз өтулерді ұйымдастыру үшін қолданылады.  Нақты  бір  шарттар  кезінде
және  қорғалған  режимінде  jmp  командасы  есептердің   қосылуы   үшін   де
қолданылады.
      Жұмыс алгоритмі: jmp командасы  өзінің  операндасына  байланысты   eip
регистрінің біреуін мазмұнын не cs мен eip регистрлерінің:
 -  егер  jmp  командасында  операнд,  онда  ассемблер  машиналық  команданы
   қалыптастырады;
 - егер jmp командасында операнд символдық болса, онда  ассемблер  басқаруды
   қандай адреске жүктеу керектігін көрсетеді
      Модификатор келесі мәндерді қабылдай алады:
      Near ptr – код сегментінің ішіндегі белгіге тікелей өту;
      Far ptr – басқа код сегментінің ішіндегі белгіге тікелей өту;
      Word ptr - код сегментінің ішіндегі белгіге жанама өту;
      Dword ptr – басқа код сегментінің ішіндегі белгіге жанама өту.
      Шартсыз өту командалары 5 түрде қолданылуы мүмкін. Өту болуы мүмкін:
     – Тікелей қысқа (-128...+127 байттар шегінде);
     – Тікелей жақын (команданың ағымдағы сегмент шегінде);
     – Тікелей алыс (команданың басқа сегмент шегінде);
     – Жанама жақын;
     – Жанама алыс.


      3. Процедура (ішкі программа) – бір есептің декомпозициясының  негізгі
функционалды бірлігі.
      Процедура программада орналасуы мүмкін:
 – програманың басында;
 – программаның соңында;
 – аралық вариант – процедураның мәні басқа процедурада орналасады;
      Call [модификатор] процедура_атауы – процедураны шақыру.
      Ret [сан] – шақырылатын программаны қайтару.
      Ішкі программаны шақыру 4 түрде үйымдастырылады. Шақыру мүмкін:
            * тікелей жақын;
            * тікелей алыс;
            * жанама жақын;
      -     жанама алыс.


      4. Бұл командалар тексереді:
      – (үлкен-кіші) белгімен операндалар арасында қатынасты;
      – (жоғары-төмен) белгіссіз операндалар арасында қатынасты;
      – zf, sf, cf, of, pf арифметикалық флагтарды.
      Синтаксисі:
      Jcc өту_белгі
      сс – нақты шартты анықтайды.
      Шарттың түптектері:
арифметикалық флагтарды өзгертетін командалар;
cmp салыстыру командасы;
есх/сх регистрінің қалып-күйі.
      Cmp командасының синтаксисі:
      cmp операнд1, операнд2 –  екі  операнданы  салыстырады  және  нәтижеде
флагтарды орнатады.
      Мысал. Символдардың регистрлерін алмастыру.
      Model small
      .stack l00h
      .data
      n equ 10
      str db 'jurynvceir'
      .code
      start:
      mov ax,@data
      mov ds,ax
      xor ax,ax
      mov cx,n
      lea bx, str
      ml:
      mov al,[bx]
      cmpal,61h
      jb next
      cmp al,7ah
      ja next
      and al, 11011111 b
      mov [bx],al
      next:
      inc bx
      dec ex
      jnzml
      exit:
      mov ax,4c00h
      int 21h
      end start


      Шартты өту командасы және есх/сх регистрі.
      Jcxz белгі_өту – егер сх 0 емес, онда өту.
      Jecxz белгі_өту – егер есх 0 емес, онда өту.


      5. loop  белгі_өту  -  циклді  қайтару.  Циклдің  санауышын  автоматты
түрде кішірететін команда болып келеді. Команданың жұмысы:
есх/сх регистрінің декременті;
есх/сх-ті 0-мен салыстыру;
      Мысал. Циклді басқару командасын пайдалана  отырып,  нөлдік  байттарды
санау.
      Model small
      .stack l00h
      .data
      len equ 10
      mas db 1,0,3,7,2,8,0,3,8,0
      .code
      start:
      mov ax,@data
      mov ds,ax
      mov cx,len
      xor ax,ax
      xor si,si
      jcxz exit
      cl:    cmp mas [si],0
      jne ml
      inc al
      ml:   inc si
      loop cl
      exit:
      mov ax,4c00h
      int 21h
      end start


      Бір  циклдің   екінші   циклге   енгізілген   программаның   үзіндісін
қарастырайық:
      …
      mov сх, 100
      cl:
      push сх
      …
      mov cx,50
      с2:
      push сх
      …
      mov cx,25
      сЗ:
            …
      loop сЗ
      …
      pop сх
      loop c2
      …
      рор сх
      loop cl


      Мысал. Бірнеше секундқа тоқтау программалық үзінді.
      Mov cx, 10
      Outer: push cx
      Mov ex, 0
      Inner: loop inner
      Рор сх
      Loop outer




      IN аккумулятор, номер _ порта – аккумуляторға мәндерді енгізу.
      Жұмыс  алгоритмі:  байт,  сөз,  екілік  сөзді  енгізу-шығару  портынан
al/ax/eax регистрлеріне жібереді.
      OUT номер _ порта, аккумулятор – енгізу-шығару портына  аккумулятордың
мазмұнын шығару.
      Жұмыс алгоритмі: байт,  сөз,  екілік  сөзді  al/ax/eax  регистрлерінен
портқа жібереді.
      Скан-кодты оқу және қабылдау келесі түрде болады:
              in      al,60h
              push    ax
              in      al,61h
              or      al,80h
              out     61h,al
              pop     ax
              out     61h,al


      8-биттік мәндерді жазу үшін келесі программа қолданылады:
      my_proc proc    near
              push    ax
              push    bx
      ...
              pop     bx
              pop     ax
              ret
              endp


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Процедура дегеніміз не?
      2 Микропроцессор командаларын әрекет принципі бойынша неше топқа
         бөлуге болады?
      3 Шартсыз беру командаларына ата.
      4 Қандай шартты беру командалары бар?
      5 Циклді басқару командалары дегеніміз не?






      Тақырыбы 8 Тізбекті командалары.
      Мақсаты:      Ассемблер тілінде тізбекті командаларымен таныстыру.
      Дәріс сұрақтары:
      1. Микропроцессордың құраладарын сипаттау.
      2. Тізбектерді жіберу.
      3. Тізбектерді салыстыру амалдары.
      4. Тізбектерді сканерлеу.
      5. Аккумуляторға тізбек элементін жүктеу.
      6. Аккумулятордан тізбекке элементті жүктеу.


      1. Тізбекті командалар дегеніміз символдар жолын өңдейтін  командалар.
Символдар жолы –  байттар  тізбегі.  Тізбекті  командалары  келесі  өлшемдес
элементтердің тізбектерімен көптеген амалдар жүргізеді:
8 бит — байт;
16 бит — сөз;
32 бита — екілік сөз.
      Енді амалдар-примитивтерді сипаттайық:
      • тізбекті жіберу:
      movs қабылдағыш_адресі, түптек_адресі
      movsb
      movsw
      movsd


      • тізбектерді салыстыру
      cmps қабылдағыш_адресі, түптек_адресі
      cmpsb
      cmpsw
      cmpsd


      • тізбектерді сканерлеу
      scas қабылдағыш_адресі
      scasb
      scasw
      scads


      •      тізбектен элементті жүктеу:
      lods түптек_адресі
      lodsb
      lodsw
      lodsd


      •      тізбекте элементті сақтау:
      stos қабылдағыш_адресі
      stosb
      stosw
      stosd


      •      енгізу-шығару портынан тізбекке енгізу:
      ins қабылдағыш_адресі, порт_нөмірі
      insb
      insw
      insd


      •     енгізу-шығару портынан тізбекке шығару:
      outs түптек_адресі, порт_нөмірі
      outsb
      outsw
      outsd


      2. Жадының аймағынан екінші аймаққа элементтерді  көшіруді  орындайтын
командалар амалдар-примитивтер деп аталады.
      Мысал. movs командасы арқылы жолды жіберу.
      MASM
      MODEL   small
      STACK   256
      .data
      source db     Тестируемая строка', '$'
      dest   db      19DUP(' ')
      .code
      assume ds:@data,es:@data
      main:
      mov    ax,@data
      mov    ds,ax
      mov    es,ax
      cld
      lea    si,source
      lea    di,dest
      mov    cx,20
      rep    movs   dest, source
      lea    dx,dest
      mov    ah,09h
      int    21h
      exit:
      mov    ax,4c00h
      int    21h
      end    main




      3. Түптек - тізбек элементтерін  қабылдағыш  -  түптек  элементтерімен
салыстырады.
      Мысал. cmps командасы арқылы екі жолды салыстыру
      MODEL      small
      STACK      256
      .data
      match      db     0ah,0dh, 'Строки совпадают.','$'
      failed     db     0ah,0dh, 'Строки не совпадают','$'
      stringl     db     'O123456789',0ah,0dh,'$';исследуемые строки
      string2    db     '0123406789','$'
      .code
      ASSUME    ds:@data,es:@data
      main:
      mov    ax,@data
      mov    ds,ax
      mov     es,ax
      mov    ah,09h
      lea    dx,stringl
      int    21h
      lea    dx,string2
      int    21h
      cld
      lea    si,stringl
      lea    di,string2
      mov    ex, 10
      cycl:
      гере   cmps   string1,string2
      jcxz   equal
      jne    not_match
      equal:
      mov    ah,09h
      lea    dx, match
      int    21h
      jmp    exit
      notjnatch:
      mov    ah,09h
      lea    dx, failed
      int    21h
      dec    si
      dec    di
      inc   si
      inc   di
      jmp   cycl
exit:
      mov   ax,4c00h
      int   21h
end       main


      4.  Микропроцессордің  командалар  жүйесі  программистке   тізбектерді
сканерлеудің төрт командасын ұсынады.
      Мысал. sсas командасы арқылы жолда символды іздеу

              MASM

      MODEL      small
      STACK      256
      .data
      fnd db    0ah,0dh,'Символ найден! ','$'
      nochar     db     0ah,0dh,'Символ не найден.','$'
      string    db     'Поиск символа в этой строке.',0ah,0dh,'$'
      .code
      ASSUME    ds:@data,es:@data
      main:
      mov    ax,@data
      mov    ds,ax
      mov    es,ax
      mov    ah,09h
      lea    dx, string
      int    21h
      mov    al,'a'
      cld
      lea    di, string
      mov    cx,29


      repne     seas    string
      je     found
      failed:
      mov    ah,09h
      lea    dx,nochar
      int    21h
      jmp     exit
      found:
      mov    ah,09h
      lea    dx,fnd
      int    21h


      dec     di


      exit:
      mov    ax,4c00h
      int    21h
      end       main


                  5. Бұл амал-примитив тізбектен элементті  алады  және  оны
а1, ах не еах  регистр-аккумулятор орналастырады.


                  6. Бұл  амал-примитив  lods  командасына  керісінше.  TASM
программистке  тізбекке  регистр   -   аккумулятордан   элементті   тізбекке
сақтайды.


      Мысал.  stos  командасы  арқылы  клавиатурадан  енгізілетін   символды
ауыстырады.
              MASM
      MODEL   small
      STACK   256
      .data
      fnd    db     0ah,0dh,'Символ найден','$'
      nochar db 0ah,0dh,'Cимвoл не найден.','$'
      mesl    db     0ah,0dh,'Исходная строка:','$'
      string db     'Поиск символа в этой строке',0ah,0dh,'$'
      mes2  db  0ah,0dh,'Введите  символ,  на   который   следует   заменить
'найденный', 0ah,0dh,'$'
      mes3   db     13,10,'Новая строка: ','$'
      .code
      assume ds:@data,es:@data
      main:
      mov    ax,@data
      mov    ds,ax
      mov    es,ax
      mov    ah,09h
      lea    dx,mesl
      int    21h
      lea    dx,string
      int    21h
      mov    al,'a'
      cld
      lea    di,string
      mov    cx,29


      cycl:
      repne   seas string
      je     found
      failed:
      mov    ah,09h
      lea    dx, nochar
      int    21h
      jmp    exit
      found:
      mov    ah,09h
      lea    dx,fnd
      int    21h


      dec    di
      new_char:
      mov    ah,09h
      lea    dx,mes2
      int    21h
      mov    ah,01h
      int    21h
      stos   string


      mov    ah,09h
      lea    dx,mes3
      int    21h
      lea    dx,string
      int    21h
      inc    di
      jmp    cycl
      exit:
      mov    ax,4c00h
      int    21h
      end    main


      Int10h, 00һ функциясы.Бейнережимді орнату.
      шақыру кезінде: АН=00h
      қайтару кезінде: AL=бейнережим: 03һ-текстік, 10һ-графикалық
      Int 10h, 01һ функциясы. Курсордың орнату.
      шақыру кезінде: АН=01h
      СН биттер = курсордың бастапқы жолы
      СL биттер = курсордың соңғы жолы


      Int 10h, 02һ функциясы. Курсордың орнын орнату.
      шақыру кезінде: АН=02h
                                         ВН = бет
      DH= жол
                              DL= баған
      Int 10h, 02һ функциясы. Курсордың орнын алу.
      шақыру кезінде: АН=03h
                                         ВН = бет
             қайтару кезінде:
        СН= курсордың бастапқы жолы
                                СL= курсордың соңғы жолы
                                DH= жол
                                DL= баған


      CMP операнд1, операнд2  - екі операнданы салыстыру.
      Төменде  шартты  өту  командаларының  флагтары  мен   қисын   шарттару
берілген.
|Команда  |Тексерілетін флагтардың күйі  |Өту шарты                        |
|JA       |CF = 0 и ZF = 0               |егер жоғары                      |
|JAE      |CF = 0                        |Егер жоғары не тең               |
|JB       |CF = 1                        |Егер төмен                       |
|JBE      |CF = 1 или ZF = 1             |Егре төмен не тең                |
|JC       |CF = 1                        |Егер өту                         |
|JE       |ZF = 1                        |Егер тең                         |
|JZ       |ZF = 1                        |Егер 0                           |
|JG       |ZF = 0 и SF = OF              |Егер үлкен                       |
|JGE      |SF = OF                       |Егер үлкен не тең                |
|JL       |SF <> OF                      |Егер кіші                        |
|JLE      |ZF=1 или SF <> OF             |Егер кіші не тең                 |
|JNA      |CF = 1 и ZF = 1               |Егер биік емес                   |
|JZ       |ZF = 1                        |Егер нөл                         |




      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Тізбекті командалар дегеніміз не?
      2 Символдар жолы деп нені айтамыз?
      3 Тізбекті командалары қандай амалдарды жүргізеді?
      4 Тізбекті жіберу командасын ата.




      Тақырыбы 9 Логикалық командалар.
      Мақсаты:      Ассемблер тілінде логикалық командаларымен таныстыру. Әр

                                түрлі   есептерді    шығарғанда    логикалық
командаларды
                              қолдануды үйрету.
      Дәріс сұрақтары:
      1. Логикалық мәліметтер.
      2. Логикалық командалар.
      3. Шегу командалары.


      1.  Логикалық  дегеніміз  формальды  логика   негізінде   мәліметтерді
түрлендіруді айтамыз.
      Формальды логика ақиқат және жалған деген тұжырымдама негізінде  жұмыс
жасайды. Микропроцессор үшін ол сәйкесінше 1 және 0.
      Мәліметтерді  логикалық  түрде  өңдеудің  теориялық  базасы  формальды
логикаға  жатады.  Логиканың  бірнеше  жүйелері  бар.  Ең  танымалы   –   ол
сөйлемдерді есептеу. Сөйлем –  бұл  ақиқат  не  жалған  туралы  айтатын  кез
келген тұжырымдама.
      Логикалық  шылаулар  математикалық  логикада   күрделі   пайымдауларды
сипаттайтын  логикалық  амалдар  болып  табылады.  Математикалық  логикадағы
ЖӘНЕ, НЕМЕСЕ, ЕМЕС логикалық амалдары ақиқаттық кестесімен анықталады.


      |«ЖӘНЕ»       |Коньюнкция (көбейту)   |А және В      |
|«НЕМЕСЕ»     |Дизьюнкция(қосу)       |А немесе В    |
|«ЕМЕС»       |Теріске шығару         |А емес        |


      Логикалық көбейту
      Және шылауының  көмегімен  бір  құрамдасқа  екі  қарапайым  А  және  В
пайымдауларының бірігуі логикалық көбейту немесе коньюнкция деп аталады,  ол
амалдың нәтежесі – логикалық көбейтінді.
      ЖӘНЕ (коньюнкция) логикалық амалы үшін ақиқаттық кесте мынандай:


      |А            |В                  |А және В        |
|Иә           |Иә                 |Иә              |
|Иә           |Жоқ                |Жоқ             |
|Жоқ          |Иә                 |Жоқ             |
|Жоқ          |Жоқ                |Жоқ             |


      Мұндағы А және В – иә немесе жоқ мәнін қабылдай алатын екі пайым.
      Мысалы,  деректері  қарапайым  айтылымдар  болсын:  А  –   «Астана   –
Қазақстанның астанасы», В – «Астанада 300 мыңнан астам адам тұрады».
      Онда осы айтылғандардың логикалық көбейтіндісі,  немесе  коньюнкциясы,
құрамды пайымдау болады: «Астана Қазақстанның  астанасы  және  Астанада  300
мыңнан астам адам тұрады» пайымдаулардың ақиқат мәніне байланысты иә  немесе
жоқ  мәнін  қабылдағанда  «А  мен  В»  құрамды   пайымдауы   да   иә   мәнін
қабылдайтынны кестеден көреміз.
      Ақиқат кестесінен:
      Пікірдің екеуі де ақиқат болғанда, А және  В  коньюнкциясы  ақиқат;  А
немесе В пікірлерінің біреуі немесе екеуі  де  жалған  болғанда,  А  және  В
коньюнкциясы жалған болатындығын көреміз.
      Логикалық қосу
      Біріктіруші мағыналда  қолданылатын  НЕМЕСЕ  шылауының  көмегімен  бір
құрамдасқа  екі қарапайым А және В  айтылымдарының  бірігуі  логикалық  қосу
немесе дизьюнкция деп аталады, ал амалдың нәтежесі – логикалық қосынды.
      НЕМЕСЕ логикалық амалы үшін ақиқаттық кесте мынадай түрде болады:


      |А            |В                  |А және В      |
|Иә           |Иә                 |Иә            |
|Иә           |Жоқ                |Жоқ           |
|Жоқ          |Иә                 |Жоқ           |
|Жоқ          |Жоқ                |Жоқ           |


      Мысалы, «Күзде ағаштардың жапырақтары жасыл және сары» құрамды  пікірі
үш  жағдайда  иә  логикалық   мағынасын   қабылдайды:    «Күзде   ағаштардың
жапырақтары  жасыл»  не  Күзде  ағаштардың  жапырақтары  сары   »   не«Күзде
ағаштардың жапырақтары жасыл және  сары»  болғанда.  Бұл  амалдың  ақиқаттық
кестесінен, егер А да, В да иә мәніне ие болса; не тек қана А, не  тек  қана
В иә мәніне ие болса, онда
      «А  немесе  В»  айтылымы  иә  мәніне  ие  болатындығы  көрінеді.  Және
керісінше, егер А да, В              да жоқ мәніне болса,  онда   «А  немесе
В» айтылымы жоқ мәніне ие болады.
      Егер А немесе В пікірлерінің тек біреуі ғана ақиқат болса,  А  және  В
дизьюнкциясы ақиқат.
      А және В пікірлерінің екеуі де жалған болғанда, А және В  дизьюнкциясы
жалған.


      Логикалық теріске шығару
      Қарапайым А айтылымына ЕМЕС  шылауын  қосу  логикалық  теріске  шығару
амалы деп  аталады,  амалджы  орындағаннан  кейінгі  нәтеже  жаңа  айтылымды
береді.
      ЕМЕС (теріске шағару) логикалық амалы үшін ақиқаттық кесте мынадай:


      |А             |А емес        |
|Иә            |Жоқ           |
|Жоқ           |Иә            |


      Мұндағы А кейбір еркін айтылымдар.
      Мысалы, «Бүгін күн ыстық» айтылымы теріке шығру болады.Кей  жағайларда
барлық айтылымдарға «...жалған» сөзін қолдануға  болады.  Сонда  «Сен  жақсы
баға алдың» айтылымын «Сенің жақсы баға  алғаның  жалған»  айтылымы  теріске
шығару болады. Бұл амалдың ақиқаттық кестесінен, егер  бастапқы  А  айтылымы
жалған болса, онда А емес (А емес, ақиқат) теріске  шығаруы  жоқ  мәніне  ие
болады.


      2. Микропроцессор командалар жүйесінде логикалық  мәліметтермен  жұмыс
жасайтын командалар жинағы бар:
      and операнд_1, операнд_2 – логикалық көбейту амалы.
      Команда операнд_1  және  операнд_2  операндалар  биттерімен  И  (ЖӘНЕ)
амалын (конъюнкция) орындайды. Нәтижесі операнд_1 орнына жазылады.
      or операнд_1, операнд_2 — логикалық қосу амалы.
      хог операнд_1, операнд_2 — логикалық қосуды болдырмайтын амал.
      test операнд_1, операнд_2 — «тексеру» амалы.
      not операнд — логикалық «емес» амалы.


      3.  Бұл  топтың  командалары  операндалар  биттерімен  жұмыс   жасауды
қамтамасыз етеді. Барлық шегу командалары не солға, не  оңға  қарай  шегиді,
амалдар кодына байланысты.  Шегудің  барлық  командалары  бірдей  құрылымнан
тұрады:
      коп операнд, шегу_санауышы


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Формальды логика туралы айтыңыз.
      2 Логикалық командаларды атаңыз.
      3 Шегу командалары дегеніміз не?




      Тақырыбы 10 Арифметикалық командалар.
      Мақсаты:      Ассемблер тілінде арифметикалық командаларымен
          таныстыру. Әр түрлі есептерді шығарғанда арифметикалық
          командаларды қолдануды үйрету.
      Дәріс сұрақтары:
      1. Арифметикалық командалардың нысандары.
      2. Екілік сандармен арифметикалық амалдарды жүргізу.


      1. Бүтін екілік сан – бұл екілік санау жүйесінде кодталған сан.  Бүтін
екілік санның өлшемділігі 8,16 не 32 бит болуы мүмкін.
      Ондық сандар —  сандық  ақпаратты  көрсететін  арнайы  көрінісі.  Оның
негізінде санның әр ондық цифрін кодтау.
      Per_1 db 2,3,4,6,8,2    ; жинақталмаған BCD – саны 286432
      Per_2 dt 9875645  ; жинақталған BCD – саны 9875645


      2. Микропроцессор операндаларды қосады екілік сандарды қосу принципіне
байланысты. Микропроцессор командалар жүйесінде екілік қосудың үш  командасы
бар:
inc операнд — инкремент амалы, яғни операнд мәнін 1-ге көбейтеді;
add  операнд_1,  операнд_2  —  операнд_1  =  операнд_1  +  операнд_2  әрекет
принципіне байланысты қосу амалы орындалады;
adc операнд_1,операнд_2 — cf көшу флагын есепке алып қосу амалы.  Команданың
принципі: операнд_1 = операнд_1 + операнд_2 + с£_мәні;
      Мысал: Санадрдың саның қосу
      masm
      .model   small
      .stack   256
      .data
      a      db     254
      .code
      main:
      xor   ax,ax
      add       al,17
      add   al,a
      jnc  ml
      adc       ah,0
      ml:   ...
exit:
      end    main


      Таңбасыз екілік сандарды алу.
      Алу командаларына келесі жатады:
dec операнд —декремент амалы, яғни операнд мәнін 1-ге кішірейтеді;
sub      операнд_1, операнд_2      —  алу командасы;  оның  жұмыс  принципі:
операнд_1 = операнд_1 - операнд_2
sbb     операнд_1,  операнд_2     —   (cf  флагы)  зайыммен  алу  командасы:
операнд_1 = операнд_1 - операнд_2 – cf_мәні;


      Мысал: Сандарды алу
      masm
      model small
      .stack 256
      .data
      .code
      main:
      xor ax,ax
      mov al,5
      sub al,10
      jnc m1
      neg al
      ml:...
      exit:
      end main


      Таңбасыз сандарды көбейту.
      Таңбасыз сандарды көбейту үшін кеелсі команда қолданылады:
      mul көбейткіш_1.
Егер нәтиженің үлкен бөлігі нөлдік болса, онда cf = 0 және of = 0;
Егре бұл флагтар нөлдік болмаса,  онда  көбейтудің  нәтижесі  кіші  бөліктің
сыртында деп түсінуге болады.


      Таңбасыз сандарды бөлу
      Таңбасыз сандарды бөлу үшін div командасы қолданылады.


      Таңбамен сандарды бөлу
      Таңбамен сандарды бөлу үшін іdiv командасы қолданылады.


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Арифметикалық командалар дегеніміз не?
      2 Микропроцессор жүйесінде екілік қосудың неше командасы бар?


      Тақырыбы 11 Файлдармен, каталогтармен және дискілермен жұмыс.
      Мақсаты:      Ассемблер тілінде файлдармен, каталогтармен жұмысты
          таныстыру.
      Дәріс сұрақтары:
      1. MS DOS файлдық жүйесінің негізгі сипаттамалары.
      2. Дискілер мен файлдар жұмысын қамтамасыз ететін жүйелік құралдар.


      1. IBM PC типтес машиналарда магниттік дискіге қатынаудың екі  деңгейі
ұйымдастырылған. Төмеңгі деңгейде программалау кезінде  қолданушы  BIOS  INT
13h арқылы дискіге тікелей қатынай алады. Осы деңгейдің дәстүрлі  амалдарына
келесі жатады:
      - секторды оқу не жазу;
      - бас түтектің орыны;
      - жолды форматтау.
      Жоғары деңгей DOS INT 21h үзілімі арқылы ұйымдастырылады.  Программист
физикалық дискімен жұмыс жасамайды, а DOS файлдық жүйесімен.
      DOS-та  каталогтардың  ағаш  тәріздес  құрылымы  қолданылады.   Келесі
кестелерде каталогтар туралы ақпарат көрсетілген:


      Кесте 1 – каталогты жазу форматы
|Ығысу      |Байт    |Мазмұны                                           |
|           |саны    |                                                  |
|00h        |8       |ASCII кодында файл атауы                          |
|08h        |3       |ASCII кодында файл атауының кеңейтілуі            |
|0Bh        |1       |Файл атрибутының байты                            |
|0Ch        |10      |Резервте                                          |
|16h        |2       |Файлдың құрылуы және өзгеруі уақыты               |
|18h        |2       |Файлдың құрылуы және өзгеруі күні                 |
|1Ah        |2       |Дискіде файл басталатын кластер нөмірі            |
|1Ch        |4       |Файлдың нақты ұзындығы (байт)                     |


      Кесте 2 – файл атрибуттары
|Атрибут   |Қызметі                                                        |
|01h       |Тек оқу үшін файл. Файлды өзгерту не өшіруге тыйым салынады.   |
|02h       |Көрстелімейтін файл                                            |
|04h       |Жүйелік файл                                                   |
|08h       |Файл туралы жазба том меткасын көрсетеді.                      |
|10h       |Файл өзімен каталогты көрсетеді.                               |
|20h       |Файл құрылғаннан кейін архивтелмеген.                          |


      2. DOS деңгейінде  дискімен  жұмыс  жасағанда  біз  файлдарға  олардың
аттары арқылы қатынай аламыз.
      3еһ: Файлды жабу
      Файл жазылғаннан кейін, ВХ регистріне файлдық нөмер орнатылады, ал DOS
3еһ  функциясы  пайдалынылатын  файлды  жабады.  Бұл  амал   қалған   барлық
деректерді буферден дискіге жазып, тақырып пен FAT кестесін дұрыстайды.
      Mov ah, 3eh      ;файлды жазуға сұраныс
      Mov bx, handle1  ;файлдық нөмер
      Int 21h


      Дискілік файлды оқу
      3dh: файлды ашу
      Бул амал файлдың атын мен дискідегі орнын тексереді.  Ашу  кезінде  dx
регистрінде  –  қажетті  ASCIIZ  –  жолдың  адресі  болу  керек,  ал  AL   –
регистрінде қатынау коды:
      0 енгізу үшін файлды ашу
      1 шығару үшін үшін файлды ашу
      2 енгізу-шығару үшін файлды ашу
      Мысал:
      Mov ah, 3dh      ;файлды ашуға сұрату
      Mov al, 00             ;тек қана оқу
      Lea dx, pathnm1  ; ASCIIZ – жолы
      Int 21h
      Jc error4              ;қате бойынша шығу
      Mov handle2, ax  ;нөмерді сақтау


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Файлдармен жұмыс қалай ұйымдастырылады?
      2 DOS-та каталогтардың қандай құрылымы қолданылады?


      Тақырыбы 12 Клавиатура терминалынан информация енгізу.
      Мақсаты:      Ассемблер тілінде клавиатура терминалымен жұмысты
          таныстыру.
      Дәріс сұрақтары:
      1. Клавиатура үзілімдерін өңдейтін жүйелік процедуралар.
      2. Клавиатурадан деректі енгізу үшін қолданылатын жүйелік құралдар.


      1.  Компьютермен  жұмыс  жасағасын   қолданушыға   клавиатура   арқылы
командалар мен  мәліметтерді  енгізу  керек.  Клавиатураның  жұмысын  арнайы
элетронды схема – клавиатура контроллері басқарады.
      Клавиатура 3 негізгі клавишалар типтерден тұрады:
      1) символдық (А-дан Z-қа дейін), 0-9, %, $, # және т.б.
      2) функционалдық клавишалар (HOME, END, RETURN, DEL, INS, PgUp,
           PgDown F1-F12)
      3) Басқару клавишалары: Alt, CTRL, SHIFT
      Оның қызметіне келесі жұмыстар кіреді: басылған клавишаны  тану,  оған
бекітілген кодты өзінің шығу регистріне (порт)  орналастыру  (әдетте,  60h).
Клавиша коды және порт скан-код деп аталады (реттік нөмері).
      Әр клавишаның жеке скан-коды бар (1(Esc)-83(del)) немесе (01h-53h).




      2.  Операциялық  жүйе  клавиатурамен  енгізудің  бірнеше  тәсілдерімен
қамтамасыз етеді:
      - DOS INT 21h  үзілімнің  3Fh  функциясы  арқылы  клавиатураға  файлға
сияқты қатынау;
      -      әр  түрлі  режимде  1..Сһ  аралығында  DOS  INT  21h  үзілімнің
функцияларының көмегімен символ бойынша клавиатураға енгізу.
      Особая ситуация возникает, если попытаться ввести больше символов, чем
затребовано функцией 3Fh. В процессе выполнения этой  функции  все  вводимые
символы тут же извлекаются из  кольцевого  буфера  ввода  и  пересылаются  в
буфер DOS. Обнаружив во входном потоке коды клавиши , DOS  пересылает
из этого буфера в буфер пользователя в программе точно  затребованное  число
символов.  Остальные  символы  остаются  в  буфере  DOS,  готовые  к  вводу.
Фактически, если не принять специальных мер к очистке буфера,  они  поступят
в программу при очередном запросе 3Fh,  даже  если  оператор  еще  не  начал
вводить очередную порцию данных. Очевидно, что в этом случае будет  нарушена
синхронизация хода выполнения программы с работой оператора.
      Клавиатурадан  енгізу  үшін  INT   21h   үзілімнің   жеті   функциясын
пайдалануға болады:
      0lh – эхомен символды енгізу;
      06h – консольдің көмегімен тікелей енгізу-шығару;
      07h – эхосыз және Ctrl/C өңдеусіз символды енгізу;
      08h – эхосыз және Ctrl/C өңдеуімен символды енгізу;
      0Ah – эхомен жолды буферлеп енгізу;
      0Bh – стандартты құрылғы енгізудің қалыпын тексеру;
      0Сh – ішкі буферді тастап енгізу.


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Клавиатураның контроллері дегеніміз не? Оның жұмысын айтыңыз.
      2 Скан-кодтың қалыптастыруын айтыңыз.
      3 Клавиатурадан мәліметті енгізудің неше тәсілі бар?
      4 Қандай үзілімдер клавиатурамен жұмыс жасайды?




      Тақырыбы 13 Терминал экранына текстік информацияны енгізу.
      Мақсаты:      Ассемблер тілінде терминал экранына текстік информацияны
                              енгізу жұмысымен таныстыру.
      Дәріс сұрақтары:
      1. IBM PC түрдес компьютерлер бейнежүйесі. DOS құралдарымен
          экранға шығару.
      2. ANSI – драйвері арқылы экранды басқару. Текстік бейнебуфердің
          логикалық ұйымдастырылуы.
      3. Шрифтерді басқаратын жүйелік құралдар.


      1. Компьютердің бейнежүйесінде экран терминалына шығаратын  текстік не
графикалық бейнелерді алуға мүмкіндік  беретін  аппараттық  не  программалық
құралдар бар.
      Аппараттық құралдарға бейнетерминал (монитор) жатады.  Сонымен  қатар,
бейнеконтроллер,  не  бейнеадаптер.  Адаптер  екі   программамен   қосылатын
текстік және графикалық режимдермен қамтамасыз етеді.
      Графикалық  режимде  16-түрлі  түсті  640х350  нүктелер  мүмкіндігімен
экранға бейне шығады.
      Тексттік режимде бейне негізінен бір жолда  80  символдар  тұратын  25
жолдардан тұрады.


      2. DOS экранға текстік ақпаратты  шығару  үшін  келесі  мүмкіндіктерді
береді:
 40һ функциясымен DOS Int 21h үзілімі арқылы файлға сияқты экранға  қатынау;

 l...Ch шегінде DOS функциясын қолдану  (Int 21h үзілімі).
      Экранға текстік ақпаратты шығару үшін Int 21h үзілімінің үш  функциясы
қолданылады:
      02h – символды шығару;
      06h – тура енгізу-шығару;
      09h – жолды шығару.




      3. Int 10h үзілімі арқылы BIOS драйверімен іске асырылатын  құралдарды
қарастырайық. Драйвердің функциялары:
       02h – курсор позициясын орнату;
       03h – курсор позициясын алу;
       05h – бейнепарақты орнату;
       06h – терезені жоғарыға көтеру;
       07h – терезені төмеңғе түсіру;
       08h – курсор позициясында символ мен атрибутты оқу;
       09h – курсор позициясында символ мен атрибутты шығару;
       0A  - курсор позициясында символды шығару;
       0Eh - телетайп режимінде символды шығару;
       13h - телетайп режимінде жолды шығару.


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Компьютердің бейнежүйесінде экран терминалына шығаратын қандай
         программалық құралдар бар?
      2 BIOS драйвердің функцияларын атаңыз.
      3 DOS экранға текстік  ақпаратты  шығару  үшін  қандай  мүмкіндіктерді
береді?




      Тақырыбы 14 Терминал экранына графиктік информацияны енгізу.
      Мақсаты:      Ассемблер тілінде терминал экранына графиктік
                              информацияны енгізу жұмысымен таныстыру.
      Дәріс сұрақтары:
      1. BIOS бейнедрайверінің графиктік мүмкіндіктері.
      2. Жадыны үлестіретін жүйелік құралдар. Туынды процесстерді
          ұйымдастыру.


      1. MS-DOS жүйе орындалмылы екі программа файлы типін  қабылдайды:  COM
және EXE. COM программалық типі бірсегментті болады. EXE  программалық  типі
қатты шегі жоқ. LINK  компоновщигі,  объекті  модуль  программасын  өндейді,
трансляциядан шығу текстін  қортындысынан  алады,  EXE  немесе  COM  кеңейту
файлын ұйымдастырады.
      Қандайда программа арнайы типті  жүйелік  таблица  құрайды  –  префикс
программа сегменті (PSP), 256 байттық  өлшемі  бар.  .COM  типтес  программа
орынын  PSP   программист  резервілейді,  ORG  100h;  директивасынан  бастап
программалауды PSP қосады,  ондай  жағдайда,  жалғыз  программа  сегментінің
құрамы.  Exec   функциясының   программасын   жүктеу   жады   PSP   аймағына
толтырылады. .EXE типтес программа орынын  PSP  программист  резервілемейді,
ол оның программалау процессінде жүктеуін тұрғызады.
      DOS программаны орындау  процессінде  PSP  мазмұны  қолданылады,  оған
қолданбалы программаны жасауға қолданады.
      Программа, жады жүктеуінде, үш  маңызды  компонент  үшін  программалау
қосылады: қоршаған, префикс программалық сегменті және программаны,  бірнеше
сегменттен тұруы мүмкін және бірнеше байланыссыз бөлім жады орын алады.
      Динамикалық басқарма жады үшін келесі DOS функциясы қолданылады:
      48h – жады блогын қою;
      49h – жады блогын босату;
      4Аh – жады блогын тағайындау өлшемін ауыстыру.
      Орындалған көлем әрбір буфері есептелу  кезінде  жұмыс  істеу  барысын
және динамикалық белгілеу жадын сұрап, оны жасау  .COM  типтес  программасын
қарастырайық. Программа келесі блогын қолдау қажет:
         - параграф жадының өлшемін анықтау;
         - жаңа орынға стек көшірмесін көрсету;
         - артық жадыны босату;
         - жалғыз  немесе  көп  сегменттік  түрде  жадыны  керекті  өлшемін
           белгілеу;
         -  ол  программаға  қажет  болғандықтан  белгіленген  сегменттерді
           қолдану;
         - белгілеу жадыны босату;
         - программаны аяқтау.


      2. Программа жүктелу жадында DOS Exec(int 21h – 4h)  функция  көмекмен
үшін жасалып, жүйені  жүктеу  ролін  атқарады.  Егер  қолданушы  программаны
қосады, командалық жолды  батырма  арқылы  енгізеді,  сонда  Exec  функциясы
Command.com шақырады ал басқа жағдайда Exec функциясы DOC  қабықшасы  немесе
интерфейстің  басқа  программаларын  шақырады,  не  болмаса  жүктелген  және
істелетін программа, солардың ішінде қолданбалы.
      Командалық процессордың айналасы, процессордың бастамалы  жүктемесінде
ұйымдастырылған,  көбінесе  Comshec,   prompt,   path,   қолданылады,   олар
autoexec.bat. файлынан ауданға өткізіледі. Мысал:
            Comshec=c: \ dos\command.com
            Prompt= $p$g
            Path=c: \dos; c: \tools
      Көмекші программаға аймақтық мекен-жайын жіберу үшін, аналық  пограмма
екі облыстық жадты қолдана алады, барлық программаларға сәйкес келетін:
      - векторлык бос үзінді;
      - тапсырма аралық аймақтық байланыс.


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Динамикалық басқарма жады үшін қандай DOS функциясы қолданылады?
      2 DOS драйвердің функцияларын атаңыз.
      3 Программа, жады жүктеуінде неше маңызды компонент үшін
         программалау қосылады?


      Тақырыбы 15 Резидентті программалар. Инсталляционды программа.
      Мақсаты:      Ассемблер тілінде резидентті программаларымен жұмысты
                              таныстыру.
      Дәріс сұрақтары:
      1. Резиденттік программаның негізгі ұйымы.
      2. Резиденттік программамен байланыс.
      3. Резиденттік программаны жадыдан шығару.


      1. Программалық үлкен класс,  функциялы  есептеу  жүйесін  қамтамассыз
ететін   (драйверлік   құрылым,   DOS   қабықшасы,   шифрлеу   және   қорғау
программалары: мәліметтер, русификаторлар, блокнот немесе  калькулятор  және
т.б. электронды программалар қатысады), жадыда болуы тиіс және  қолданушының
сұранысына тез арада әрекет жасау керек, немесе   есептеуіш  жүйедегі  басқа
бір жағдайларға байланысты. Бұндай  программалар  жадыдағы  резидент  немесе
жай резиденттік программалардың атымен аталады. Резидентті программаны  .СOM
типті немесе .EXE программалық типті құрастыруға болады,  бірақ  резиденттік
программа максимал болуы тиіс болғандықтан, резиденттік түрінде .COM  типтік
программалар жиі қолданылады.
      Жүктелу және жадыда қалдыру үшін арналған программалар,  көбінесе  екі
бөлімнен тұрады (секция)  –  инициализациялық  және  жұмысшы  (резиденттік).
Резиденттік  секция  текстік  программаның  басында  орналасады,   кейін   –
инициализацияланады.
      Резиденттік  программаны  қосу  үшін,  оған  қалайда  басқарманы  және
параметрлерді беру керек. Резиденттік программаны үш түрмен қосуға болады:
      - программа сияқты CALL операторымен шығару;
      - асинхрондық (аппараттық) үзілісті механизмді қолдану;
      - синхрондық (программалық) үзілістің көмегімен.
      Сонымен қатар DOS – та резиденттік программалармен қарым  –  қатынаста
мультиплекстік үзілім 2Fh  қарастырылады.




      2. Резиденттік программаға транзиттік  қатынау  үшін  тапсырма  аралық
қатынасының ауданын қолдануға болады, BIOS мәлімет ауданның бөлігін  құрайды
және 40h:F0h…40h:FFh адресінде орналасқан. Бұл аудан жүйемен  қолданылмайды,
тек  қана  қолданушының  коммуникациялық  программамен  арнайы  қолданылады.
Тапсырма аралық қатынасының ауданымен резиденттік  программасын  шақыру  мен
қатар параметрлерді беруге  болады.  Параметрлердің  өзін  емес  оның  адрес
беруге ыңғайлы; себебі толық  адрес  екі  сөздік  орын  алады,  ал  тапсырма
аралық ауданында төрт адрес орын алады.
      Резиденттік программасын және параметрлерін басқаруын ең арнайы тәсіл,
бос векторды қолдану, мысалы,  60h…66h.  Инициализация  кезінде  резиденттік
программа өзінің адресін бол векторға орналастырады:
            mov ax,0
            mov es, ax
            mov es: 180h.offset entry
            mov es: 182h, cs
      Резиденттік программасын екпінді түрге  келтірген  кезінде  транзиттік
программада int 60h командасын істеуге жеткілікті.
      Бұл жағдайда  резиденттік  программа  IRET  командасымен  қорытындылау
керек. Параметрлердің адресін басқа  бос  векторлар  алқылы  беруге  болады,
мысалы, 61h немесе 62h. Әрине, тапсырма аралық ауданын да қолдануға  болады.

      Жүйесінің келісімі бойынша 2 Fh  үзілімі  AL  регистіріне  резиденттік
программасының қалып күйін қайтарады:
      AL=0 – программа орнатылмаған (яғни жадыда резиденттік  программа  әлі
жоқ) және оны орнатуға болады;
      AL=1 – программа орнатылмаған және орнатуға болмайды;
      AL=FFh – программа орнатылған сондықтан қайта орнатуға керегі жоқ.




      3. Резиденттік программаларын әр түрлі  тәсілдермен  жадыдан  шығаруға
болады. Ең қарапайым тәсіл  –  жадының  блогын  босату,  Dos  49h  функциясы
арқылы программаны ауыстыру. Басқасында - жадыдан шығару программасында  4Ch
аяқталу функциясы қолданылады, оны шығуын емес  ал  резиденттік  программаны
аяқтау, содан кейін басқарманы шығаруға қайтарады. Жадыны босатудың  алдында
векторлық үзілісті бәрібір қалпына келтіру керек,  резиденттік  программамен
ұсталған.


      Әдебиеті:
      1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
      2 К. Г.  Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
         "Радио и связь", 1995.


      Бақылау сұрақтары:
      1 Резидентті программалар дегеніміз не?
      2 Резиденттік программаны неше түрмен қосуға болады?
      3  Резиденттік  программаларын  жадыдан  шығару  үшін  қандай  тәсілін
білесіз?












      -----------------------

                     Ассемблер тіліндегі бастапқы модуль




                        Ассемблер аудару программасы




                                Объект модулі




                                     PSP

                                 256 байттар




                             Командалар сегменті




                             Мәліметтер сегменті




                                Стек сегменті




                                     PSP

                                 256 байттар




                          Программа және мәліметтер

                                   Данные







                                    Стек




   (SP=FFFEh









Пәндер