Architektura komputerów. Asembler procesorów rodziny x86



Podobne dokumenty
Wprowadzenie do Architektury komputerów. Asembler procesorów rodziny x86

Wprowadzenie do Architektury komputerów. Asembler procesorów rodziny x86

Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

INSTRUKCJE Instrukcje przeniesienia: Instrukcje konwersji: Arytmetyczne instrukcje:

Programowanie Niskopoziomowe

Architektura komputerów

Architektura Systemów Komputerowych

Sprzęt i architektura komputerów

Metody Realizacji Języków Programowania

Sprzęt i architektura komputerów

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Lista instrukcji mikroprocesora Programowanie w assemblerze

Architektura komputerów

Programowanie komputera

Programowanie Niskopoziomowe

Struktura i działanie jednostki centralnej

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Sterowanie pracą programu

1. Operacje logiczne A B A OR B

Ćwiczenie 3. Konwersja liczb binarnych

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Załącznik do ćwiczenia w środowisku MASM32 wersji 10 Sterowanie przebiegiem wykonania programu

Programowanie niskopoziomowe

Technika mikroprocesorowa I Wykład 2

Architektura komputerów. Komputer Procesor Mikroprocesor koncepcja Johna von Neumanna

end start ; ustawienie punktu startu programu i koniec instrukcji w assemblerze.

organizacja procesora 8086

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

PROGRAMY REZYDENTNE Terminate and State Resident, TSR

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Organizacja typowego mikroprocesora

Mikrooperacje. Mikrooperacje arytmetyczne

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Podstawy techniki cyfrowej Mikroprocesory. Mgr inż. Bogdan Pietrzak ZSR CKP Świdwin

Mikrokontroler ATmega32. Język symboliczny

Zuzanna Hartleb i Artur Angiel

Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle

Technika mikroprocesorowa

Lista rozkazów mikrokontrolera 8051

Programowanie w asemblerze Architektura procesora

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

Architektura komputerów

Architektura systemów komputerowych Laboratorium 13 Symulator SMS32 Operacje na bitach

Logiczny model komputera i działanie procesora. Część 1.

Programowanie mikrokontrolera 8051

J. Duntemann Zrozumieć Assembler Leo J. Scanlon Assembler 8086/8088/80286 S. Kruk Programowanie w Języku Assembler

Programowanie Niskopoziomowe

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

Lista instrukcji procesora 8051 część 2 Skoki i wywołania podprogramów, operacje na stosie, operacje bitowe

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Adam Kotynia, Łukasz Kowalczyk

Programowalne układy logiczne

Architektura typu Single-Cycle

Jerzy Nawrocki, Wprowadzenie do informatyki

Algorytm mnożenia sekwencyjnego (wariant 1)

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Architektura systemów komputerowych Laboratorium 7 Symulator SMS32 Stos, Tablice, Procedury

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

START: ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec dec)

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Programowanie mikrokontrolerów (CISC)

Pytania. W obecnie wykorzystywanych komputerach osobistych jest stosowana architektura: jednoszynowa. pamięciowo-centryczna.

Ćwiczenie nr 4. Zasady kodowania podprogramów

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Asembler - język maszynowy procesora

Procesory rodziny x86. Dariusz Chaberski

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Lista Rozkazów: Język komputera

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

PROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

Podstawy programowania w języku C

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Języki i paradygmaty programowania

Procesor ma architekturę rejestrową L/S. Wskaż rozkazy spoza listy tego procesora. bgt Rx, Ry, offset nand Rx, Ry, A add Rx, #1, Rz store Rx, [Rz]

Podstawy Informatyki

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Elementy oprogramowania sterowników. Instrukcje podstawowe, funkcje logiczne, układy czasowe i liczenia, znaczniki

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

5. Mikroprocesory 8086 i 8088

, " _/'--- " ~ n\l f.4e ' v. ,,v P-J.. ~ v v lu J. ... j -:;.",II. ,""", ",,> I->~" re. dr. f It41I r> ~ '<Q., M-c 'le...,,e. b,n '" u /.

Architektura komputerów wer. 7

Podstawy programowania w języku C i C++

Liczniki, rejestry lab. 09 Mikrokontrolery 8051 cz. 1

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Lista rozkazów mikrokontrolera 8051 część pierwsza: instrukcje przesyłania danych, arytmetyczne i logiczne

Transkrypt:

Architektura komputerów Asembler procesorów rodziny x86

Architektura komputerów Asembler procesorów rodziny x86

Rozkazy mikroprocesora Rozkazy mikroprocesora 8086 można podzielić na siedem funkcjonalnych grup: 1. Rozkazy przesłania danych w pamięci. 2. Arytmetyczne. 3. Logiczne. 4. Operacje blokowe. 5. Skoki. 6. Operacje kontroli procesora. 7. Rozkazy wejścia/wyjścia.

Rozkazy przesyłania danych Rozkazy przesyłania danych pozwalają działać na danych bajtowych i 16-bitowych (słowa). Specjalnym ich przypadkiem są rozkazy przekazywania danych 32-bitowych, które służą do inicjalizacji rejestru (np. adresowego) i rejestru segmentu pełnym adresem 20-bitowym. Rozkazy przesyłania można podzielić na: uniwersalne, przesyłania adresów, przesyłania rejestru stanu.

MOV MOV - przeznaczony do przesyłania słów lub bajtów w operacjach typu rejestr-pamięć z (do) dowolnych rejestrów. Rozkaz ten może też przesyłać do pamięci dane określone w trybie prostym bez pośrednictwa rejestru. MOV reg, reg - pomiędzy rejestrami MOV mem,reg - z rejestru do pamięci MOV reg,mem - z pamięci do rejestru MOV reg,stała - stałej do rejstru MOV mem,stała - stałej do pamięci MOV reg,seg - z rejestru segmentowego do rejestru 16-bitowego MOV mem,seg - z rejestru segmentowego do pamięci MOV seg,mem - z pamięci do rejestru segmentowego

PUSH, POP PUSH - przesłanie słowa na szczyt stosu. PUSH reg/mem PUSH stała - prześlij 16-bitową wartość z rejestru lub pamięci na stos - prześlij stałą na stos POP - pobranie słowa ze szczytu stosu, a następnie modyfikacja wskaźnika stosu. POP reg,mem - pobierz daną ze stosu do rejestru lub do pamięci

LEA LEA - rozkaz przesyłania do rejestru 16-bitowego adresu efektywnego określonego w trybie odwołania do pamięci. Rejestrem wynikowym operacji może być rejestr uniwersalny, wskaźnik lub rejestr indeksowy. Rozkaz jest przeznaczony do pobierania adresu obiektu z pamięci w celu rutynowych działań na adresach. LEA reg,pamięć - zmienna pamięć jest komórką pamięci, której adres efektywny będzie wyliczony i przesłany do rejestru reg.

Rozkazy arytmetyczne Rozkazy arytmetyczne mikroprocesora 8086 mogą wykonywać cztery podstawowe działania arytmetyczne: dodawanie, odejmowanie, mnożenie i dzielenie, operując na danych 8- i 16-bitowych. Każde z działań może operować na liczbach przedstawionych na trzy sposoby: niekodowanych - zwykła reprezentacja dwójkowa liczb (np. 10000000b), na liczbach kodowanych dziesiętnie (np. 128), liczbach zapisywanych w postaci HEX (np. 80h).

ADD, SUB ADD - dodawanie arytmetyczne dwóch liczb. ADD reg,reg - dodawanie zawartości dwóch rejestrów ADD reg,mem - dodawanie do zawartości rejestru danej z pamięci ADD mem,reg - dodawanie do danej w pamięci zawartości rejestru ADD reg,stała - dodawanie danej natychmiastowej do rejestru ADD mem,stała - dodawanie danej natychmiastowej do danej w pamięci SUB - odejmowanie arytmetyczne dwóch liczb. SUB reg,reg - odejmowanie zawartości dwóch rejestrów SUB reg,mem - odejmowanie od zawartości rejestru danej z pamięci SUB mem,reg - odejmowanie od danej w pamięci zawartości rejestru SUB reg,stała - odejmowanie danej natychmiastowej od rejestru SUB mem,stała - odejmowanie danej natychmiastowej od danej w pamięci

INC, DEC INC - zwiększenie bajtu lub słowa o 1 (inkrementacja). INC reg - inkrementacja rejestru INC mem - inkrementacja komórki w pamięci DEC - zmniejszenie bajtu lub słowa o 1 (dekremantacja). DEC reg - dekrementacja rejestru DEC mem - dekrementacja komórki w pamięci

MUL, IMUL MUL - mnożenie liczb bez znaku. Operacja 8-bitowa pobiera pierwszy argument z AL, natomiast operacja 16-bitowa pobiera argument z AX. Wynik jest przekazywany w pierwszym przypadku do AX, natomiast w drugim przypadku do pary rejestrów AX i DX. MUL reg MUL mem - mnożenie przez rejestr - mnożenie przez zawartość komórki pamięci IMUL - jak wyżej dla liczb ze znakiem. IMUL reg - mnożenie przez rejestr IMUL mem - mnożenie przez zawartość komórki pamięci

DIV, IDIV DIV - dzielenie liczb bez znaku. Operacja dzielenia przez dzielnik 8-bitowy pobiera pierwszy argument z AX, natomiast operacja dzielenia przez dzielnik 16-bitowy pobiera argument z pary rejestrów AX i DX (DX jest starszym słowem wyniku). DIV reg DIV mem - dzielenie przez daną z rejestru - dzielenie przez daną z komórki pamięci IDIV - jak wyżej dla liczb ze znakiem.

Rozkazy logiczne, przesunięcia, obroty Rozkazy logiczne obejmują standardowy zbiór operacji: negacji, sumy, iloczynu i różnicy symetrycznej. Przesunięcia i obroty występują w ośmiu wariantach. Mogą być jedno- i wielokrokowe. Wyniki przekazują w rejestrze lub pamięci. Wariant krokowy odwołuje się do rejestru CL, jako źródła licznika przesunięcia. NOT - negacja każdego bitu liczby. NOT reg - negacja danej w rejestrze NOT mem - negacja danej w pamięci

SHL, SHR SHL - przesunięcie logiczne w lewo. SHL mem,1 - przesunięcie logiczne komórki pamięci o 1 w lewo SHL reg,1 - przesunięcie logiczne zawartości rejestru o 1 w lewo SHL mem,cl - przesunięcie logiczne komórki pamięci o zawartość CL w lewo SHL reg,cl - przesunięcie logiczne komórki rejestru o zawartość CL w lewo SHR - przesunięcie logiczne w prawo. Składnia i argumenty jak dla SHL.

Obroty ROL - obrót w lewo. Składnia jak dla rozkazów SHL, SHR, SAL, SHR. ROR - obrót w prawo. Składnia jak dla rozkazów SHL, SHR, SAL, SHR. RCL - obrót w lewo z uwzględnieniem bitu Carry. Składnia jak dla rozkazów SHL, SHR, SAL, SHR. RCR - obrót w prawo z uwzględnieniem bitu Carry. Składnia jak dla rozkazów SHL, SHR, SAL, SHR. ROL RCL

AND, TEST AND - Iloczyn logiczny argumentów. AND reg,reg - iloczyn logiczny zawartości dwóch rejestrów AND reg,mem - iloczyn logiczny zawartości rejestru i danej w pamięci AND mem,reg - iloczyn logiczny danej w pamięci i zawartości rejestru AND reg,stala - iloczyn logiczny zawartości rejestru i stałej AND mem,stała - iloczyn logiczny danej w pamięci i zawartości rejestru TEST - testowanie wybranych bitów argumentów. Instrukcja ta wykonuje logiczną operację AND na swoich argumentach. Wynik nie jest nigdzie zapamiętywany, ale na jego podstawie ustawiane są znaczniki. TEST reg,reg - testowanie zawartości dwóch rejestrów TEST reg,mem - testowanie zawartości rejestru z daną w pamięci TEST mem,reg - testowanie danej w pamięci z zawartością rejsetru TEST reg,stała - testowanie zawartości rejestru z daną natychmiastową TEST mem,stała - testowanie danej w pamięci z daną natychmiastową

OR, XOR OR - suma logiczna argumentów. OR reg,reg - suma logiczna zawartości dwóch rejestrów OR reg,mem - suma logiczna zawartości rejestru i danej w pamięci OR mem,reg - suma logiczna danej w pamięci zawartością rejestru OR reg,stała - suma logiczna zawartości rejestru i danej natychmiastowej OR mem,stała - suma logiczna danej w pamięci z daną natychmiastową XOR - różnica symetryczna argumentów (suma modulo 2). Składnia jak dla instrukcji OR.

Skoki Rozkazy skoków można podzielić na: skoki zwykłe i warunkowe, wywołania podprogramów, powroty z procedur, rozkazy tworzenia iteracji, przerwania programowe.

A i B to dwie dowolne wartości, które porównujemy. Wykonanie instrukcji CMP powoduje ustawienie odpowiednich flag procesora (OF, SF, ZF), a to właśnie na tej podstawie są wykonywane instrukcje skoku Skoki warunkowe JE/JZ JL/JNGE JLE/JNG JB/JNAE JBE/JNA JNE/JNZ JNL/JGE JNLE/JG JNB/JAE JNBE/JA Skok, gdy równy/zero Skok, gdy mniejszy/nie równy lub nie większy Skok, gdy mniejszy lub równy/nie większy Skok, gdy poniżej/nie powyżej lub nie równo Skok, gdy poniżej lub równo/nie powyżej Skok, gdy nie równy/nie zero Skok, gdy nie mniejszy/większy lub równy Skok, gdy nie mniejszy lub równy/większy Skok, gdy nie poniżej/powyżej lub równo Skok, gdy nie poniżej lub równo/powyżej Po rozkazie skoku należy podać miejsce w programie gdzie należy skoczyć (najczęściej jest to ETYKIETA) Powyższe rozkazy najczęściej występują po instrukcji porównania CMP CMP A, B (A rejestr/adres, B rejestr/adres/stała)

Inne skoki CALL JMP RET IRET Skok do podprogramu (wywołanie procedury) Skok bezwarunkowy Powrót z podprogramu (procedury) Powrót z procedury obsługi przerwania Procedury <nazwa_procedury> PROC ;wszystkie rejestry wykorzystywane w procedurze - na stos (push) ; TUTAJ KOD PROCEDURY ;wszystkie rejestry wykorzystywane w procedurze - zdjąć ze stosu (pop) RET <nazwa_procedury> ENDP WYWOŁANIE PROCEDURY: CALL <nazwa_procedury>

UWAGA: Rozkazy kontroli iteracji wykorzystują rejestr CX jako licznik iteracji. Należy zatem pamiętać, aby w pętlach (bo do tego głównie będą wykorzystywane tego rodzaju skoki) uważać z modyfikacją rejestru CX. Poza tym zasięg tych skoków to -128 do +127 bajtów. Etykieta, do której wykonywany jest skok powinna się znajdować na ogół powyżej instrukcji kontroli iteracji. Rozkazy kontroli iteracji LOOP - zmniejsza CX o 1 i wykonuje skok, gdy CX!= 0. LOOP nazwa_etykiety - skok do etykiety, gdy CX!= 0 LOOPZ - jak LOOP, tylko może wykonać dodatkowo skok, gdy bit zera jest ustawiony. LOOPNZ - jak LOOP, tylko może wykonać dodatkowo skok, gdy bit zera nie jest ustawiony. JCXZ - rozkaz skoku warunkowego, który jest wykonywany, gdy CX jest równy zero.

Rozkazy przerwań programowych INT - przerwanie programowe. INT numer_przerwania ;wywołanie przerwania o podanym numerze RET - powrót z podprogramu. RET IRET - powrót z podprogramu obsługi przerwania. IRET

Dyrektywa ptr Dyrektywa ptr mówi procesorowi o tym jak ma traktować wskazaną komórkę pamięci byte ptr jako bajt 8 bit word ptr jako słowo 16 bit dword ptr jako podwójne słowo 32 bit Przykłady: Pamiętać o little endian! Młodszy bajt liczby jest umieszczony pod adresem o mniejszej wartości add al, byte ptr [ds:bx] mov byte ptr [si], 3 mov ax, word ptr [es:bx]

Funkcje DOSu 01h - Wprowadzenie kodu ASCII ze std wejścia. Argumenty: AH=01h, kod ASCII w AL. 02h - Wypisanie kodu ASCII na std wyjście Argumenty: AH=02h, DL= kod ASCII 09h - Wypisanie łańcucha znaków Argumenty: AH=09h, DS:DX adres łańcucha zakończonego $ 0ah Pobranie łańcucha znaków ze std wejścia do bufora, Argumenty: AH=0ah, DS:DX adres bufora