Циклдық ығысу командасы
Билет
1.Циклды ұйымдастыратын командалар тобы.
Логикалық командалар көмегімен орнату, тастау, терістеу немесе белгілі бір мєнге тексеру маќсатымен операндта бµлек биттерді кµрсету м‰мкіндігі бар. Биттермен м±ндай ж±мысты ±йымдастыру ‰шін екінші операнd маска ролін ойнайды. Б±л масканыњ бірге орнатылѓан биттері кµмегімен бірінші операндтың белгілі бір операцияѓа ќажет биттері аныќталады. циклды ұйымдастыратын loop командасы қайсыбір адрес бойынша орналасқан командаға басқаруды беруден басқа есх/сх регистрінің мәнін талдайды жєне бірге азайтады;
2. Логикалық командалардың таѓайындалуы
Микропроцессордыњ командалар ж‰йесі мєліметтерді логикалыќ т‰рлендіру ќ±ралдарынан т±рады. Логикалық деп, негізінде формальді логика ережелері жататын мєліметтерді т‰рлендіру т‰сініледі. Формальді логика ақиқат және жалған пікірлері деңгейінде жұмыс істейді. Микропроцессор үшін б±л сєйкесінше 1 және 0 білдіреді. Ж‰йелік деңгейде жұмыс істеу үшін ењ төменгі деңгейде – биттік деңгейде жұмыс істеу м‰мкіндігі болуы керек. Б±л м‰мкіндіктерді логикалық командалар және логикалық операциялар береді: олардың айырмашылығы логикалық командалар программаныњ орындалуы кезењінде, ал логикалық операциялар оныњ трансляциясы кезењінде єрекет жасайды.
Жалпы жағдайда, ассемблер командасыныњ операнды µз кезегінде операторлар мен операндтардыњ комбинациясы болатын амал болып табылады. Б±л операторлардың ішінде амалдыњ объекттерімен логикалыќ операцияларды іске асыратын операторлар болуы м‰мкін.
Логикалық командалар көмегімен орнату, тастау, терістеу немесе белгілі бір мєнге тексеру маќсатымен операндта бµлек биттерді кµрсету м‰мкіндігі бар. Биттермен м±ндай ж±мысты ±йымдастыру ‰шін екінші операнd маска ролін ойнайды. Б±л масканыњ бірге орнатылѓан биттері кµмегімен бірінші операндтың белгілі бір операцияѓа ќажет биттері аныќталады.
3.addкомандасының жұмыс істеу алгоритмін сипаттаңыз
Билет
Циклдық ығысу командасы
Циклдық ығысу командасына биттің ығысу мәнін сақтайтын командалар жатады. Циклдік ығысу командасының 2 типі бар:
- қарапайым циклдыќ ығысу командалары;
- cf тасымалдау жалауы арќылы циклдық ығысу командалары.
Ќарапайым циклдыќ ығысу командаларына жататындар:
rol операнд, ыѓысулардыњ_санауышы (Rotate Left) — солға қарай циклдық ығысу. Операндтыњ ќ±рамы ыѓысулардыњ_санауышы операндымен аныќталатын биттер санына солѓа ќарай жылжиды. Солѓа ќарай жылжитын биттер сол операндќа оњ жаѓынан жазылады;
ror операнд, ыѓысулардыњ_санауышы (Rotate Right) — оњға қарай циклдық ығысу. Операндтыњ ќ±рамы ыѓысулардыњ_санауышы операндымен аныќталатын биттер санына оњѓа ќарай жылжиды. Оњѓа ќарай жылжитын биттер сол операндќа сол жаѓынан жазылады.
Қарапайым циклдік ығысу командалары µздерініњ жұмысы барысында бір пайдалы әрекетті жасайды, атап айтсақ: циклдік ығысатын бит операндќа тек ќана басќа жаѓынан жылжып ќана ќоймайды, оныњ мєні бір уаќытта cf жалауыныњ мєні болады. Мысалы, еах регистрініњ екі жартысыныњ ќ±рамын ауыстыру үшін келесі командаларды орындау жеткілікті:
mov eax, ffff0000h
mov cl, 16
rol eaх, cl
cf тасымалдау жалауы арќылы циклдыќ ыѓысу командаларыныњ ќарапайым циклдыќ ыѓысу командаларынан айырмашылыѓы ыѓысатын бит операндќа бірден т‰спейді, алдымен cf тасымалдау жалауына жазылады. Тек ќана берілген ыѓысу командасыныњ келесі орындалуы (ол циклды орындалѓан кезде) б±рын жылжытылѓан биттіњ операндтыњ басќа соњына орналасуына єкеледі.
Cf жалауы арќылы циклдыќ ыѓысу командаларына келесілер жатады:
rcl операнд, ыѓысулардыњ_санауышы (Rotate Through Carry Left) — тасымал арқылы циклдық солѓа ығысу. Операндтыњ ќ±рамы ыѓысулардыњ_санауышы операндымен аныќталатын биттер санына солѓа ќарай жылжиды. Жылжитын биттер кезекпен cf тасымалдау жалауыныњ мєні болады;
rcr операнд, ыѓысулардыњ_санауышы (Rotate through Carry Right) — тасымал арқылы циклдық оңға ығысу. Операндтыњ ќ±рамы ыѓысулардыњ_санауышы операндымен аныќталатын биттер санына оњѓа ќарай жылжиды. Жылжитын биттер кезекпен cf тасымалдау жалауыныњ мєні болады.
Тасымалдау жалауы арќылы ыѓысу кезінде, дербес жаѓдайда циклдыќ ыѓысатын биттерді ауыстыруды жасауѓа болады. Мысалы, bх регистріне еах регистрінің үлкен бөлігін жазуды ќарастырайыќ:
mov cx, 16 ;еах ‰шін ығысулар саны
ml:
clc ; cf жалауын 0-ге тастау
rcl еах, 1 ; cf –ке еах-тен шеткі сол жаќ биттіњ ыѓысуы ығысуы
rcl bx ; bх –ке оњ жаќтан cf-тен биттердіњ ауысуы
loop ml ; цикл 16 рет
rol еах, 16 еах-тің оң жағын ќалпына келтіру
Қарапайым циклдік ыѓысу командаларын басқа да әрекеттерде қолдануға болады. Мысалы, еах регистріндегі бірлік биттердің санын анықтау керек болсын:
xor dx, dx ; бірлік биттерді санау үшін dx –ті тазалау
mov cx, 32 ; санаудыњ циклдар саны
cycl: : ; циклдыњ белгісі
ror eax, 1 ; оңға қарай циклдік 1 битке ығысу
jnc not_one ; егер, cf –тегі кезекті бит
; бірге тең емес болса, онда кµшу
inc dx ; цикл санауышын арттыру
not_one:
loop cycl ; егер, сх-тегі мєн 0-ге тењ емес болса,
; онда cycl белгісіне кµшу
Жолдыќ командалар
Жолдармен, немесе тізбектелген символдар немесе сандармен ж±мыс істеу ‰шін микропроцессорда бірќатар арнайы командалар ќарастырылѓан:
movs — жолды тасымалдау;
cmps — екі жолды салыстыру;
seas — жолдағы берілген элементті іздеу;
lods — жолдан аккумуляторды ж‰ктеу (AL немесе АХ регистрлерін);
stos — аккумулятордан (AL немесеАХ регистрлерінен) жолдыњ элементін жазу.
Жолдарды өңдеу командалары программаға операндтарды айќын т‰рде кµрсетусіз енгізілсе де, єрбір команда шындыѓында екі операндты ќолданады. seas және stos командалары ‰шін операнд-бастама ретінде аккумулятор ќызмет етеді, ал операнд-ќабылдаѓыш жадыда болады. Lods командасы үшін керісінше, операнд-бастама жадыда сақталады, ал қабылдаѓыш ретінде аккумулятор ќызмет атқарады. movs және cmps командалары ‰шін кµз де, ќабылдаѓыш та жадыда болады.
Ќарастырылатын командалар әртүрлі єрекеттерді орындаѓанда бірдей ережелерге баѓынады: жадыдаѓы операндтар єрќашан бір т‰рде адрестеледі: операнд-бастама DS:SI-регистрлері арќылы, ал операнд-ќабылдаѓыш ES:DI-регистрлері арќылы. Бір рет орындалѓан кезде командалар тек ќана бір элементті µњдейді, ал жолды µњдеу ‰шін командалар ќайталау префикстерін ќолданады. Жолды µњдеу кезінде SI және DI регистрлері, келесі элементтердіњ адрестелуін ќамтамасыз етіп алѓа ќарай (егер df=0) немесе артќа ќарай (егер df=1) бір жолѓа автоматты т‰рде ыѓысады. Єрбір команданыњ байттармен немесе сµздермен (мысалы, movsb жєне movsw) ж±мыс істейтін модификациялары бар.
Осылайша, жолдық командалардың дұрыс орындалуы үшін алдын ала DS:SI және ES:DI регистрлерін реттеу, DF жалауын орнату немесе тастау, СХ-ке µњделетін жолдыњ ±зындыѓын ж‰ктеу, ал seas және stos командалары үшін операнд-бастаманы АХ регистріне (немесе байттармен ж±мыс істеген кезде AL-ге) орналастыру ќажет.
Кейде операцияның өзі, осы барлық икемдеулерден кейін, єдетте тіпті операндтары жоќ бір командамен орындалады, дегенмен де онда ќайталау префиксі болуы м‰мкін.
Ќарастырылѓан командалармен µњделетін жолдардыњ жадыныњ кез келген жерінде: программаныњ мєліметтер µрісінде, мєліметтердіњ ж‰йелік облыстарында, т±раќты саќтау ќ±рылѓысында, бейнебуферде болулары м‰мкіндігін атап айтуѓа болады. Мысалы, movs командасының көмегімен мєліметтер массивін бір массивтік айнымалыдан екіншісіне, сондай аќ тексті терминал экранына тасымалдауѓа болады.
Мысал. BIOS-таѓы т±раќты саќтау ќ±рылѓысынан оныњ шыѓарылѓан к‰нін оќу.
; программалық сегментте
main proc
mov AX, 0F000h ;DS-ке BIOS-таѓы т±раќты саќтау
mov DS, AX ; ќ±рылѓысыныњ сегменттік адресін әкелеміз
mov SI, 0FFF5h ; бізді қызықтыратын өріске көшу
mov AX, data ; ES-ті программаның мәліметтер сегментіне
mov ES, AX ; икемдейміз
mov DI,offset bios ;Мерзімді сақтау үшін өріске ығысу
mov CX, 8 ; 8 байтты көшіру
cld ; жол бойымен алға қарай қозғалу
rep movsb ; байттарды тасымалдау
;Алған ақпаратты экранға шығару
mov AX, data ;программаның мәліметтер сегментіне
mov DS, AX ; DS –ті икемдеу
mov АН, 40h ;Шығару функциясы
mov BX, 1 ;Экранның дескрипторы
mov СХ, 8 ;8 байтты шығару
mov DX,offset bios ;жолға ығысу
int 2Ih ; DOS-ты шақыру
; Мәліметтер сегментінде
bios db 8 dup(') ;Мерзімді сақтайтын өріс
loopкомандасының жұмыс істеу алгоритмін сипаттаңыз
Циклдар программаның кейбір бµліктерін кµп рет орындауға мүмкіндік береді. 86 микропроцессорыныњ командалар жүйесінде циклдар loop командасының көмегімен жүзеге асады. Циклда қадамның саны СХ регистрі арқылы анықталады. Іске асу кезінде loop командасы басында процессордың СХ регистрін 1-ге азайтады, одан кейін алынған санды 0-мен салыстырады. Егер СХ>0 болса, онда көрсетілген белгіге кµшу орындалады. Егер СХ=0 болса, онда цикл ажыратылады да, процессор loop командасынан кейінгі командаѓа көшеді. Сондықтан циклдан ќалыпты шыққаннан кейін СХ ылғи да 0-ге тең болады. Командалық кодта көшу нүктесіне ыѓысуѓа 1 байт қана бөлінеді. Ыѓысу белгісі бар шама болуы ќажет болѓандыќтан, loop командасымен басқаруды беруге болатын ењ ‰лкен ара ќашыќтыќ –128-ден +127-ге дейінгі байтты ќ±райды, осылайша циклдыњ денесі 128 байтпен шектеледі.