Шартсыз өту командалары

Процессордың командалар жүйесінде бірнеше шарттыз өту командалары бар. Олардың айырмашылықтары өту қашықтығы және өту адресінің берілуімен анықталады. Шартсыз өту командаларының жазылу синтаксисі:

JMP ор

Мұнда операнд қандай да бір тәсілмен өту адресін, яғни келесі орындалатын команданың адресін көрсетеді. Ол адрес кезектегі сегментте немесе басқа бір сегментте жатуы мүмкін. Бірінші жағдайда ол сегментіші немесе жақын өту, ал екінші жағдайда сегментарлық немесе алшақ өту деп аталады.

Процессорда келесі орындалатын команданың адресі CS және ЕІР/ІР регистрлерімен берілетінін білеміз: CS регистрі осы команда тұрған жад сегменттінің басын, ал ЕІР/ІР регистрі кезекті сегменттің басынан бастап осы команданың сегмент ішіндегі орынын (ығысуын) көрсетеді.

Егер тек ЕІР/ІР регистрінің мәні өзгеретін болса, онда өту сегмент ішінде жасалады. Мұндай өтулер сегментіші немесе жақын өтулер деп аталады. Ал программада бірнеше сегмент бар болса, онда бір сегменттен басқа сегментке өту қажет болады. Мұндай өтулер сегментарлық немесе алшақ өтулер деп аталады.

Салыстыру және шартты өту командалары. Шартты өту командалары түрлері.

Жоспары.Салыстыру командаларынан соң қолданылатын шартты өту командалары. Қандайда бір анықталған жалаушалардың мәндеріне байланысты өту. СХ регистрінің мәнін тексеру арқылы өту.

Егер өту қандай да бір шарттардың орындалуына байланысты жасалса, ондай өту шартты өту деп аталады. Шартты өту әдетте екі қадамда жасалады: алдымен қандай да бір шамалар салыстырылады, нәтижесінде жалаушалардың мәндері орнатылады (SF,ZF және т.б.), содан соң жалаушалардың мәндеріне байланысты өту орындалады.

Салыстыру командасы SUB op1,op2 командасы тәрізді, операнттардың айырымын тауып, салыстыру нәтижесінде жалаушалардың мәндерін орнатады. Айырмашылығы: айырым ешқайда жазылмайды. Сондықтан бұл команданың негізгі жұмысы айырымды сипаттайтын жалаушалардың мәндерін орнату. Жазылуы:

CMP op1,op2

Шартты өту командасын алатын болсақ, процессордың командалар жүйесінде мұндай командалар жеткілікті. Олардың бәрі ассемблерде біркелкі жазылады:

J** <таңба>

Мұнда операнд қандай да бір шарт ақиқат болған жағдайдағы өтілетін команданың таңбасын көрсетеді. Ал мнемокод соңында бір немесе екі символ жазылатын J әріпінен басталады. Барлық шартты өту командаларын үш топқа бөлуге болады:

· салыстыру командасынан кейін қойылатын командалар;

· жалаушалардың мәндері арқылы жасалатын командалар;

· ЕСХ/СХ регистрінің мәнін тексеретін команда.

Бірінші топқа салыстыру командасынан кейін қойылатын командалар кіреді. Олардың мнемокодында белгілі бір әріптердің көмегімен салыстыру түрі анықталады. Олар:

E – equal (тең)

N – not (жоқ, терістеу)

G – greater (үлкен) – таңбалы сандар үшін

L – less (кіші) - таңбалы сандар үшін

A – above (жоғары, үлкен) – таңбасыз сандар үшін

B – below (төмен, кіші) – таңбасыз сандар үшін

Көріп отырғанымыздай «кіші» және «үлкен» шарттар үшін екі түрлі белгілеулер жасалған. Ол таңбалы, таңбасыз сандарды салыстырғаннан кейін жалаушалардың әртүрлі мәндері қарастырылатындықтан.

Енді салыстырудан кейін қолданылатын шартты өту командаларының барлық атауларын келтірейік:

Операнттардың типтері Шартты өту командасының мнемокоды Өту шарты   Жалаушалардың күйі  
кез келген сан JE op1=op2 ZF=1
кез келген сан JNE op1<>op2 ZF=0
таңбалы сандар JL/JNGE op1=op2 SF<>OF
таңбалы сандар JLE/JNG op1<=op2 SF<>OF немесе ZF=1
таңбалы сандар JG/JNLE op1>op2 SF=OF және ZF=0
таңбалы сандар JGE/JNL op1=>op2 SF=OF
таңбасыз сандар JB/JNAE op1=op2 CF=1
таңбасыз сандар JBE/JNAE op1<=op2 CF=1 немесе ZF=1
таңбасыз сандар JA/JNBE op1>op2 CF=0 және ZF=0
таңбасыз сандар JAE/JNB op1=>op2 CF=0

6.2.1-мысал. X, Y және Z сөз өлшемді айнымалылар. Z-ке Х пен Y-тің үлкенін жазу керек. Бұл есептің шешімі таңбалы, таңбасыз сандар үшін әртүрлі салыстыру командаларын қолданатын болғандықтан әртүрлі болады:

;таңбалы сандар MOV AX,X CMP AX,Y ;x=y? JGE M ;x>=y->M MOV AX,Y M: MOV Z,A ;таңбасыз сандар MOV AX,X CMP AX,Y JAE M MOV AX,Y M: MOV Z,AX

Шартты өту командаларының екінші тобына қандай да бір жалаушалардың мәндеріне байланысты жасалатын өту командалары кіреді. Егер жалаушаның мәні 1-ге тең болғанда өту жасалса, бұл командалардың мнемокодында тексерілетін жалаушаның бірінші әріпі көрсетіледі немесе егер өту жалаушаның нөлдік мәндері арқылы жасалса, N әріпі көрсетіледі.

Жалаушаның мәні Жалауша регистіріндегі биттың орыны Шартты өту командасының мнемокоды Жалаушаның күйі (өту шарты)
CF ауысу JC CF=1
PF жұптық JP PF=1
ZF нөлдік JZ ZF=1
SF таңба JS SF=1
OF толу JO OF=1
CF ауысу JNC CF=0
PF жұптық JNP PF=0
ZF нөлдік JNZ ZF=0
SF таңба JNS SF=0
OF толу JNO OF=0

(Ескерту: JE және JZ,JNE және JNZ,JB және JC,JNB және JNC мнемокдтарырың жұбтары эквивалентті).

6.2.2-мысал. Айталық А,В,С таңбасыз байттық айнымалылар, С=A*A+B өрнегін есептеу керек. Егер нәтиже байт өлшемінен артып кетсе, онда ERROR таңбасына өту керек.

Шешуі:

MOV AL,A

MUL AL

JC ERROR ;A*A > 255 (CF=1)àERROR

ADD AL,B

JC ERROR ;(CF=1)àERROR

MOV C,AL

...

ERROR:

Үшінші топқа жалаушаны емес, ЕСХ/СХ регистрінің мәнін тексеретін бір ғана шартты өту командасы кіреді:

JCXZ<таңба> немесе JЕCXZ<таңба>

JCXZ және JЕCXZ командалары тек қана қысқа өту жасайды, яғни олардың көмегімен 127-128 байтқа жоғары немесе төмен аттауға болады. Ол шамамен 30-40 команда (бір команда орта есеппен 3-4 байт орын алады).