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.