Регистрлік режим
Нәтижелік операндтың мәні алдын ала микропроцессордың кіріктірілген регистрлерінде сақталады. Регистрдің өзі тиімді ад- рес болады. Операнд (байт немесе сөз) регистрде орналасады. Бұл әдіс барлық программаланатын-адрестелетін процессордың регистрлеріне пайдаланылады.
inc CX
|
; CX регистрінің мәнін 1-ге арттыру.
|
push DS
|
; Сегменттік адрес стекте сақталады.
|
xchg BX,BP
|
; BX және BP регистрлері өздеріндегі сақталып тұрған мәлімет- термен алмасады.
|
mov ES,AX
|
; AX регистрінде сақталған мәліметтер ES регистріне жіберіледі.
|
Тікелей режим
Тікелей адрестеу. Операнд (байт немесе сөз) команда да көр- сетіледі және тасымалдаудан кейін команданың кодына түседі; ол кез келген мән қабылдай алады (сан, адрес, ASCII коды ), со- нымен қатар символдық белгілеу түрінде де болады.
mov АН, 40h
|
; 40h саны АН регистріне жүктеледі.
|
mov AL,сызба*сызба
|
ASCII кодының символы "*сызба AL регистріне жүктеледі.
|
int 21h
|
; 21h аргументті үзу командасы.
|
limit equ 528
|
; 528 саны limit белгілеуін алады.
|
mov CX,limit
|
; limit айнымалысы арқылы белгіленген сан СХ регистріне жүктеледі.
|
Соңғы қолданылып тұрған mov командасында екі операнд бар, бірінші операнд – регистрлік адресация, ал екіншісі тікелей адресациялау арқылы анықталады. Тікелей адресациялаудың маңызды қолданысы ретінде салыстырмалы адрестерді (ығыс- тырылуларды) тасымалдау болып табылады, ол үшін offset (ығыстыру) сипаттамасы қолданылады.
; мәліметтер сегменті.
132
string db «Privet»; символдар жолы.
; командалар сегменті.
mov DX,offset string; жолдың адресі DX регистріне жіберіледі.
Тура режим
Жады адрестеледі жады ұяшықтарының адрестері (сөз неме- се байт) командада (әдетте символдық түрде) көрсетіледі және команда кодына келіп түседі:
; мәліметтер сегменті.
meml dw 0; жады сөзінде 0 бар.
mem2 db 230; жады байтында 230 саны бар.
; командалар сегменті.
inc meml; meml сөзіндегі мәнді 1-ге арттырады.
mov DX, meml; menu анймалысында сақталған мән DX реги- стріне жүктеледі.
mov AL,mem2; mem2 айнымалысының мәні АL регистріне
жүктеледі.
Осы мысалды жоғарыдағы мысалмен салыстыра отырып, жады ұяшығында команданы көрсету, осы ұяшықтың мәні опе- ранд болатынын, ал жады ұяшығын offset сипаттаушысы арқы- лы көрсету, жады ұяшығының өзінің операнд болатынын білді- реді.
Жадыны тура адрестеу қарапайым және көрнекі. Егер біз meml жады ұяшығына қол жеткізгіміз келсе, тек оның атын программада көрсетеміз. Шындығында, бәрі басқаша. Кез кел- ген ұяшықтың адресі екі бөліктен: сегменттік адрестен және ығыстырылудан тұрады. Алдыңғы мысалдағы белгілеулер: meml және mem2 ығыстырулар болып табылады. Сегменттік ад- рестер сегменттік регистрлерде сақталады. Бірақ біз білетініміз- дей, сегменттік регистрлер төртеу: DS, ES, CS және SS.
Сонымен, процессор қай регистрден сегменттік адрес алын- ғанын қалай біледі және оны программаға қалай көрсетеді? Процессор префикс деп аталатын кодтар тобын ажыратады. Жалпы, префикстердің бірнеше топтары бар: қайталау, адрес өл- шемі, операнд өлшемі және сегментті алмастыру. Мұнда бізді қызықтыратыны – сегментті алмастыру префиксі. Жадымен жұ-
мыс істейтін процессордың командалары өздерінің бірінші байт-
тары ретінде сегментті алмастыру байттарынан тұрады, соның
133
Достарыңызбен бөлісу: |