Сегментіші (жақын) өту
Сегментіші өтуде тек EIP/IP регистрінің (процессордың адрестелу режиміне байланысты: егер 16 разрядтық болса - IP, ал 32 разрядтық болса-EIP) құрамы өзгереді. JMP командасының сегментіші қолданылуының үш нұсқасын атап өтуге болады: тура қысқа өту; тура өту; жанама өту.
Тура сегментіші өтудеорретінде келесі орындалатын команданың (өтетін команданың) белгісі көрсетіледі:
JMP <белгі>
Мысалы:
JMP L
. . .
L: MOV AX,0
Машиналық JMP командасының әдеттегі ұзындығы үш байт: бірінші байты - амалдың коды, ал екі байты - өту адресінің аймағы. Мұнда JMP командасына қарағанда 64Кбайт аралығына дейінгі өту ұйымдастырылу мүмкіндік бар.
Тура сегментіші қысқа өтуJMP командасынан өту адресіне дейінгі арақашықтық -128 немесе +127-ден аспайтын жағдайда қолданылады. Бұл жағдайда ассемблер трансляторы ұзындығы екі байт болатын машиналық шартсыз өту командасын қатыптастырады. Мұнда, егер өту адресі JMP командасына дейін орналасса, онда ешқандай қосымша нұсқаудың қажеті жоқ, ал егер өту адресі JMP командасынан кейін орналасса, онда транслятор өздігінен қысқа өту екендігін анықтай алмайды. Ол үшін өту командасында SHORT модифиқаторы көрсетіледі:
JMP SHORT <белгі>
Жанама өту.Бұл жағдайда өту командасында өту адресі емес, ол адрес орналасатын орын көрсетіледі. Бұл орын – жалпы регистрлердің бірі, немесе жад ұяшығы болуы мүмкін (reg16/reg 32 немесе mem16/mem32). Осы ұяшықтағы мәлімет адрес ретінде алынып, сол адреске өту орындалады және де ол адрес нақтылы адрес болып саналады.
Мысалы:
A DW M
. . .
JMP A ;goto[A]=goto M
MOV DX,A ;DX=L
JMP DX ;goto[DX]=goto M
. . .
M:
Жанама өту - өту адрестері программаның орындалу барысында белгілі болатын жағдайда қолданылады.
Сегментарлық (алшақ) өту
Жалпы жағдайда программада командалар өте көп болып, олар бір сегментке сыймауы мүмкін. Осындай жағдайда немесе қандайда бір басқа жағдайларда программада бірнеше командалар сегменттері сипатталады.
Мысалы,
Seg1 SEGMENT
ASSUMME CS:Seg1, …
START: MOV AX,0
. . .
JMP FAR PTR L ;goto L
. . .
Seg1 ENDS
Seg2 SEGMENT
ASSUMME CS:Seg2
L: INC BX
. . .
Seg2 ENDS
Көріп отырғанымыздай әр сегменттің басында, сегменттік CS регистріне кезекті сегменті сәйкестендіретін, ASSUMME директивасы көрсетілуі керек. Міне осы хабарлама бойынша ассемблер кезекті сегменттің командалық сегмент екендігін біледі. Олай болмаған жағдайда ассемблер қателік шығарады.
Процессордың командалар жүйесінде сегментаралық өтулерді ұйымдастыруға арналған командалар қарастырылған, және олардың бәрі тек шартсыз өтулер (шарты өтулер қашан да сегмент ішінде жасалады).
Алшақ тура өту: JMP FAR PTR <белгі>
Мұнда FAR (алшақ) сөзі ассамблерге белгінің басқа сегментте екендігін көрсетеді. Бұл команда бойынша CS регистрі белгі тұрған сегменттің басына орнатылады, ал ІР регистріне осы сегменттің ішіндегі белгі жазылады.
Жоғарыдағы мысалда L белгісіне алшақтан өту жасалған.