PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

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

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

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

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

PROGRAMOWANIE NISKOPOZIOMOWE

Programowanie niskopoziomowe

Architektura komputerów

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

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

Ćwiczenie nr 6. Programowanie mieszane

Architektura komputerów. Asembler procesorów rodziny x86

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

petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla

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.

Sprzęt i architektura komputerów

Mikrokontroler ATmega32. Język symboliczny

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Architektura komputerów

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

CPU. Architektura FLAGS Bit: dr Paweł Kowalczyk; DPTNS, KFCS UŁ. SI 16 bit. 16 bit. 16 bit.

Architektura Systemów Komputerowych

Sprzęt i architektura komputerów

Architektura komputerów

002 Opcode Strony projektu:

Adam Kotynia, Łukasz Kowalczyk

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

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

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

STRUKTURA I ORGANIZACJA STOSU (FILO- First In Last Out) Rejestry stosu: SS i SP (Stack Segment i Stack Pointer)

Rozszerzalne kody operacji (przykład)

INSTRUKCJE Instrukcje przeniesienia: Instrukcje konwersji: Arytmetyczne instrukcje:

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

organizacja procesora 8086

Wstęp do programowania

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

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

Programowanie Niskopoziomowe

Sterowanie pracą programu

Ćwiczenie 3. Konwersja liczb binarnych

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Architektura komputerów

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe

Microsoft IT Academy kurs programowania

1 Podstawy c++ w pigułce.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie hybrydowe łączenie C/C++ z asemblerem

MATERIAŁY DO ZAJĘĆ II

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Różności w C++ Marek Pudełko

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Lista instrukcji mikroprocesora Programowanie w assemblerze

Programowanie Niskopoziomowe

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Procesory rodziny x86. Dariusz Chaberski

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Programowanie komputera

Proces tworzenia programu:

1 Podstawy c++ w pigułce.

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

1. Wprowadzanie danych z klawiatury funkcja scanf

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

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

1. Asembler i wstawki asemblerowe w C

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMY REZYDENTNE Terminate and State Resident, TSR

2 Przygotował: mgr inż. Maciej Lasota

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Zmienne, stałe i operatory

Programowanie strukturalne język C - wprowadzenie

Technika Próżniowa. Przyszłość zależy od dobrego wyboru produktu. Wydanie Specjalne.

C++ wprowadzanie zmiennych

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

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Wstęp do assemblera MA51

Organizacja typowego mikroprocesora

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

AHDL - Język opisu projektu. Podstawowe struktury języka. Komentarz rozpoczyna znak i kończy znak %. SUBDESIGN

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Algorytmika i Programowanie VBA 1 - podstawy

Język ludzki kod maszynowy

Jerzy Nawrocki, Wprowadzenie do informatyki

Wstęp do programowania. Różne różności

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Załącznik do ćwiczenia w środowisku MASM32 Przesyłanie danych i zarządzanie danymi

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Podstawy programowania C. dr. Krystyna Łapin

Języki i metodyka programowania. Wprowadzenie do języka C

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Języki formalne i techniki translacji

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Transkrypt:

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

PODSTAWOWE ELEMENTY ASEMBLERA Składnia języka Postać wiersza programu Dyrektywy i pseudoinstrukcje Deklaracja zmiennych Zmienne łańcuchowe Odwrotne przechowywanie danych o rozmiarze powyżej jednego bajta Podstawowa instrukcja przeniesienia: instrukcja MOV Modele pamięci Pliki *.COM i *.EXE Pobranie adresu efektywnego

SKŁADNIA JĘZYKA Zbiór znaków alfabetu A-Z; a-z; 0-9; Znaki specjalne: + - _ * / = ( ) [ ] < >,. :? @ $ % Spacje (20H), CR (0DH), NL (0AH) Stałe liczba dwójkowa b, B: 10101b, 10101B liczba ósemkowa q, Q: 1234q, 1234Q liczba dziesiętna d, D:123, 123d, 123D liczba szesnastkowa h, H; pierwszy znak nie może być litery: dopisujemy:12h, 12H, 0AH stałe alfanumeryczne ASCII kody, albo ciągi liter w / : qwer, qwer, 10, 13 Słowa kluczowe Nazwy symboliczne pierwszy znak ma być litera (a..z, A...Z), @, _ lub? : test_1, @asdf,?qwer,a. rozróżniane są tylko pierwsze 31 znaki, nazwa może być 1

POSTAĆ WIERSZA PROGRAMU Z instrukcją właściwą lub wywołania makroinstrukcji: [etykieta:] [przedrostek] [instrukcja] [argument(y)] [;komentarz] Z dyrektywą lub (pseudo) instrukcją: [nazwa] dyrektywa/instrukcja [argument(y)] [;komentarz] Format rozkazów: kod_mnemoniczny [argument_1], [argument_2], [argument_3]

DEREKTYWY I PSEUDOINSTRUKCJE Deklaracja segmentu:segment/ends nazwa SEGMENT [typ] [połączenie] [ nazwa_klasy ] ;... wszystkie instrukcje i dane, należące temu segmentowi... nazwa ENDS Deklaracja zawartości rejestrów segmentowych: ASSUME reg_seg: nazwa[,reg_seg: nazwa...] Np. ASSUME DS:DANE Inne dyrektywy: EQU - deklaracja stałych Np. ROZMIAR EQU 5000 PUBLIC EXTERN INCLUDE

DEKLARACJA ZMIENNYCH DB - dla zmiennych bajtowych ( np. byte, unsigned char), DW - dla zmiennych słowowych (np. integer, short int), DD - dla zmiennych dwusłowowych (np. long int), DF - dla zmiennych trzysłowowych (np. real), DQ - dla zmiennych czterosłowowych (np. double), DT - dla zmiennych pięciosłowowych (np. extended).

ZMIENNE ŁAŃCUCHOWE Deklaracja bezpośrednia CIĄG_LICZB db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 TEKST db 'Cześć!' Znaki db abcdef, 20, 30, xyz Deklaracja poprzez dyrektywy dup (duplicate) TABLICA db 1000 dup (0) TABLICA_2 db 200 dup (1,2,3,4) TABLICA_3 db 100 dup ('stosik')

;============================================================== ; DEMO RÓŻNYCH ZMIENNYCH - DEKLARACJA I STOSOWANIE ; 02.03.2012 T.D-Grekow ;==============================================================.MODEL SMALL.386.DATA char db 10 integer dw 10000010b long dd 1234h real df 0abbacdh double dq 1234abcdh ext dt 0f0f0f0f0fh tab1 db 1000 dup (0) tab2 db 10 DUP (10 dup (5)) tab3 dd 10 dup (32 dup (8 dup ('$'))) temp1 db? temp2 dd?.code MOV ax, @data MOV ds, ax MOV ax, integer MOV al, tab2 MOV eax, tab3 MOV ah, 4ch int 21h END

Adres FFFFFh Odwrotne przechowywanie danych o rozmiarze powyżej jednego bajta Liczby dw 0C83Ah, 700H, 419Dh, 9238h Adres 00000 Liczba dd 1256ABEFh EF AB 56 12 Adres X Adres X+1 Adres X+2 Adres X+3

Modele pamięci Tiny Small Medium Compact Large Huge

Pliki *.COM i *.EXE Pliki typu.exe

Pliki typu.com: Model tiny Przy kompilacja: klucz /t

POBRANIA ADRESU EFEKTYWNEGO Instrukcja LEA Przykład_2.3:... NAPIS DB ALA MA KOTA$... LEA DX, NAPIS Dyrektywa offset:....data text1 db TEKST1 text2 db TEKST2... mov dx, offset text1... mov si, offset text2

TRYBY ADRESOWANIA. OPERATORY ASEMBLERA Adresowanie domyślne (cbw, mul bx) Adresowanie natychmiastowe (ang. immidiate, imm): mov ax, 123h mov al, 123??? mov cl, 123h??? Adresowanie rejestrowe: MOV BX, SI ; przepisz wartość si do bx MOV DX, BX ; przepisz zawartość bx do dx MOV AL, BX ; ŹLE! MOV CS, CX ; ŹLE! MOV DS, CS ; ŹLE!

Adresowanie bezpośrednie Proste: MOV AX, LICZBA MOV AX, [LICZBA] Z przesunięciem: LICZBA DB 15, 03AH, 23, 633, 0A9H, 0EH, 176 MOV AX, [LICZBA+3]

Przykład (demo?).model small.stack.data a db 3ah b db 19 c db?.code start: mov ax, @data mov ds, ax mov al, a mov ah, b add ah, al mov c, ah end

Indirektane adresowanie rejestrowe (SI, DI, BX, BP) NORMALNE mov al, [si] mov al, [di] mov al, [bx] mov al, [bp] ;UWAGA!!! PREDEFINIOWANE mov al, cs:[bx] mov al, ds:[bp] mov al, ss:[si] mov al, es:[di]

DS JEST DOMYŚLNY DLA BX, SI i DI DLA BP DOMYŚNY JEST SS!!!

ADRESACJA BAZOWO INDEKSOWA Normalna Z przesunięciem

Reguły główne BP -> SS R32: Baza Indeks Skalowany rejestr jest rejestrem Indeksowym

Bazowy indeksowany ze skalowaniem Sposoby zapisu adresu: disp [index*n] [base] [index*n] disp [base] [index*n]

Przykład Tablica DW 5, 10, 15, 20, 25... mov ax, [Tablica][esi*2] mov ax, [ebx*2+table] mov eax, [ebx+ecx*4] mov ax, [ebx*8+ecx+4] mov ax, 4 [ecx] [ebx*4]

Operatory Asemblera Operatory arytmetyczne (+, -, *, /, MOD) dodawanie/odejmowanie: mov ax, licz1+licz2-licz3 mnożenie/dzielenie: mov cx, TabSize / ElemSize MOD: reszta z dzielenia całkowitego: mov ah, 14d MOD 3 ; =2 Operatory przesunięcia (SHL, SHR):mov ah, 3 SHL 3 Operatory logiczne: mov ax, konst OR 5 Operatory relacji: mov cx, ((Var LT 100) AND 100) OR (Var GE 100) AND 200)