Co porównuje jg, jeśli nie ma cmp?

0

tak.PNG

Bez zbędnego gadania, że profesor nic nie wytłumaczył :D ćwiczeniowiec nie pokazał xD

Co porównuje jg jeśli wyżej nie ma cmp?
I jeszcze jak działa div, dzieli bx przez ax i zachowuje wartość w bx?
Czy cos się dzieje z dx przy tym dzieleniu, profesor coś wspominał że tam zostawje wrzucona ucięta wartość, no ale jak to profesor stwierdził że to jest oczywiste.

4

http://unixwiz.net/techtips/x86-jumps.html
http://x86.renejeschke.de/html/file_module_x86_id_35.html

Generalnie jg nic nie porównuje. jg wykonuje skok jeśli odpowiednia flaga procesora jest ustawiona na 1. Natomiast instrukcja sub jest tym samym co instrukcja cmp tylko, że cmp nigdzie nie zapisuje wyniku, ustawia tylko flagi.

3

Flagi procesora są ustawiane przez wiele różnych instrukcji, nie tylko cmp czy sub. Podobnie z flag korzystają nie tylko instrukcje skoku, ale też np adc czy sbb. Dla procesora nie ma specjalnie znaczenia gdzie i jaka instrukcja ustawia flagi, a jaka je wykorzystuje (oprócz tego, że może mieć wewnętrzne optymalizacje np dla popularnej sekwencji cmp+jnz). Instrukcje ustawiające flagi często nie ustawiają wszystkich flag, więc aktualny stan rejestru flag procesora może zależeć od wielu wcześniejszych instrukcji zmieniających flagi.

Natomiast jeśli chodzi o dzielenie to też wystarczy zajrzeć do listingów i sprawdzić opis instrukcji div. Np w listingu podanym przez forumowicza @elwis jest taka strona:

http://x86.renejeschke.de/html/file_module_x86_id_72.html
DIV r/m16 Unsigned divide DX:AX by r/m16, with result stored in AX = Quotient, DX = Remainder.

Jest tam też opisane, że jeśli wynik dzielenia nie zmieści się w docelowym rejestrze to dostaniesz wyjątek procesora (a więc nastąpi kosztowne przerwanie).

1 użytkowników online, w tym zalogowanych: 0, gości: 1