Алашқ жанама өту: JMP m32

Бұл командада нақтылы өту адресі жазылатын екіеселі сөз көрсетіледі. Ол сөз екі бөліктен тұрады: сегмент ішіндегі өту адресі mem32 адресіне, ал сегмент mem32+2 адресіне жазылады:

CS:=[mem32+2] ;IP=[mem32]

Мысалы:

X DD L ;X offset L, X+2: seg L

. . .

JMP X ;goto L (CS:=seg L,IP:=offset L)

. . .

Жанама өту командасын жазуда сақ болу керек. Егер командада, осы командаға дейін сипатталған, Х атауы көрсетілсе, онда оны кездестіріп, ассемблер Х екіеселі сөз екенін біледі де, осы командада алшақ өту орындалатынын түсінеді. Ал егерде Х кейін сипатталса, онда ассемблер өту командасын кездестіріп, бұл жағдайда қандай өту жасалатынын білмейді де, бұл атау кезекті сегменттің белгісі деп жорамалдап, жақын өту машиналық командасын қалыптастыралы. Содан, кезекті сегментте ондай белгінің жоқтығы анықталғанда, ассемблер қателік көрсетеді. Осындай жағдайды болдырмау үшін алшақ жанама өтуде алға сілтеу үшін атау екіеселі сөз екендігін айқын көрсету қажет. Ол үшін PTR операторы қолданылады:

JMP DWRD PTR X

Жоғарыда айтылғандай бұл тәрізді алға сілтеу үшін анықтаулар жақын өтулерде де жасалады. Осы айтылғандардың бәрінен келесі ереже туады: егер Х алға сілтеу болса, онда шартсыз өту командасын жазу дұрыс болады:

· JMP NEAR X - жақын тура ұзын өту, NEAR типін жазбаса да болады

· JMP SHORT X - жақын тура қысқа өту

· JMP FAR PTR X - алшақ тура өту

· JMP WORD PTR X - жақын жанама өту

· JMP DWORD PTR X - алшақ жанама өту

Осы тәрізді анықтауларды JMP командасында жанама өту көрсетілгенде де жасау керек, мысалы, JMP [BX]; үнсіз келісім бойынша ассемблер мұндай команданы жақын жанама өту ретінде қабылдайды.

Ал Х- тің артқа сілтеу болатын жағдайын қарастырсақ, онда өту түрін тек алшақтан тура өтуде ғана міндетті түрде анықтау керек: ассемблер Х- тің басқа командалар сегментінен екендігін білетұра JMP X командасын алшақтан өту деп қарастырмайды.

Әдетте машиналық программанның командалары бірінен соң бірі біртіндеп орындалады. Осы ретті өзгерту үшін өту командалары қолданылады. Өту командалары шартты өту және шартсыз өту болып бөлінеді. Шартсыз өту деген бірден өту, ал шартты өту деген қандайда бір шартты орындап барып өтеді.

Тура өту командасы.Бұл жағдайда операнд ретінде келесі орындалатын команданың белгісі көрсетіледі.

JMP < белгі >

JMP L

.......

......

L: MOV AX, 0

Персоналды компьютерде 2 тура өту командасы бар. Оның біріне, салыстырмалы адрес – байт түрінде көрсетеді, ал екіншісінде салыстырмалы адрес – сөз түрінде көрсетеді. Сөз түрінде көрсетілгенде, ұзын өту командасы деп аталады, ал байт түрінде көрсетілгенде, қысқа өту командасы деп аталады. JMP L; - ұзын өту командасы (3 байт орын алады). JMP SHORT L; - қысқа өту командасы (2 байт орын алады).

Наши рекомендации