Ograniczenia instrukcji MOV

Instrukcja MOV może przenosić zawartość prawie każdego rejestru do

dowolnego innego. Jednak prawdopodobnie ze względu na ograniczoną liczbę

tranzystorów w kostkach układów scalonych 8086 oraz 8088 MOV nie może

dokonać wszelkich możliwych przeniesień. Poniżej podana jest lista ograniczeń:

1. MOV nie może przenosić danych z jednej komórki pamięci do innej.

Innymi słowy instrukcja typu MOV [SI], [BX] jest nielegalna. Oba

operandy mogą określać dane pamięciowe, ale nie mogą tego robić

jednocześnie.

2. MOV nie może przenosić zawartości jednego rejestru segmentowego do

innego. Instrukcja typu MOV CS, SS jest nielegalna, mimo iż taka

instrukcja mogłaby się przydać - po prostu czynność taka nie może być

wykonana.

3. MOV nie może przenosić danych natychmiastowych do rejestru

segmentowego. Nie możesz napisać MOV CS, OB800H. Taka instrukcja

byłaby również przydatna, ale niestety jest również niewykonalna.

4. MOV nie może przenosić jednej z 8-bitowych polówek rejestru do

rejestrów 16-bitowych, i odwrotnie. Jeśli będziesz pamiętał o pilnowaniu

zgodności rozmiarów operandów źródła i przeznaczenia, unikniesz wielu

różnych kłopotów.

Przedstawione ograniczenia oczywiście dotyczą sytuacji całkiem logicznych.

Nie mówię tu o posunięciach całkowicie bez sensu, jak np. przenoszenie

zawartości rejestru czy pamięci do danych natychmiastowych, przenoszenie

danych natychmiastowych do danych natychmiastowych, określanie rejestru

ogólnego przeznaczenia jako przechowującego adres segmentu, czy też

określanie rejestru segmentowego jako zawierającego przesunięcie adresu. Na

rysunku 6.3 przedstawiono rozmaite niedopuszczalne warianty instrukcji MOV

ilustrujące podane ograniczenia, a także sytuacje nonsensowne.