Сегментіші (жаын) ту

Сегментіші туде тек 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 белгісіне алшатан ту жасалан.