Programowanie w języku Assembler

Instrukcje procesorów rodziny 80x86 (J)


JxxJump Instructions
UżycieJxx label
Modyfikowane flagiBrak
MnemonikZnaczenieWarunek skoku
JAJump if Above (A>B)CF=0 i ZF=0
JAEJump if Above or Equal (A>=B)CF=0
JBJump if Below (A<B)CF=1
JBEJump if Below or Equal (A<=B)CF=1 lub ZF=1
JCJump if CarryCF=1
JCXZJump if CX ZeroCX=0
JEJump if Equal (A=B)ZF=1
JGJump if Greater (ze znakiem) (A>B)ZF=0 i SF=OF
JGEJump if Greater or Equal(ze znakiem) (A>=B)SF=OF
JLJump if Less (ze znakiem) (A&lt;B)SF<of</td>
JLEJump if Less or Equal (ze znakiem) (A&lt;=B)ZF=1 lub SF<of</td>
JMPSkok bezwarunkowyBrak
JNAJump if Not Above (A&lt;=B)CF=1 lub ZF=1
JNAEJump if Not Above or Equal (A&lt;B)CF=1
JNBJump if Not Below (A&gt;=B)CF=0
JNBEJump if Not Below or Equal (A&gt;B)CF=0 i ZF=0
JNCJump if Not CarryCF=0
JNEJump if Not Equal (A&lt;&gt;B)ZF=0
JNGJump if Not Greater (ze znakiem) (A&lt;=B)ZF=1 lub SF<of</td>
JNGEJump if Not Greater or Equal (ze znakiem) (A&lt;B)SF <of</td>
JNLJump if Not Less (ze znakiem) (A&gt;=B)SF=OF
JNLEJump if Not Less or Equal(ze znakiem) (A&gt;B)ZF=0 i SF=OF
JNOJump if Not Overflow (ze znakiem)OF=0
JNPJump if No ParityPF=0
JNSJump if Not Signed (ze znakiem)SF=0
JNZJump if Not ZeroZF=0
JOJump if Overflow (ze znakiem)OF=1
JPJump if ParityPF=1
JPEJump if Parity EvenPF=1
JPOJump if Parity OddPF=0
JSJump if Signed (ze znakiem)SF=1
JZJump if ZeroZF=1
Dobrym zwyczajem programistycznym jest taka organizacja kodu, że częściej występuje warunek nie wymagajacy skoku ponieważ skoki trwają dłużej niż wykonywanie porównania.
&nbsp; Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Jx: jump167+m7+m32
no jump4331&nbsp;
Jx: near-label--7+m34
no jump--31&nbsp;


JCXZ/JECXZJump if Register (E)CX is Zero
UżycieJCXZ label
JECXZ label (386+)
Modyfikowane flagiBrak
Powoduje skok do label, jeżeli rejestr CX = 0. Używa porównania bez znaku.
&nbsp; Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
label: jump188+m9+m82
no jump6455&nbsp;


JMPUnconditional Jump
UżycieJMP target
Modyfikowane flagiBrak
Bezwarunkowy skok do target. Skoki domyślnie są z przedziału od -32768 tdo32767 bajtów od instrukcji po instrukcji skoku. Skoki typu NEAR i SHORT powodują zmianę rejestru IP, a FAR zmianę rejestrów CS i IP.
&nbsp; Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
rel8 (relative)157+m7+m3&nbsp;
rel16 (relative)157+m7+m3&nbsp;
rel32 (relative)--7+m3&nbsp;
reg16 near, register indirect)117+m7+m5&nbsp;
reg32 (near, register indirect)--7+m5&nbsp;
mem16 (near, mem indirect)18+EA11+m10+m5&nbsp;
mem32 (near, mem indirect)24+EA15+m10+m5&nbsp;
ptr16:16 (far, dword immed)--12+m17&nbsp;
ptr16:16 (far, PM dword immed)--27+m19&nbsp;
ptr16:16 (call gate, same priv.)-38+m45+m32&nbsp;
ptr16:16 (via TSS)-175+mTS42+TS&nbsp;
ptr16:16 (via task gate)-180+mTS43+TS&nbsp;
mem16:16 (far, indirect)--43+m13&nbsp;
mem16:16 (far, PM indirect)--31+m18&nbsp;
mem16:16(call gate, same priv.)-41+m49+m31&nbsp;
mem16:16 (via TSS)-178+m5+TS41+TS&nbsp;
mem16:16 (via task gate)-183+m5+TS42+TS&nbsp;
ptr16:32 (far, 6 byte immed)--12+m13&nbsp;
ptr16:32 (far, PM 6 byte immed)--27+m18&nbsp;
ptr16:32 (call gate, same priv.)--45+m31&nbsp;
ptr16:32 (via TSS)--TS42+TS&nbsp;
ptr16:32 (via task state)--TS43+TS&nbsp;
m16:32 (far, address at dword)--43+m13&nbsp;
m16:32 (far, address at dword)--31+m18&nbsp;
m16:32 (call gate, same priv.)--49+m31&nbsp;
m16:32 (via TSS)--5+TS41+TS&nbsp;
m16:32 (via task state)--5+TS42+TS&nbsp;


Autorzy:
Dryobates
LKS
Vogel
Wirek