, ASK 1, Politechnika Świętokrzystka, ASK 

ASK 1

ASK 1, Politechnika Świętokrzystka, ASK
[ Pobierz całość w formacie PDF ]
//-->Operacje na stosie i adresowaniePUSH, POP|IN, OUT|Przedrostki|LEA, LES, LDSRozkaz MOV może być użyty w celu uzyskania dostępu do stosu poprzez odpowiednie zaadresowaniepamięci, który używa rejestru BP jako bazowego wskaźnika określającego adres względny wewnątrzsegmentu stosu. Na przykład: MOV AX,[BP+4] ; ładowanie rejestru AX zawartością słowa spod adresuwzględnego BP+4, w segmencie SS. Najczęściej jednak dostęp do stosu realizowany jest za pomocąrozkazów PUSH i POP. PUSH ładuje argument na wierzchołek stosu, POP zdejmuje argument z wierzchołkastosu.Przykład:MOV AX,6PUSH AXPOP BX; odłóż na stos wartość 6; zdejmij argument z wierzchołka stosu (tu: 6) i zapamiętaj go w rejestrze BXRozkazy wejścia-wyjścia - IN, OUTDostęp do stosu - PUSH, POPRozkazy wejścia służą do przesyłania informacji między procesorem a jego otoczeniem. Do komunikowaniasię procesora 8086/88 z jego otoczeniem utworzono 65536 "okienek" (ponumerowanych od O do 65535)zwanych portami. Odczyt z tych portów (lub zapis do nich) odbywa się zawsze za pośrednictwem rejestruakumulatora AL (port - 8 bitowy) lub AX (port 16 - bitowy). W celu wprowadzenia danej do portu służydwuargumentowy rozkaz IN o składni:IN akumulator, nr_portulub w postaci:IN akumulator, rejestr DX.Dowyprowadzenia danej z portu służy rozkaz OUT o składni:OUT nr_portu, akumulatorlub w postaci:OUTrejestr DX, akumulator.Przykłady:IN AL,16IN AX,DXOUT 6D,AXOUT DX,AX;odczytaj do rejestru AL bajt z portu o adresie nr 16;odczytaj do rejestru AX słowo z portu o numerze w rejestrze DX;wyprowadź słowo z rejestru AX do portu o numerze 6D;wyprowadź słowo z rejestru AX do portu o numerze w rejestrze DXPrzedrostki (prefiksy) - CS:, DS:, ES:, SS:, LOCK.Wymuszenia segmentu pamięci z domyślnego, na żądany przez nas segment, dokonamy wpisując wprogramie przed rozkazem nazwę przedrostka, który będzie dla Asemblera zapowiedzią o zmianie segmentupamięci. W programach pisanych dla procesora 8086/88 używa się następujących przedrostków zmianysegmentu: CS:, DS:, ES:, SS: (nazwa rejestru segmentowego ze znakiem dwukropka, umieszczonego po tejnazwie).Przykład użycia przedrostków zmiany segmentu: MOV AX,[35H] rozkaz ten kopiuje do rejestru AX słowo zpamięci, spod adresu wskazywanego przez rejestr segmentowy danych DS, offset (przesunięcie) tegosegmentu pamięci ma wartość 0035H. Zakładając, że w pamięci pod adresem DS: [0035H] znajdują się wtym czasie dane o wartościach 2211, wówczas rejestr AX zawierał będzie liczby 1122 (pamiętajmy oodwrotnym przechowywaniu danych w pamięci). Gdy jednakże chcemy jasno wskazać, iż nie chcemykopiować danych do rejestru AX z domyślnego segmentu, którym jest zawsze segment danych wskazywanyprzez rejestr DS, lecz ze ściśle określonego segmentu, np. z segmentu stosu, wówczas przed rozkazemkopiowania (lub w samym rozkazie kopiowania) musimy wpisać prefiks określający nazwę tego segmentu, októry nam chodzi.DS:MOV AX, [0035]... oznacza, że do rejestru AX wprowadzone zostaną dane spod adresu DS:[0035H].Natomiast zapis...SS:MOV AX, [0053]... oznaczać będzie, że do rejestru AX wprowadzone zostaną dane spod adresu SS:[0035H]; wmakroasemblerach można używać zapisu MOV AX,SS:[0035].Program DEBUG zezwala na zapis: MOV AX,ES[0035], który jest równoważny sekwencji:ES:MOV AX, [0035]...Przedrostek LOCK ma inne zastosowanie niż poprzednio opisywane przedrostki. LOCK jest (jednobajtowym)przedrostkiem powodującym zablokowanie dostępu do pamięci innym procesorom, do czasu wykonanianastępnego rozkazu. Przedrostek LOCK - dla procesorów 8086/88 - może być tylko umieszczony przednastępującymi rozkazami: ADC, ADD, AND, INC, NEG, NOT, OR, SBB, SUB, XCHG, XOR.Przykład:...MOV AL,1LOCK XCHG SEMAFOR,ALTEST AL,AL...LEA to rozkaz powodujący przesłanie przesunięcia argumentu (operandu) do dowolnego 16-bitowegorejestru ogólnego przeznaczenia, wskaźnikowego lub indeksowego. Postać ogólna rozkazu jest następująca:LEA rejestr_16_bitowy, pamięć_16_bitowa. Rozkaz LEA daje dużą elastyczność adresowania pamięci i niewpływa na stan żadnej z flag procesora.Przykłady:...LEA SI,ZRODLOLEA DI,CELMOV CX,200REP MOVSB...Rozkaz LEA potrafi załadować do wskazanego rejestru offset (przesunięcie adresowe) komórki pamięcizaadresowanej dowolnie, niekoniecznie bezpośrednio.RozkazLDSprzesyła z pamięci, 32-bitowy adres logiczny do pary 16-bitowych rejestrów. Bardziej znaczącesłowo (tego 32-bitowego słowa) ładowane jest do rejestru segmentowego DS, mniej znaczące do dowolnegorejestru 16-bitowego, ale nie segmentowego. Rozkaz LDS ma następującą postać ogólną: LDSrejestr_16_bitowy, pamięć_32_bitowa. Na przykład: LOS SI, [SI] oznacza: załaduj do SI stówo spod adresuSI, natomiast do DS, słowo spod adresu SI+2 w bieżącym segmencie DS.RozkazLESprzesyła z pamięci 32-bitowy adres logiczny do pary 16-bitowych rejestrów. Bardziej znaczącesłowo (tego 32-bitowego słowa) ładowane jest do rejestru segmentowego ES, mniej znaczące do dowolnegorejestru 16-bitowego, lecz nie segmentowego. Rozkaz LES ma następującą postać ogólną: LESrejestr_16_bitowy, pamięć _32_bitowa. LES BX, [0300H] oznacza: załaduj do BX słowo spod adresu 0300H,natomiast do ES słowo spod adresu 0302H w bieżącym segmencie DS.Zastosowanie rozkazów LDS i LES w tych programach, w których stosuje się przesyłanie adresów, powodujeskrócenie ich kodów źródłowych, gdyż nie trzeba już używać dodatkowego 16-bitowego rejestru, w celupośrednich przesłań.PUSH, POP|IN, OUT|Przedrostki|LEA, LES, LDScofnijRozkazy operujące na adresach - LEA, LES, LDS [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • dodatni.htw.pl