Operacje arytmetyczne



Pobieranie 192.02 Kb.
Strona2/3
Data27.10.2017
Rozmiar192.02 Kb.
1   2   3

MOV przeznaczenie,źródło;

postać ogólna:

przykład:

mov akumulator,rejestr;

mov A,R0;
(kopiowanie zawartości rejestru R0 do akumulatora)

mov akumulator,dana natychmiastowa;

mov A,#5;
(kopiowanie wartości natychmiastowej 5 do akumulatora)

mov akumulator,pamięć (pośrednio);

mov A,@R0;
(kopiowanie wartości z bajtu pamięci wskazywanego przez rejestr R0 do akumulatora)

mov akumulator,pamięć (bezpośrednio);

mov A,40H;
(kopiowanie wartości z 40H bajtu pamięci do akumulatora)

mov rejestr,akumulator;

mov R2,A;
(kopiowanie wartości z akumulatora do rejestru R2)

mov rejestr,pamięć (bezpośrednio);

mov R6,40H;
(kopiowanie wartości z 40H bajtu pamięci do rejestru R2)

mov rejestr,dana natychmiastowa;

mov R4,#72;
(kopiowanie wartości natychmiastowej 72 do rejestru R4)

mov pamięć (bezpośrednio),akumulator;

mov 40H,A;
(kopiowanie zawartości akumulatora 72 do 40H bajtu pamięci)

mov pamięć (bezpośrednio),rejestr;

mov 50H,R0;
(kopiowanie zawartości rejestru R0 do 50H bajtu pamięci)

mov pamięć (bezpośrednio),pamięć (pośrednio);

mov 63H,@R0;
(kopiowanie wartości z bajtu pamięci wskazywanego przez rejestr R0 do 63H bajtu pamięci)

mov pamięć (bezpośrednio),dana natychmiastowa;

mov 40H,#72;
(kopiowanie wartości natychmiastowej 72 do 40H bajtu pamięci)

mov pamięć (pośrednio),akumulator;

mov @R0,A;
(kopiowanie zawartości akumulatora do bajtu pamięci wskazywanego przez rejestr R0)

mov pamięć (pośrednio),pamięć (bezpośrednio);

mov @R0,70H;
(kopiowanie 70H bajtu pamięci do bajtu pamięci wskazywanego przez rejestr R0)

mov pamięć (pośrednio),dana natychmiastowa;

mov @R1,#22;
(kopiowanie danej natychmiastowej 22 do bajtu pamięci wskazywanego przez rejestr R1)

mov DPTR,16 bitowa dana natychmiastowa;

mov DPTR,#200H;
(kopiowanie danej natychmiastowej 200H do 16 bitowego rejestru adresowego DPTR)

MOVC - KOPIOWANIE Z PAMIĘCI PROGRAMU

Instrukcja kopiuje zawartość źródła do akumulatora, zawartość źródła nie ulega zmianie. Instrukcja ta umożliwia dostęp do pełnych 64kb możliwej do zaadresowania przez 8051 pamięci.



MOVC akumulator,źródło;

postać ogólna:

przykład:

movc akumulator,@przesunięcie+PC;

movc A,@A+PC;
(kopiowanie 1 bajtu pamięci wskazywanego przez rejestr PC i A)

movc akumulator,@przesunięcie+DPTR;

movc A,@A+DPTR;
(kopiowanie 1 bajtu pamięci wskazywanego przez rejestr DPTR i A)

mov DPTR,#100H; - załadowanie adresu 100H do rejestru DPTR

mov A,#5; - załadowanie wartości natychmiastowej (5) do akumulatora

movc A,@A+DPTR; - skopiowanie do akumulatora bajtu danych z adresu 105H (DPTR + A)



MOVX - KOPIOWANIE Z/DO PAMIĘCI ZEWNĘTRZNEJ

Instrukcja kopiuje zawartość źródła do przeznaczenia, zawartość źródła nie ulega zmianie. W zależności od użytych rejestrów adresowych umożliwia dostęp do bloku 256 bajtów pamięci lub do pełnego obszaru adresowego 64kb.



MOVX przeznaczenie,źródło;

postać ogólna:

przykład:

movx akumulator,@rejestr;

movx A,@R0;
(kopiowanie 1 bajtu pamięci wskazywanego przez rejestr R0 do akumulatora- dostęp do bloku pamięci 256 bajtów)

movx akumulator,@rejestr;

movx A,@DPTR;
(kopiowanie 1 bajtu pamięci wskazywanego przez rejestr DPTR do akumulatora- dostęp do pełnego obszaru adresowego)

movx @rejestr,akumulator;

movx @R1,A;
(kopiowanie 1 bajtu z akumulatora do bajtu pamięci wskazywanego przez rejestr R1 - dostęp do bloku pamięci 256 bajtów)

movx @rejestr,akumulator;

movx @DPTR,A;
(kopiowanie 1 bajtu z akumulatora do bajtu pamięci wskazywanego przez rejestr DPTR - dostęp do pełnego obszaru adresowego)

mov DPTR,#1000H; - załadowanie adresu 1000H do rejestru DPTR

movx A,@DPTR; - skopiowanie do akumulatora bajtu danych z adresu 1000H



POP - ZDEJMOWANIE BAJTU DANEJ ZE STOSU

Instrukcja zdejmuje jeden bajt ze stosu i umieszcza go w przeznaczeniu.

W momencie wywołania instrukcji POP z wierzchołka stosu kopiowany jest 1 bajt danych (do przeznaczenia) a następnie zmniejszana o 1 jest zawartość rejestru SP (nowy wierzchołek stosu).

POP przeznaczenie;


postać ogólna:

przykład:

pop pamięć (bezpośrednio);

pop 45H;
(zdjęcie jednego bajtu ze stosu i umieszczenie go pod adresem 45H - dopuszczalny tylko adres 8 bitowy)

pop bajt rejestru DPTR;

pop DPH;
pop DPL
(zdjęcie ze stosu bajtu danych do rejestru DPH a następnie do DPL)

pop akumulator;

pop ACC;
(zdjęcie ze stosu bajtu danych do akumulatora adresowanego bezpośrednio (patrz akumulator) )

pop rejestr B;

pop B;
(zdjęcie ze stosu bajtu danych do rejestru B)

Instrukcją odwrotną do POP jest PUSH. Przy pracy ze stosem NALEŻY pamiętać o kolejności ułożenia elementów na stosie.

PUSH - WYSŁANIE BAJTU DANEJ NA STOS

Instrukcja wysyła jeden bajt podany jako źródło na stos, zawartość źródła nie ulega zmianie.

W momencie wywołania instrukcji PUSH zawartość rejstru SP jest zwiększana o 1 i pod tak uzyskany adres (nowy wierzchołek stosu) przenoszona jest dana (źródło).

PUSH źródło;


postać ogólna:

przykład:

push pamięć (bezpośrednio);

push 45H;
(kopiowanie 1 bajtu pamięci z adresu 45H na wierzchołek stosu - dopuszczalny tylko adres 8 bitowy)

push bajt rejestru DPTR;

push DPL;
push DPH
(kopiowanie 1 bajtu z rejestru DPL i DPH na wierzchołek stosu)

push akumulator;

push ACC;
(kopiowanie 1 bajtu z akumulatora adresowanego bezpośrednio (patrz akumulator) na wierzchołek stosu)

push rejestr B;

push B;
(kopiowanie zawartości rejestru B na wierzchołek stosu)

Instrukcja ta najczęściej przydaje się w sytuacji gdy chcemy na chwilę przechować zawartość np rejestru DPTR (np. przed wykonaniem procedury/podprogramu) a następnie po wykonaniu jakichś czynności ją przywrócić. Instrukcją odwrotną do PUSH jest POP. Przy pracy ze stosem NALEŻY pamiętać o kolejności ułożenia elementów na stosie.

XCH - ZAMIANA DANYCH

Instrukcja ta wymienia zawartości akumulatora i źródła.



XCH akumulator,źródło;

postać ogólna:

przykład:

xch akumulator,rejestr;

xch A,R0;
(wymień zawartość rejestru R0 z zawartością akumulatora)

xch akumulator,pamięć (pośrednio);

xch A,@R0;
(wymień zawartość z bajtu pamięci wskazywanego przez rejestr R0 z zawartością akumulatora)

xch akumulator,pamięć (bezpośrednio);

xch A,40H;
(wymień zawartość z 40H bajtu pamięci z zawartością akumulatora)

mov A,#50; - wpisz do akumulatora liczbę 50

mov R0,#6; - wpisz do rejestru R0 liczbę 6

xch A,R0; - zamień zawartości
W powyższym przykładzie liczba zawarta w akumulatorze (50) zostanie skopiowana do rejestru R0, liczba która znajdowała się pierwotnie w rejestrze R0 (6) zostanie skopiowana do akumulatora.

Po wykonaniu ww programu: A = 6 , R0 = 50.



XCHD - ZAMIANA MŁODSZEJ POŁÓWKI DANYCH

Instrukcja dokonuje zamiany młodszej połówki danych akumulatora i źródła.



XCHD akumulator,źródło;

postać ogólna:

przykład:

xchd akumulator,pamięć (pośrednio);

xchd A,@R0;
(wymień młodszą połówkę z bajtu pamięci wskazywanego przez rejestr R0 z zawartością młodszej połówki akumulatora)

mov R0,#40H - wpisz do R0 adres 40H

xchd A,@R0 – zamiana

Załóżmy, że pod adresem 40H w pamięci jest umieszczona liczba 10101110B (dwójkowo) a w akumulatorze 11000000B (dwójkowo) po wykonaniu instrukcji xchd A,@R0; w akumulatorze znajdzie się liczba: 11001110B (dwójkowo) a pod adresem 40H w pamięci będzie liczba 10100000B (dwójkowo).

Operacje bitowe

ANL (ILOCZYN LOGICZNY)

Instrukcja wykonuje operację iloczynu (mnożenia) logicznego na zawartości

flagi C daną ze źródła, źródło nie ulega zmianie

ANL C,źródło;


postać ogólna:

przykład:

anl flaga C,bit;

anl C,P1.3;
(iloczyn logiczny bitu 3 z portu P1 oraz flagi C)

anl flaga C,bit;

anl C,/P1.3;
(iloczyn logiczny negacji bitu 3 z portu P1 oraz flagi C)

W systemie dwójkowym przy dwóch operandach dopuszczalne są następujące możliwości mnożeń:
0*0=0

0*1=0


1*0=0

1*1=1


CLR (CLEAR - CZYSZCZENIE)

Instrukcja czyści wybrany bit przeznaczenia.



CLR przeznaczenie;

postać ogólna:

przykład:

clr flaga C;

clr C;
(czyszczenie flagi C)

clr bit;

clr P1.2;
(wyczyszczenie bitu 2 w porcie P1)

clr bit akumulatora;

clr ACC.2;
(wyczyszczenie bitu 2 w akumulatorze)

Czyszczenie bitu polega na wpisaniu do niego liczby 0 (zero).

CPL (NEGACJA)

Instrukcja neguje stan wybranego bitu przeznaczenia.



CPL przeznaczenie;

postać ogólna:

przykład:

cpl flaga C;

cpl C;
(negowanie zawartości flagi C)

cpl bit;

cpl P1.2;
(negowanie bitu 2 w porcie P1)

W czasie wykonywania instrukcji CPL bit jest negowany (0 zamieniane na 1 , 1 zamieniane na 0).

MOV (KOPIOWANIE BITU)

Instrukcja wykonuje kopię bitu ze źródła w miejscu przeznaczenia.



MOV przeznaczenie,źródło;

postać ogólna:

przykład:

mov flaga C,bit;

mov C,P1.3;
(kopiowanie bitu 3 z portu P1 do flagi C)

mov bit,flaga C;

mov P1.3,C;
(kopiowanie stanu bitu flagi C do bitu 3 z portu P1)

ORL (SUMA LOGICZNA)

Instrukcja wykonuje operację sumy logicznej na zawartości flagi C daną ze źródła, źródło nie ulega zmianie



ORL C,źródło;

postać ogólna:

przykład:

orl flaga C,bit;

orl C,P1.3;
(suma logiczna bitu 3 z portu P1 oraz flagi C)

orl flaga C,bit;

orl C,/P1.3;
(suma logiczna negacji bitu 3 z portu P1 oraz flagi C)

W systemie dwójkowym przy dwóch operandach dopuszczalne są następujące możliwości sumowań logicznych:
0+0=0

0+1=1


1+0=1

1+1=1


SETB (USTAWIENIE BITU)

Instrukcja ustawia wybrany bit przeznaczenia.



SETB przeznaczenie;

postać ogólna:

przykład:

setb flaga C;

setb C;
(ustawienie flagi C)

setb bit;

setb P1.2;
(ustawienie bitu 2 w porcie P1)

setb bit akumulatora;

setb ACC.2;
(ustawienie bitu 2 w akumulatorze)

Ustawienie bitu polega na wpisaniu do niego liczby 1 (jeden).

JC / JNC (SKOK WARUNKOWY ZALEŻNY OD STANU FLAGI C)

Instrukcja wykona skok pod podaną etykietę jeśli jest spełniony określony warunek.



JC / JNC etykieta;

postać ogólna:

przykład:

jc etykieta;

jc KONIEC;
(skok do etykiety KONIEC gdy flaga C jest ustawiona)

jnc etykieta;

jnc KONIEC;
(skok do etykiety KONIEC gdy flaga C jest wyzerowana)

JB / JNB / JBC (SKOK WARUNKOWY ZALEŻNY OD STANU WYBRANEGO BITU)

Instrukcja wykona skok pod podaną etykietę jeśli jest spełniony określony warunek.



JB / JNB / JBC bit,etykieta;

postać ogólna:

przykład:

jb bit,etykieta;

jb P1.2,KONIEC;
(skok do etykiety KONIEC gdy bit 2 portu P1 jest ustawiony)

jnb bit,etykieta;

jnb P1.2,KONIEC;
(skok do etykiety KONIEC gdy bit 2 portu P1 jest wyzerowany)

jbc bit,etykieta;

jbc P1.2,KONIEC;
(skok do etykiety KONIEC gdy bit 2 portu P1 jest ustawiony oraz dodatkowo wyzerowanie testowanego bitu)

Operacje sterujące

ACALL / LCALL (SKOK DO PROCEDURY/PODPROGRAMU)

Instrukcja ta wykonuje bezwarunkowy skok do procedury/podprogramu oznaczonego etykietą.



ACALL / LCALL etykieta;

postać ogólna:

przykład:

acall etykieta;

acall ROB;
(skok do miejsca oznaczonego etykietą ROB)

lcall etykieta;

lcall ROB;
(skok do miejsca oznaczonego etykietą ROB)

Instrukcja ACALL służy to wykonywania skoków do bezpośredniego sąsiedztwa, natomiast LCALL może wykonywać skok do dowolnego adresowalnego obszaru (pełne 64 kb).

CJNE (SKOK WARUNKOWY ZALEŻNY OD SPRAWDZANEGO WARUNKU)

Instrukcja wykona skok pod podaną etykietę jeśli jest spełniony określony warunek.



CJNE warunekA,warunekB,etykieta;

postać ogólna:

przykład:

cjne akumulator,adres (bezpośrednio),etykieta;

cjne A,40H,KONIEC;
(porównanie zawartości akumulatora z 40H bajtem pamięci, jeśli są różne następuje skok pod etykietę KONIEC, jeśli są równe skok nie jest wykonywany)

cjne akumulator,dana natychmiastowa,etykieta;

cjne A,#123,KONIEC;
(porównanie zawartości akumulatora z daną natychmiastową, jeśli są różne następuje skok pod etykietę KONIEC, jeśli są równe skok nie jest wykonywany)

cjne rejestr,dana natychmiastowa,etykieta;

cjne R4,#13,KONIEC;
(porównanie zawartości rejestru R4 z daną natychmiastową, jeśli są różne następuje skok pod etykietę KONIEC, jeśli są równe skok nie jest wykonywany)

cjne adres (pośrednio),dana natychmiastowa,etykieta;

cjne @R0,#23,KONIEC;
(porównanie zawartości bajtu pamięci wskazywanego przez rejestr R0 z daną natychmiastową, jeśli są różne następuje skok pod etykietę KONIEC, jeśli są równe skok nie jest wykonywany)

DJNZ (ZMNIEJSZ / SPRAWDŹ WARUNEK / WYKONAJ SKOK)

Instrukcja zmniejsza zawartość źródła (o 1) sprawdza czy źródło równe jest 0 (zero) jeśli nie to wykonywany jest skok pod podaną etykietę.



DJNZ źródło,etykieta;

postać ogólna:

przykład:

djnz rejestr,etykieta;

djnz R6,KONIEC;
(odjęcie 1 od zawartości rejestru R6, jeśli po odejmowaniu zawartość rejestru jest różna od zera wykonywany jest skok pod podaną etykietę)

djnz adres (bezpośrednio),etykieta;

djnz 50H,KONIEC;
(odjęcie 1 od bajtu pamięci znajdującego się pod adresem 50H, jeśli po odejmowaniu zawartość bajtu pamięci jest różna od zera wykonywany jest skok pod podaną etykietę)

JMP / AJMP / LJMP / SJMP (SKOK BEZWARUNKOWY)

Instrukcja ta wykonuje bezwarunkowy skok do wybranego miejsca programu.



JMP / AJMP / LJMP / SJMP miejsce;

postać ogólna:

przykład:

jmp miejsce;

jmp @A+DPTR;
(skok pod adres uzyskany po dodaniu zawartości rejestrów DPTR i A)

ajmp etykieta;

ajmp ROB;
(skok do miejsca oznaczonego etykietą ROB - skok krótki)

ljmp etykieta;

ljmp ROB;
(skok do miejsca oznaczonego etykietą ROB - skok długi - dostępny pełny obszar adresowy 64kb)

sjmp etykieta;

sjmp ROB;
(skok do miejsca oznaczonego etykietą ROB - skok krótki tylko pod adresy z zakresu 0-255)

JZ / JNZ (SKOK WARUNKOWY ZALEŻNY OD STANU AKUMULATORA)

Instrukcja wykona skok pod podaną etykietę jeśli jest spełniony określony warunek.



JZ / JNZ etykieta;

postać ogólna:

przykład:

jz etykieta;

jz KONIEC;
(skok do etykiety KONIEC gdy zawartość akumulatora wynosi zero)

jnz etykieta;

jnz KONIEC;
(skok do etykiety KONIEC gdy zawartość akumulatora jest różna od zera)

RET (POWRÓT Z PROCEDURY/PODPROGRAMU)

Instrukcja ta kończy działanie procedury/podprogramu.



RET;

postać ogólna:

przykład:

ret;

ret;
(powrót z podprogramu)

RETI (POWRÓT Z OBSŁUGI PRZERWANIA)

Instrukcja ta kończy działanie procedury przerwania sd hsjd sdj link.



RETI;

postać ogólna:

przykład:

reti;

reti;
(powrót z obsługi przerwania)

Inne:

NOP (NIC NIE RÓB)

Instrukcja ta nie robi nic.



NOP;

postać ogólna:

przykład:

nop;

nop;

Zastosowania instrukcji NOP:

- wprowadzanie drobnych opóźnień w programie. Pomimo tego, że instrukcja nic nie robi to i tak procesor potrzebuje odrobinę czasu na jej pobranie i interpretację dzięki temu uzyskujemy drobne opóźnienie w programie

- wspomaganie tworzenia kodu samomodyfikującego się

MAPA PAMIĘCI

Mapa pamięci omawianego na zajęciach układu mikroprocesorowego.



Pamięć programu
Pamięć danych

Pamięć wewnętrzna

Directory: files -> 146935 -> public
public -> Kolejne kroki tej metody to
public -> Podstawy o czym będziemy mówić? Krótka historia C++
public -> Zadania z bramek logicznych I projektowania układów
public -> Liczby rzeczywiste, wprowadzane do komputera w zapisie dziesiętnym, podlegają automatycznemu przetworzeniu do jednej z postaci przewidzianych w standardzie ieee 754-2008
public -> Na dzisiejszych ćwiczeniach zostanie pokazany proces generowania kodu na podstawie przykładowego diagramu klas opisującego sklep inetrnetowy
public -> Przeliczanie liczb w systemie dziesiętnym na kod U2 I odwrotnie
public -> 1. Operacje arytmetyczne na liczbach w różnych systemach liczbowych dodawanie, odejmowanie, mnożenie i dzielenie
public -> Laboratorium nr 11
public -> Instrukcja switch I typ wyliczeniowy
public -> Projekty do wyboru

Pobieranie 192.02 Kb.

Share with your friends:
1   2   3




©operacji.org 2020
wyślij wiadomość

    Strona główna