Asembler x86/Skoki i instrukcje warunkowe

Z Wikibooks, biblioteki wolnych podręczników.

W języku asemblera x86 skoki i wyrażenia warunkowe są używane do kontrolowania przepływu programu. Instrukcja skoku przenosi sterowanie do innej części programu, natomiast skok warunkowy służy do podjęcia decyzji na podstawie wyniku porównania.

Oto kilka przykładów instrukcji skoku:

JMP: Ta bezwarunkowa instrukcja skoku przekazuje sterowanie do określonej etykiety lub lokalizacji w pamięci. Na przykład etykieta JMP przeskakuje do instrukcji znajdującej się na etykiecie.

JZ/JE: Te instrukcje przeskakują, jeśli ustawiona jest flaga zero. Są one zwykle używane po instrukcji porównania, aby sprawdzić, czy dwa operandy są równe. Na przykład CMP AX, BX porównuje wartości w rejestrach AX i BX, a etykieta JZ przeskakuje do instrukcji znajdującej się na etykiecie, jeśli są one równe.

JNZ/JNE: Te instrukcje przeskakują, jeśli flaga zerowa nie jest ustawiona. Służą do testowania nierówności po instrukcji porównania. Na przykład CMP AX, BX porównuje wartości w rejestrach AX i BX, a etykieta JNZ przeskakuje do instrukcji znajdującej się na etykiecie, jeśli nie są one równe.

JA/JNBE: Te instrukcje przeskakują, jeśli ustawiona jest flaga powyżej lub nie poniżej lub równa. Służą do porównań bez znaku. Na przykład CMP AX, BX porównuje wartości w rejestrach AX i BX, a JA label przeskakuje do instrukcji znajdującej się na etykiecie, jeśli AX jest większe niż BX.

JB/JC/JNAE: Te instrukcje przeskakują, jeśli ustawiona jest flaga poniżej lub przeniesienia. Są również używane do porównań bez znaku. Na przykład CMP AX, BX porównuje wartości w rejestrach AX i BX, a etykieta JB przeskakuje do instrukcji znajdującej się na etykiecie, jeśli AX jest mniejsze niż BX.

JG/JNLE: Te instrukcje przeskakują, jeśli ustawiona jest flaga większa, mniejsza lub równa. Służą do porównań podpisanych. Na przykład CMP AX, BX porównuje wartości w rejestrach AX i BX, a etykieta JG przeskakuje do instrukcji znajdującej się na etykiecie, jeśli AX jest większe niż BX.

JL/JNGE: Te instrukcje przeskakują, jeśli ustawiona jest flaga mniejsza, mniejsza lub równa. Są również używane do porównań podpisanych. Na przykład CMP AX, BX porównuje wartości w rejestrach AX i BX, a etykieta JL przeskakuje do instrukcji znajdującej się na etykiecie, jeśli AX jest mniejsze niż BX.

JMP SHORT: Ta instrukcja jest używana do krótkich skoków, zwykle w obrębie tego samego segmentu kodu. Pozwala na wydajniejszy kod, ponieważ zajmuje mniej miejsca niż zwykła instrukcja JMP.

To tylko kilka przykładów instrukcji skoku i warunków warunkowych w asemblerze x86. Jest ich o wiele więcej, każdy z własnym przeznaczeniem i składnią.