Zuzanna Hartleb i Artur Angiel

Podobne dokumenty
Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

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

Architektura komputerów. Asembler procesorów rodziny x86

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

PROGRAMY REZYDENTNE Terminate and State Resident, TSR

INSTRUKCJE Instrukcje przeniesienia: Instrukcje konwersji: Arytmetyczne instrukcje:

Ćwiczenie 3. Konwersja liczb binarnych

Programowanie Niskopoziomowe

Architektura komputerów

Metoda znak-moduł (ZM)

Programowanie Niskopoziomowe

Metody Realizacji Języków Programowania

ARCHITEKTURA KOMPUTERÓW Liczby zmiennoprzecinkowe

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

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

Sprzęt i architektura komputerów

Floating Point Unit Koprocesor umożliwia działania na liczbach ułamkowych (zmiennoprzecinkowych) 8 rejestrów 80-bitowych: st0,,st7 Typy danych

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

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

Podstawy i języki programowania

Podstawy Programowania Podstawowa składnia języka C++

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

Sterowanie pracą programu

1 Podstawy c++ w pigułce.

Ćwiczenie nr 6. Programowanie mieszane

Sprzęt i architektura komputerów

Lista instrukcji mikroprocesora Programowanie w assemblerze

Język ludzki kod maszynowy

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

Struktura i działanie jednostki centralnej

4. Funkcje. Przykłady

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Architektura komputerów

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

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

Jerzy Nawrocki, Wprowadzenie do informatyki

Architektura komputerów

Wstęp do informatyki- wykład 7

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

1 Podstawy c++ w pigułce.

Programowanie komputera

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.

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

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

LibreOffice Calc VBA

Wstęp do informatyki- wykład 8 Pętla while, do while,for -pętla w pętli- przykłady Operator rzutowania Manipulatory

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

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

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

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

Podstawy programowania w języku C++

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

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

Programowanie strukturalne. dr inż. Tadeusz Jeleniewski

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Arytmetyka binarna - wykład 6

Języki programowania obiektowego Nieobiektowe elementy języka C++

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

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

Naturalny kod binarny (NKB)

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Część 4 życie programu

System liczbowy jest zbiorem reguł określających jednolity sposób zapisu i nazewnictwa liczb.

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

Programowanie niskopoziomowe

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

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Adam Kotynia, Łukasz Kowalczyk

Zasady programowania Dokumentacja

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

Wstęp do informatyki- wykład 6

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

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

Pliki. Informacje ogólne. Obsługa plików w języku C

organizacja procesora 8086

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. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

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

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

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

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

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

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

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

Programowanie w elektronice: Podstawy C

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

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wstęp do informatyki- wykład 9 Funkcje

Programowanie w asemblerze Obliczenia zmiennopozycyjne

Wprowadzenie do programowania w VBA

Transkrypt:

ARCHITEKTURA KOMPUTERÓW - LABORATORIUM Program hybrydowy Dokumentacja ćw. 1-4 Zuzanna Hartleb i Artur Angiel 2010-06-16

Działanie Program pobiera od użytkownika liczbę zmiennoprzecinkową, sprawdza poprawnośd wprowadzonych danych i konwertuje ją na postad obliczeniową. Otrzymana zmienna typu double jest następnie wyświetlana w postaci binarnej, z podziałem na znak, cechę i mantysę. Struktura... jest programem o strukturze hybrydowej. Składa się z następujących modułów: main.cpp modułu w języku c++, odpowiedzialnego za pobieranie danych, sprawdzanie ich poprawności i wyprowadzanie wyniku; lib.asm modułu asemblerowego, w którym znajduje się procedura konwersji łaocucha znakowego na postad obliczeniową; makra.asm pliku z użytymi w module asemblerowym makrami. Łączenie modułów Projekt składający się z dwóch modułów, włącznie z modułem asemblerowym, został zbudowany przy użycia środowiska Turbo C++ 3.0 firmy Borland. W tym celu użyto polecenia: tcc main lib.asm Wszystkie argumenty przekazano do funkcji asemblerowej, zgodnie z konwencją języka C, to znaczy przez stos. To znaczy, w module C++ wykonano przypisanie: double wynik = Przelicz(napis, licznik); A następnie parametry pobrano ze stosu przy pomocy makra PobierzBufor: PobierzBufor MACRO push bp mov bp, sp push cx push si push di mov si, [bp+4] mov cx, [bp+6] mov di, offset Bufor rep movsb pop di pop si pop cx pop bp ENDM mov byte ptr [di], '$' Ćwiczenie 1-4 Strona 2

Liczba w postaci obliczeniowej zostaje odłożona na stosie koprocesora, skąd jest automatycznie pobierana przy zakooczeniu funkcji. RAMKA STOSU Jest to obszar stosu przeznaczony na parametry wywołania procedury oraz jej zmienne lokalne; przechowuje także adres powrotu z procedury oraz odłożoną oryginalną zawartośd rejestru bazowego. Sprawdzanie poprawności wprowadzonego łańcucha Sprawdzanie poprawności, dla ułatwienia, zrealizowano w module języka C++. if(napis[licznik] == '-'){licznik++; jeżeli pierwszym znakiem jest minus, zostaje on pominięty if(napis[licznik] < '0' napis[licznik] > '9'){ return -1; sprawdzenie czy na pierwszej pozycji jest cyfra licznik++; pętla, w której sprawdzana jest poprawność kolejnych znaków while(napis[licznik]!= '\0'){ if(napis[licznik] >= '0' && napis[licznik] <= '9'){ licznik++; else{ switch(napis[licznik]){ case '.': if(kropka == 1){ return -1; jeżeli wcześnniej pojawiła siękropka, zwracany jest błąd else {kropka = 1; break; case 'E': if(e == 1){ ;jeżeli już pojawił się znak wykładnika zwracany jest błąd return -1; else{ E = 1; pominięcie znaku + lub w wykładniku if(napis[licznik+1] == '-' napis[licznik+1] == '+'){ licznik++; break; default: ;w przypadku innych znaków zwracany jest błąd return -1; licznik++; cout << "\nprawidlowa liczba: " << napis << endl; Ćwiczenie 1-4 Strona 3

Konwersja do postaci obliczeniowej Konwersja została zrealizowana przy pomocy koprocesora matematycznego w module asemblerowym. Procedura wykonująca to zadanie składa się z trzech części a) Przeliczanie części całkowitej Przelicz PROC NEAR PobierzBufor xor ax, ax mov si, offset Bufor FINIT FLDZ ;pobranie parametrów ze stosu ; inicjujemy FPU ; ladujemy 0 do FPU Minus: cmp byte ptr [si], '-' ; jeżeli pierwszym znakiem nie jest minus, jne Mantysa ; przejscie do przeliczania mantysy mov [Ujemna], 01h ; zaznaczenie że mantysa jest ujemna Mantysa: cmp byte ptr [si], '.' ; jeżeli napotkano kropkę je Kropka ; przejście do zliczania części ułamkowej cmp byte ptr [si], 'E' ; jeżeli napotkano znak wykładnika, je E ; przejście do liczenia wykładnika cmp byte ptr [si], '$' ; jeżeli napotkano koniec łańcucha je Dalej ; zakończenie przeliczania; FIMUL Dziesiec ; mnożymy dotychczasową wartość liczby przez 10 mov al, byte ptr [si] ; ładujemy bieżącą cyfrę w kodzie ASCII z bufora sub al, '0' ; konwersja na postać obliczeniową cyfry mov byte ptr [Cyfra], al ; załadowanie cyfry do zmiennej FIADD Cyfra ; dodanie bieżącej cyfry do wyniku ; inkrementacja offsetu jmp Mantysa ; pętla Ćwiczenie 1-4 Strona 4

b) Przeliczanie części ułamkowej Dalej: jmp Koniec Kropka: FILD Dzielnik FXCH st(1) ; załadowanie dzielnika równego dziesięć do rejestru st(0) ; zamiana zawartości rejestrów st(0) i st(1) ; teraz w st(0) jest aktualna wartość liczby a w st(1) dzielnik Kropkowanie: cmp byte ptr [si], 'E' ; przejście do liczenia wykładnika je E ; jeżeli napotkano znak wykładnika, cmp byte ptr [si], '$' ; jeżeli napotkano koniec łańcucha je Koniec ; zakończenie przeliczania mov al, byte ptr [si] ; konwersja cyfry na postać obliczeniową sub al, '0' mov byte ptr [Cyfra], al ; i załadowanie jej do zmiennej FILD Cyfra ; załadowanie cyfry do rejestru st(0) FDIV st, st(2) ; dzielenie cyfry przez aktualny dzielnik FADD ; dodanie ułamka do aktualnej cyfry FILD Dzielnik ; załadowanie liczby 10 do st(0) FMULP st(2), st ; pomnożenie dzielnika przez 10 jmp Kropkowanie ; pętla Ćwiczenie 1-4 Strona 5

c) Przeliczanie wykładnika E: FFREE st(1) ; zwolnienie miejsca na stosie zajmowanego przez dzielnik ; pominięcie znaku wykładnika LiczWykladnik Wykladnik ; wywołanie makra obliczającego wykładnik cmp Wykladnik, 8000h ; jeżeli wykładnik jest dodatni jb Plus ; skok do obsługi Petla: mov cx, Wykladnik neg cx ; obliczanie wartości bezwzględnej wykładnika E FIDIV Dziesiec ; dzielenie całej liczby E razy przez 10 loop Petla jmp Koniec Plus: mov cx, Wykladnik Petla2: FIMUL Dziesiec ; mnożenie E razy całej liczby przez 10 loop Petla2 Koniec: FFREE st(1) Zakoncz: clc ret cmp Ujemna, 1 jne Zakoncz FCHS ; zwolnienie miejsca na stosie zajmowanego przez dzielnik ; jeżeli mantysa jest ujemna ; wynik jest negowany ; ustawienie znaczników poprawności ; powrót z procedury Przelicz ENDP Ćwiczenie 1-4 Strona 6

Wyliczanie wykładnika zostało zrealizowane w następujący sposób: LiczWykladnik MACRO Wynik xor ax, ax ; tu będzie cały wykładnik xor bx, bx ; tu będzie bieżąca cyfra wykładnika xor cx, cx ; tu będzie 1 jeśli wykładnik jest ujemny cmp byte ptr [si], '-' jne DodatniWykladnik mov cx, 01h DodatniWykladnik: Dalej2: cmp byte ptr [si], '+' jne Dalej2 cmp je mov sub mov dx, 10 mul dx add ax, bx jmp DodatniWykladnik KoniecWykladnika: cmp cx, 0 je NieNeguj NEG ax NieNeguj: ENDM byte ptr [si], '$' KoniecWykladnika bl, byte ptr [si] bl, '0' mov Wykladnik, ax Ćwiczenie 1-4 Strona 7