Instrukcje procesorów rodziny 80x86 (J)

Dryobates

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<B)SF<of</td>
JLEJump if Less or Equal (ze znakiem) (A<=B)ZF=1 lub SF<of</td>
JMPSkok bezwarunkowyBrak
JNAJump if Not Above (A<=B)CF=1 lub ZF=1
JNAEJump if Not Above or Equal (A<B)CF=1
JNBJump if Not Below (A>=B)CF=0
JNBEJump if Not Below or Equal (A>B)CF=0 i ZF=0
JNCJump if Not CarryCF=0
JNEJump if Not Equal (A<>B)ZF=0
JNGJump if Not Greater (ze znakiem) (A<=B)ZF=1 lub SF<of</td>
JNGEJump if Not Greater or Equal (ze znakiem) (A<B)SF <of</td>
JNLJump if Not Less (ze znakiem) (A>=B)SF=OF
JNLEJump if Not Less or Equal(ze znakiem) (A>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.
  Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Jx: jump167+m7+m32
no jump4331 
Jx: near-label--7+m34
no jump--31 
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.
  Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
label: jump188+m9+m82
no jump6455 
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.
  Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
rel8 (relative)157+m7+m3 
rel16 (relative)157+m7+m3 
rel32 (relative)--7+m3 
reg16 near, register indirect)117+m7+m5 
reg32 (near, register indirect)--7+m5 
mem16 (near, mem indirect)18+EA11+m10+m5 
mem32 (near, mem indirect)24+EA15+m10+m5 
ptr16:16 (far, dword immed)--12+m17 
ptr16:16 (far, PM dword immed)--27+m19 
ptr16:16 (call gate, same priv.)-38+m45+m32 
ptr16:16 (via TSS)-175+mTS42+TS 
ptr16:16 (via task gate)-180+mTS43+TS 
mem16:16 (far, indirect)--43+m13 
mem16:16 (far, PM indirect)--31+m18 
mem16:16(call gate, same priv.)-41+m49+m31 
mem16:16 (via TSS)-178+m5+TS41+TS 
mem16:16 (via task gate)-183+m5+TS42+TS 
ptr16:32 (far, 6 byte immed)--12+m13 
ptr16:32 (far, PM 6 byte immed)--27+m18 
ptr16:32 (call gate, same priv.)--45+m31 
ptr16:32 (via TSS)--TS42+TS 
ptr16:32 (via task state)--TS43+TS 
m16:32 (far, address at dword)--43+m13 
m16:32 (far, address at dword)--31+m18 
m16:32 (call gate, same priv.)--49+m31 
m16:32 (via TSS)--5+TS41+TS 
m16:32 (via task state)--5+TS42+TS 

Autorzy:
Dryobates
LKS
Vogel
Wirek

0 komentarzy