Шартсыз ту командалары
Процессорды командалар жйесінде бірнеше шарттыз ту командалары бар. Оларды айырмашылытары ту ашытыы жне ту адресіні берілуімен аныталады. Шартсыз ту командаларыны жазылу синтаксисі:
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 байт орын алады).