СЕМЕЙ ҚАЛАСЫНЫҢ ШӘКӘРIМ АТЫНДАҒЫ МЕМЛЕКЕТТIК УНИВЕРСИТЕТI
|
3-деңгейлi СМЖ құжаты
|
ПОӘК
|
ПОӘК 042-18-11.1.20.56/03-2013
|
ПОӘК
«Жүйелік бағдарламалау» пәнінің оқу-әдістемелік материалдары | №1 баспа
26.08.2013 ж.
|
«ЖҮЙЕЛІК БАҒДАРЛАМАЛАУ»
ПӘНІНІҢ ОҚУ -ӘДІСТЕМЕЛІК КЕШЕНІ
5В070400 - Есептеу техникасы және бағдарламалық қамтамасыз ету мамандығына арналған
ОҚУ-ӘДІСТЕМЕЛІК МАТЕРИАЛДАР
Семей
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збек.
Тақырыбы 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. Жадыны ұйымдастыру:
-
адрестік кеңістікті үлестіру;
-
жадының сегменттелген моделі;
-
нақты режимдегі физикалық адрестің қалыптастыруы.
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 кестесіне сәйкес келеді. Егер сандармен жұмыс жүргізілсе, онда символдық ақпаратты машиналық командаларымен қамтамасыз етілетін форматқа түрлендіру қажет. Осындай түрлендіруден кейін қажет есептеулерді жүргізіп, нәтижені қайтадан символдық түрге ауыстыру керек. Содан соң ақпаратты мониторға шығару керек.
-
0...9 оналтылық цифрлері үшін ASCII код сәйкесінше екілік көріністен айырмашылығы бар. Сондықтан ASCII кодын түрлендіру үшін екі жол бар:
-
екілік алу амалын орындау: (ASCII код)h – 30h
-
ASCII кодында 16-лық цифрімен байттың үлкен тетрадасын нөлге келтіру.
-
Түрлендіру алгоритмі 16-лық цифрлердің жолдық және қолмен жазылған әріптік символдары айыру қажет. Және ASCII кодының мәнін 37һ немесе 67һ шамаларына дұрыстау керек.
Әдебиеті:
1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 2009.
2 К. Г. Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
"Радио и связь", 2005.
Бақылау сұрақтары:
1 Микропроцессор аппаратты түрде оперативті жадыны қолданудың неше
моделдерімен қамтиды?
2 Адрестік кеңістік дегеніміз не?
3 Физикалық жадының адрестеу механизмінде қандай сипаттамалары бар?
Тақырыбы 3 Ассемблерде программа құру.
Мақсаты: Ассемблерде программа құру принциптерімен таныстыру.
Дәріс сұрақтары:
1. Трансляция, құрастыру, TurboDebugger жөндеуіші
2. .ЕХЕ және .СОМ түрдес программалар жады мен құрылымы.
1. Төмеңгі деңгей тілдеріне Ассемблер тілі жатады. Өз атауын Ассемблер жүйелі программаның атынан алды. Бұл программа ағымды программаларды машина командаларының кодтарына айналдырады. «Ассемблер» термині assembler (бір бүтінге бөліктерді жинау) ағылшын сөзінен шыққан.
Бастапқы программада немесе бастапқы модульде операторлар бөліктер ретінде қызмет жасайды, ал құрастыру нәтижесі – объект модуль ретіндегі машина командалар тізбегі. Құрастыру процессі ассемблерлеу немесе аудару (трансляция) деп аталады (Сурет 1 қараңыз).
Сурет 1. Бастапқы модуль, Ассемблер және объект модуль арасындағы қатынас
Программаның ағымды текстін дайындауы кез келген текстік редактор арқылы жасалынады. Мысалы, Windows жүйесінің WordPad не Блокнот программаларында ұйыдастыруға болады. Ағымды тексті бар файлдың кеңейтілуі .ASM болуы керек. Келесі әрекет мынадай болады, программаның ағымды текстін машина командаларының кодына айналдыру. Бұл әрекет Ассемблер программасы (TASM 5.0, фирмалық атаулары - Turbo Assembler, Turbo Link және Turbo Debugger) арқылы орындалады. Трансляциядан кейін екі файл құрылады – трансляция листингі және OBJ кеңейтілуімен объекттік файлы. Листинг өзімен қандай-да бір текстік редакторда ағымды программаны оқуға болатын текстік файлды көрсетеді. Транслятор тапқан қателер туралы ақпаратты да өзінде сақтайды.
Листинг элементтерінің трансляциясын байқайық (Сурет 2 қараңыз).
Сурет 2. Программаны аудару (трансляция)
Берілген суреттегі программаны талқылайық. Аssume, segment, ends, end операторлары бар сөйлемдер трансляциядан өтпейді және жады аймағында көрсетілмейді. Олар тек трансляторға қызмет ақпаратын (assume – команданы аудару тәсілі, segment және end – сегменттер шегін, end – ағымды текстті өңдеу әрекетін аяқтау) жіберу үшін қажет.
2. MS-DOS басқарумен орындалатын программалар .СОМ және .ЕХЕ программалық файлдарының біреуіне қатысты болады. Олардың негізгі айырмашылығы - .СОМ программалары бір сегменттен тұрады және бұл сегментте программалық кодтар, мәліметтер және стек орналасады. Ал .ЕХЕ программаларында мәліметтер, стек үшін жеке сегменттер болады. Сонымен, .СОМ типтес программалардың өлшемі - 64 Кбайт, ал .ЕХЕ типтес программалардың өлшемі шектелмеген, себебі, оған программа мен мәліметтердің кез келген сегменттер саны кіреді.
.ЕХЕ программаның құрылымы мен жады
t
PSP
256 байттар
itle .ЕХЕ типтес программа Е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 программаның құрылымы мен жады
t
PSP
256 байттар
itle .COM типтес программа CS,DS,ES,SS--->
text segment ‘Code’
Программа және мәліметтер
Данные
assume CS : text, DS : text IP
org 100h
m
Стек
yproc proc
h
SP=FFFEh
ello 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. Әр машиналық команда екі бөлімнен тұрады. Машиналық командаға келесі элементтер кіреді:
-
префикстер өрісі;
-
амал кодының өрісі;
-
операндалар өрісі.
Сондықтан операндалардың тек келесі форматтары мүмкін:
-
регистр-регистр;
-
регистр-жады;
-
жады-регистр;
-
тікелей операнд-регистр;
-
тікелей операнд-жады.
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 операнд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 командасы арқылы жолда символды іздеу
Достарыңызбен бөлісу: |