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

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

Ćwiczenie nr 6. Programowanie mieszane

Programowanie Niskopoziomowe

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

Sprzęt i architektura komputerów

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.

Architektura komputerów. Asembler procesorów rodziny x86

Programowanie niskopoziomowe

Programowanie Niskopoziomowe

Adam Kotynia, Łukasz Kowalczyk

PROGRAMY REZYDENTNE Terminate and State Resident, TSR

Ćwiczenie 3. Konwersja liczb binarnych

Sprzęt i architektura komputerów

1. Pobrać plik masm.zip (Macro Assembler 6.15 & Segmented Executable Linker 5.60) (

Zuzanna Hartleb i Artur Angiel

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

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

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Mikrokontroler ATmega32. Język symboliczny

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Wykład 4. Środowisko programistyczne

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

PROGRAMOWANIE NISKOPOZIOMOWE

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

Ćwiczenie nr 1. Wprowadzenie do programowania w języku asemblera

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

Jerzy Nawrocki, Wprowadzenie do informatyki

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

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

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

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

1 Podstawy c++ w pigułce.

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

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

imei Instytut Metrologii, Elektroniki i Informatyki

Sterowanie pracą programu

Struktura programu w asemblerze mikrokontrolera 8051

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

1 Podstawy c++ w pigułce.

Struktura i działanie jednostki centralnej

2. Architektura mikrokontrolerów PIC16F8x... 13

Architektura komputerów

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

Architektury Komputerów - Laboratorium Informatyka III rok studia dzienne

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

Programowanie w języku C++ Grażyna Koba

Lista instrukcji mikroprocesora Programowanie w assemblerze

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

Informator techniczny

Programowanie Niskopoziomowe

Programowanie niskopoziomowe

A Machine Architecture that is Really Intuitive and Easy. Dane: notacja dwójkowa, zapis w kodzie dopełnieniowym

Programowanie w języku Python. Grażyna Koba

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Liczniki, rejestry lab. 09 Mikrokontrolery 8051 cz. 1

Ćwiczenie nr 4. Zasady kodowania podprogramów

Podstawy Informatyki Języki programowania c.d.

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

Kompilator języka C na procesor 8051 RC51 implementacja

Zarządzanie pamięcią operacyjną

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Podstawy programowania

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

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

Podstawy Informatyki Języki programowania

Architektura komputerów

Wstęp do programowania. Wykład 1

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Akademia Górniczo- Hutmicza w Krakowie Katedra Elektroniki WIET

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Organizacja typowego mikroprocesora

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

organizacja procesora 8086

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Programowanie na poziomie sprzętu. Programowanie w Windows API

Programowanie komputera

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Programowanie w asemblerze Linkowanie

Podstawy programowania skrót z wykładów:

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Instytut Teleinformatyki

Programowanie i techniki algorytmiczne

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Zadanie nr 2: Arytmetyka liczb zespolonych

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

1. Asembler i wstawki asemblerowe w C

M++ Compiler 1.5 ALFA. Autor: Michał Michzimny Zimniewicz

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Algorytm. a programowanie -

C++ - [1-3] Debugowanie w Qt Creator

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

PAMIĘĆ OPERACYJNA...107

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

Transkrypt:

Przedmiot : Programowanie w języku wewnętrznym Ćwiczenie nr 4 str. 1. 1. Użycie Asemblera. Polecenie JMP. Polecenie nakazuje procesorowi wykonywanie kodu programu od nowego innego miejsca. Miejsce to jest identyfikowane poprze etykietę, która na etapie kompilacji jest przekształcane przez asembler na postać adresu. Jeżeli skok jest wykonywany do etykiety w obrębie aktualnego segmentu to przesunięcie etykiety jest ładowane do rejestru IP. Natomiast w przypadku skoku do innego segmentu także adres tego segmentu jest umieszczany w rejestrze CX. Formaty polecenia JMP : JMP SHORT miejsce_docelowe JMP NEAR PTR miejsce_docelowe JMP FAR PTR miejsce_docelowe Polecenie JMP umożliwia skok do etykiety w aktualnej procedurze, skok do innej procedury, do iinego segmentu, do adresu poza aktualnym programem oraz do dowolnego adresu w pamięci RAM i ROM. Przykłady użycia polecenia JMP : jmp K1 : near - miejsce docelowe w aktualnym segmencie jmp near ptr K1 : near - miejsce docelowe w aktualnym segmencie jmp short K2 : short skok do miejsca w zakresie od -128 do 127 bajtów jmp far ptr K3 : far - skok do innego programu Opis operatorów polecenia JMP : short skok do etykiety w zakresie od -128 do 127 bajtów od adresu kolejnego rozkazu. Do rejestru IP jest dodawana 8-bitowa wartość przemieszczenia. near ptr skok do etykiety w dowolnym miejscu aktu1alnego segmentu kodu. W rejestrze IP umieszczana jest 16-bitowa wartość przemieszczenia. far ptr skok do etykiety w inny segmencie. Adres segmentu etykiety umieszczany jest w rejestrze CS, a jej przesunięcie w rejestrze IP. Polecenie LOOP. Polecenie to jest prostym sposobem wykonywania określonego bloku kodu wiele razy. Rejestr CX jest używany jako licznik, który jest zmniejszany przy każdym wykonaniu pętli. Loop odejmuje wartość 1 z rejestru CX, jeżeli CX jest jest większy od zera, to sterowanie jest przekazywane do miejsca docelowego. mov cx, 5 start:... loop start Po osiągnięciu przez licznik wartości 0 skok nie jest wykonywany i wykonywany jest dalszy kod programu. Znacznik Zero nie jest zmieniany pomimo pomimo osiągnięcia przez CX wartości 0. Przykład 1. Program zlicza do 5 inkrementując rejestr AX. mov ax, 0 : ustawienie AX na 0 mov cx, 5 : ustawienie licznika pętli inc ax : inkrementacja rejestru AX 1

loop powtarzanie inkrementacji do momentu osiągnięcia przez CX wartości 0 Przykład 2. Program drukuje na ekranie znak * str. 2. mov cx, 2*10 : ustawienie licznika mov ah, 2 : funkcja Dos wyświetlająca znak mov dl, '*' : wyświetlanie znaku * : wywołanie Dos loop petla Przykład 3. Zmiana licznika pętli. Zmiana licznika pętli w trakcie wykonywania pętli nie jest dobrą techniką programowania. Może to doprowadzić do sytuacji w której licznik nigdy nie osiągnie wartości 0 przez co pętla nigdy się nie skończy. Modyfikacja licznika pętli w językach wysokiego poziomu nie jest możliwa, ponieważ wewnętrzny rejestr nie jest dostępny dla programisty. mov ah, 2 : funkcja Dos wyświetlająca znak mov cx, 2*5 : ustawienie licznika mov dl, '+' : wyświetlanie znaku + : wywołanie Dos inc cx : dodanie 1 do CX!!! loop petla 2. Usuwanie błędów w Asemblerze. Około 20% czasu jest poświęcone na tworzenie kodu, a 80% czasu na usuwanie popełnionych w kodzie błędów. Usuwanie błędów w aplikacjach jest niezwykle cenną umiejętnością. W przypadku wystąpienia błędu asembler wyświetla komunikat zawierający nazwę programu źródłowego, numer wiersza z pliku źródłowego. Błędy w programie Przykład 1. title Przykład błędów end main. Wprowadź powyższy przykład, dokonaj kompilacji i popraw błędy w programie. Jako pomoc użyj analizy programu z pkt. 3. Błędy w programie Przykład 2. title Przykład błędów mov ax, @data 2

mov ds, ax mov ax, value1 mov ah, value2 main endp str. 3. value1 db 0Ah value2 dw 1000h end main Standardowe dyrektywy asemblera : Dyrektywa end endp page proc title.model.stack Opis oznacza koniec asemblowania programu oznacza koniec procedury oznacza ustawienie formatu strony dla pliku wydruku oznacza początek procedury oznacza tytuł pliku wydruku oznacza początek segmentu kodu oznacza początek segmentu danych oznacza ustawienie modelu pamięci oznacza ustawienie wielkości segmentu stosu Dyrektywy alokacji danych - są używane do zarezerwowania miejsca w pamięci na podstawie zdefiniowanych typów danych : Mnemonik Opis Bajty Atrybut DB Definiuje bajt 1 Bajt DW Definiuje słowo 2 Słowo DD Definiuje dwusłowo 4 Dwusłowo DF, DP Definiuje odległy wskaźnik 6 Odległy wskaźnik DQ Definiuje słowo poczwórne 8 Słowo poczwórne DT Definiuje dziesięć bajtów 10 Dziesięć bajtów 3. Przykładowy program w języku Asemblera i jego analiza. Program Hello World : title Program Hello World ( hello.asm ) message db Hello World, 0dh, 0ah, '$' mov ax,@data mov ds, ax mov ah, 9 3

mov dx, offset message main endp end main Powyższy program wyświetla na ekranie napis Hello World. Występują tu najważniejsze składniki programu napisanego w asemblerze. Powyższy kod jest napisany w asemblerze i musi być skompilowany do kodu maszynowego przed uruchomieniem. Program jest zgodny z asemblerami Borlanda i Microsoftu. dyrektywa informuje iż program wykorzystuje strukturę pamięci, w ramach której na dane i kod przeznaczono po 64 kb pamięci..stack - dyrektywa rezerwuje dla programu 100h ( 256 ) bajtów na stosie dyrektywa oznacza początek segmentu danych, w którym przechowywane są zmienne. W ramach deklaracji komunikatu message asembler rezerwuje pamięć dla ciągu Hello World oraz dwa bajty znaków nowego wiersza ( 0dh, 0ah ). Symbol $ jest wymaganym znakiem terminacji ciągu dla określonej podprocedury wyjściowej DOS. dyrektywa oznacza początek segmentu kodu. proc dyrektywa oznacza początek procedury o nazwie main pierwsze dwa polecenia głównej procedury oznaczają, że segment danych (@data) zostanie skopiowany do rejestru DS. kolejna część main jest odpowiedzialna za umieszczenie ciągu znaków na ekranie. Odbywa się to poprzez wywołanie funkcji DOS wyświetlającej ciąg, którego adres jest w rejestrze DX. Numer funkcji jest umieszczany w rejestrze AH. ostatnie dwie instrukcje głównej procedury ( mov ax,4c00h i ) powodują zatrzymanie programu i przekazanie sterowania do systemu operacyjnego. Microsoft Asembler zawiera program ML.EXE. Asembluje on i konsoliduje jeden lub więcej plików źródłowych w języku asembler. Składnia ML.EXE : ML opcje nazwa_pliku.asm Przykłady asemblowania i konsolidowania z różnymi opcjami : ML /Zi hello.asm ; Dołączenie informacji debuggera ML /Fl hello.asm ; Utworzenie pliku wydruku ( hello.lst ) ML /Fm hello.asm ; Utworzenie pliku mapy ( hello.map ) ML /Zm hello.asm ; Tryb zgodności z MASM 5.12 ML /Zi /Zm /Fm /Fl hello.asm ; asemblacja i konsolidacja w jednej linii 4. Zadania do wykonania w ćwiczeniu a).korzystając z opisu przykładu z pkt 3. wykonaj praktycznie przykłady z pkt 1 i 2 kompilując przykłady programem ML z pakietu Masm 6.13. b). Dokonaj analizy poniższego kodu i odpowiedz jaka będzie zawartość rejestru bx po zakończeniu programu. mov cx, 2 cw1: mov bx, 20 loop cw1 4

cw2 : mov bx, 10 c). Wykorzystując program debug napisz program dodający do rejestru BX wartość 5 pięć razy z wykorzystaniem pętli LOOP. Program rozpocznij od polecenia A 100. Następnie wykonaj JMP do adresu 0200, gdzie zapiszesz program odejmujący w pętli LOOP od rejestru BX wartość 5 pięć razy. Jaka będzie końcowa wartość rejestrów BX i CX. Wykorzystując w debugerze śledzenie zademonstruj działanie programu prowadzącemu. d). Program z punktu 4 c). napisz w postaci mnemoniki asemblera, skompiluj z użyciem ML i wykonaj śledzenie skompilowanego programu przy użyciu debugera debug. str. 4. 5