1. Pobrać plik masm.zip (Macro Assembler 6.15 & Segmented Executable Linker 5.60) (http://www.cs.put.poznan.pl/mantczak/teaching/itc/masm.zip).

Podobne dokumenty
Jerzy Nawrocki, Wprowadzenie do informatyki

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

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

#include <stdio.h> #include <stdlib.h> // standardowe biblioteki

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Znaki w tym systemie odpowiadają następującym liczbom: I=1, V=5, X=10, L=50, C=100, D=500, M=1000

Architektura komputerów. Asembler procesorów rodziny x86

Programowanie komputera

Architektura Systemów Komputerowych

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

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Kod U2 Opracował: Andrzej Nowak

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

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

Ćwiczenie nr 6. Programowanie mieszane

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

Mikrokontroler ATmega32. Język symboliczny

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

Wykład 2. Informatyka Stosowana. 10 października Informatyka Stosowana Wykład 2 10 października / 42

Pracownia Komputerowa wykład VI

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

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

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

Sprzęt i architektura komputerów

SYSTEMY LICZBOWE 275,538 =

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

Podstawy Informatyki

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

Wykład 4. Środowisko programistyczne

Architektura komputerów

Pracownia Komputerowa wykład V

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

ARCHITEKTURA KOMPUTERÓW Systemy liczbowe

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Wstęp do informatyki- wykład 2

Wstęp do informatyki- wykład 1 Systemy liczbowe

Programowanie Niskopoziomowe

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

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Wprowadzenie do informatyki - ć wiczenia

Stan wysoki (H) i stan niski (L)

Programowanie w C++ 1 Opis procesora Sextium II. Opis procesora Sextium. materiały dydaktyczne udostępnione przez Tomasza Wierzbickiego

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

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

Struktura i działanie jednostki centralnej

Programowanie Niskopoziomowe

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Pracownia Komputerowa wyk ad VI

Cyfrowy zapis informacji. 5 grudnia 2013 Wojciech Kucewicz 2

Programowanie niskopoziomowe

EGZAMIN MATURALNY Z INFORMATYKI 17 MAJA 2016 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

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

Architektura typu Single-Cycle

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

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

LISTA 1 ZADANIE 1 a) 41 x =5 podnosimy obustronnie do kwadratu i otrzymujemy: 41 x =5 x 5 x przechodzimy na system dziesiętny: 4x 1 1=25 4x =24

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

WHILE (wyrażenie) instrukcja;

Arytmetyka binarna - wykład 6

1 Powtórzenie wiadomości

Techniki multimedialne

Wstęp do Informatyki

Sprzęt i architektura komputerów

1 Podstawy c++ w pigułce.

Języki formalne i techniki translacji

Wstęp do informatyki- wykład 1

1259 (10) = 1 * * * * 100 = 1 * * * *1

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Operacje arytmetyczne

Systemy liczbowe używane w technice komputerowej

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

Podstawy Informatyki dla Nauczyciela

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych

Arytmetyka stałopozycyjna

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

organizacja procesora 8086

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

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

Metoda znak-moduł (ZM)

WHILE (wyrażenie) instrukcja;

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

WPROWADZENIE DO INFORMATYKI

Informatyka kodowanie liczb. dr hab. inż. Mikołaj Morzy

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

1.1. Pozycyjne systemy liczbowe

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

Architektura komputerów

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

Systemy zapisu liczb.

1. Operacje logiczne A B A OR B

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Semantyka i Weryfikacja Programów - Laboratorium 3

Teoretyczne Podstawy Informatyki

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

Język ludzki kod maszynowy

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

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Transkrypt:

J.Nawrocki, M. Antczak, G. Palik, A. Widelska Plik źródłowy: 07cw4-asm.doc; Data: 2007-09-26 6:00 Ćwiczenie nr 4 Język asemblera Środowisko uruchomieniowe 1. Pobrać plik masm.zip (Macro Assembler 6.15 & Segmented Executable Linker 5.60) (http://www.cs.put.poznan.pl/mantczak/teaching/itc/masm.zip). 2. Rozpakować powyższe archiwum w katalogu roboczym (na zajęciach najprawdopodobniej C:\Temp). 3. Ważne pliki wykorzystywane podczas kompilacji: a. ml.exe, LINK.EXE wykonywalne pliki reprezentujące odpowiednio Macro Assembler 6.15 i Segmented Executable Linker 5.60; są one wykorzystywane w procesie kompilacji plików źródłowych programów napisanych w języku asemblera, b. clean.bat służy do usuwania następujących plików: *.bak, prog.exe, prog.obj, prog.map, prog.lst, prog.com z katalogu, w którym się znajduje, c. prog.asm kod źródłowy programu zapisany w języku asemblera (blank.asm szkielet programu napisanego w języku asembler, który wystarczy uzupełnić odpowiednimi instrukcjami w celu reprezentowania przez niego określonej funkcjonalności; zawiera kod, który jest niezbędny i wymagany przez wszystkie programy pisane na ćwiczeniach), d. make.bat zawiera składnię poleceń wykorzystywanych w celu kompilacji pliku zawierającego kod źródłowy programu napisanego w języku asemblera (np.: make.bat prog, w celu kompilacji pliku prog.asm). ml /Fe kod_wynikowy /Fl listing_kompilacji /Fm mapa_kompilacji /Fo kod_przejściowy kod_zrodlowy link kod_przejściowy,,,,, np.: ml /Feprog.exe /Flprog.lst /Fmprog.map /Foprog.obj prog.asm link prog.obj,,,,, Wprowadzenie do asemblera Podstawowa struktura programu ; prog.asm ;================================================.model tiny.code ;================================================ prog segment assume cs: prog start: ; instrukcje int 3 ;================================================.stack ;================================================ prog ends end start

Powyższe i dodatkowe materiały znajdują się na stronie dr. inż. W. Complaka 1. http://www.cs.put.poznan.pl/wcomplak/bfiles/pn_w_1.pdf 2. http://www.cs.put.poznan.pl/wcomplak/bfiles/pn_w_2.pdf 3. http://www.cs.put.poznan.pl/wcomplak/bfiles/pn_w_3.pdf 4. http://www.cs.put.poznan.pl/wcomplak/bfiles/pn_w_4.pdf 5. http://www.cs.put.poznan.pl/wcomplak/bfiles/pn_w_5.pdf

6. http://www.cs.put.poznan.pl/wcomplak/bfiles/pn_w_6.pdf 7. http://www.cs.put.poznan.pl/wcomplak/bfiles/pn_w_7.pdf Zadania Zad. 1(*). Skompiluj i wykonaj programy prezentowane na wykładzie. Zad. 2. Zaznacz rzeczywiste rejestry procesora x86: a) AX, b) FX, c) BX, d) GX, e) CX Zad. 3. Zaznacz poprawne odpowiedzi. Instrukcja add p, z: a) pozwala wykonywać operację dodawania na liczbach znajdujących się w odpowiednich rejestrach, b) po wykonaniu operacji wynik znajduje się w rejestrze p, c) po wykonaniu operacji wynik znajduje się w rejestrze z, d) pozwala wykonywać operację mnożenia na liczbach znajdujących się w odpowiednich rejestrach. Zad. 4. Jaka instrukcja kończy działanie programu napisanego w języku asemblera? Zad. 5. Zaznacz poprawne odpowiedzi: a) narzędzia wykorzystywane w procesie kompilacji to tylko kompilator, b) narzędzia wykorzystywane w procesie kompilacji to tylko linker, c) narzędzia wykorzystywane w procesie kompilacji to kompilator i linker, d) proces kompilacji przebiega w następujący sposób: program źródłowy jest linkowany, a następnie kompilowany, e) proces kompilacji przebiega w następujący sposób: program źródłowy jest kompilowany, a następnie linkowany, f) kompilator generuje kod wynikowy, g) linker generuje kod wynikowy, h) kompilator generuje kod przejściowy, i) linker generuje kod przejściowy. Zad. 6. Zaznacz poprawne odpowiedzi: a) narzędzie do testowania kodu wynikowego to masm, b) narzędzie do testowania kodu wynikowego to debug, c) narzędzie do testowania kodu wynikowego to link, d) liczby w rejestrach procesora są przechowywane w postaci binarnej, e) liczby w rejestrach procesora są przechowywane w postaci dziesiętnej, j) liczby w rejestrach procesora są przechowywane w postaci heksadecymalnej. Zad. 7. Załóżmy, że kompilowany jest plik źródłowy zawierający program napisany w języku asemblera. Uzupełnij brakujące informacje: a) w wyniku procesu kompilacji można uzyskać następujące pliki: kod przejściowy przechowywany w pliku o rozszerzeniu kod wynikowy przechowywany w pliku o rozszerzeniu... listing kompilacji przechowywany w pliku o rozszerzeniu... mapę kompilacji przechowywaną w pliku o rozszerzeniu... b) w celu uzyskania informacji dotyczących możliwych opcji narzędzia ml, które mogą zostać wykorzystane podczas kompilacji kodu źródłowego napisanego w języku asemblera należy wykonać następujące polecenie: ml c) w celu uzyskania informacji dotyczących możliwych opcji narzędzia debug, które mogą zostać wykorzystane podczas testowania poprawności kodu wynikowego uzyskanego w wyniku kompilacji należy wykonać następujące polecenie: - d).. przykładowa polecenie uruchamia program debug w celu testowania poprawności kodu źródłowego prog.exe

e) jakie będą rezultaty wykonania poniższych operacji: -rax AX 0000 :1 -rax AX 0003 : -g -q Zad. 8. Oblicz metodą bezpośredniego dodawania wartości następujących wyrażeń (liczby są podane w systemie heksadecymalnym, czyli szesnastkowym; wynik ma być również heksadecymalny)(*4-6): 524 735 345 2A8 E45 CCE + 214 + 879 + CBA + 34C + 28B + ABA Zad. 9. Oblicz metodą bezpośredniego odejmowania wartości następujących wyrażeń (liczby są podane w systemie heksadecymalnym; wynik ma być również heksadecymalny) (*4-6): 548 EAB 189 437 1F2 E49-211 - 341-67 - 78 - BC - AC8 Zad. 10. Do czego służy kod uzupełnień do dwóch (U2) oraz jaka jest jego charakterystyczna cecha? Zad. 11. Podaj zakres liczb całkowitych, jakie można zakodować za pomocą 5 bitów metodą uzupełnienia do 2. Zad. 12. Podaj wartość bezwzględną (w systemie heksadecymalnym) następujących liczb całkowitych zakodowanych na 16 bitach metodą uzupełnienia do 2 (*4-6): FFFE FFF7 FFD3 FEF9 F30E 47EB Zad. 13. Zaznacz poprawne odpowiedzi. Zmiana znaku podczas tworzenia liczby ujemnej, przy wykorzystaniu jej dodatniego odpowiednika, jest wykonywana poprzez: a) zanegowanie bitów i dodanie 1, b) dodanie jedynki i zanegowanie bitów. Zad. 14. Przedstaw podane liczby ujemne w uzupełnieniu do 2 na szesnastu bitach i w kodzie heksadecymalnym (*4-6): -4 -B -E -23 -C4 -A8 Zad. 15. Zaznacz poprawne odpowiedzi. Instrukcja sub p, z: a) pozwala wykonywać operację dodawania na liczbach znajdujących się w odpowiednich rejestrach, b) wynik po wykonaniu operacji znajduje się w rejestrze p, c) wynik po wykonaniu operacji znajduje się w rejestrze z, d) pozwala wykonywać operację odejmowania na liczbach znajdujących się w odpowiednich rejestrach. Zad. 16. Zaznacz poprawne odpowiedzi. Po wykonaniu instrukcji neg c: a) w rejestrze c znajduje się wartość taka sama jak przed wykonaniem operacji, b) w rejestrze c znajduje się wartość powstała poprzez zanegowanie postaci binarnej liczby c.

Zad. 17. Procesor wykonuje rozkazy zapisane w kodzie wynikowym programu w następujący sposób: a), b) licznik rozkazów to.., który wskazuje na. Zad. 18. Skoki warunkowe są realizowane za pomocą operacji porównania.., i operacji skoku. Podaj instrukcje asemblerowe odpowiadające następującym operacjom skoku: a) jump if equal -.. b) jump if not less -.. c) jump if greater - d) jump if not greater -. e) jump if less -. Zad. 19. Zapisz w języku asemblera pętle while oraz instrukcję warunkową if-else. Zad. 20. Napisz program przesyłający do rejestru AX najmniejszą z liczb znajdujących się w rejestrach BX, CX i DX. Oto przykładowe przypadki testowe: Dane wejściowe (hex) Wynik BX CX DX AX 1 2 3 1 5 FF FFFF FFFF Zad. 21. Napisz program przesyłający do rejestru AX resztę z dzielenia liczby naturalnej znajdującej się w rejestrze BX przez liczbę dodatnią znajdującą się w rejestrze CX. Zastosuj metodę wielokrotnego odejmowania. Oto przykładowe przypadki testowe przedstawione w systemie dziesiętnym: Dane wejściowe Wynik BX CX AX 6 5 1 16 5 2 4 5 4 5 5 0 F 4 3 Zad. 22. Napisz program obliczający wartość funkcji n!. Przyjmij, że n jest w rejestrze BX, a wynik ma być w rejestrze AX. Do mnożenia wykorzystaj instrukcję imul s która przesyła do pary rejestrów DX:AX wynik mnożenia liczby znajdującej się w rejestrze AX przez liczbę znajdującą się w rejestrze (lub innym miejscu) określonym przez operand s. Jeżeli wynik mieści się na 16 bitach i jest nieujemny, to wartość rejestru DX jest równa 0 (jeśli wynik mieści się na 16 bitach i jest ujemny, to wartością rejestru jest FFFF). Na przykład instrukcja imul bx może być opisana następującą instrukcją w języku C: Oto przykładowe dane testowe: ax = ax * bx; Wejście: n Wynik: n! BX AX 0 1 1 1 2 2 3 6 4 24 Jaka jest największa wartość n, dla której n! może być poprawnie przedstawiona w uzupełnieniu do 2 na 16 bitach?

Jak należałoby zmodyfikować ten program, gdyby osoby korzystające z tego programu doszły do wniosku, że będzie im wygodniej, gdy n będzie podane w rejestrze ax, a wynik będzie w rejestrze bx? Zad. 23. Napisz program obliczania liczby cyfr dziesiętnych podanej liczby n. Skorzystaj z instrukcji idiv s która dzieli zawartość pary rejestrów DX:AX przez zawartość s i iloraz przesyła do rejestru AX, zaś resztę do rejestru DX. W przypadku, gdy dzielna jest 16-bitowa należy pamiętać o wyzerowaniu rejestru DX. Na przykład instrukcja języka C ax = ax / bx; mogłaby być przetłumaczona w następujący sposób: mov dx, 0 idiv bx Oto przykładowe dane testowe: Wejście: n Wynik: DX CX D 2 Zad. 24(*). Napisz program obliczania wartości a n, gdzie a i n są liczbami naturalnymi (a>0, n >= 0). Skorzystaj z instrukcji imul s która przesyła do pary rejestrów DX:AX wynik mnożenia liczby znajdującej się w rejestrze AX przez liczbę znajdującą się w rejestrze (lub innym miejscu) określonym przez operand s. Jeżeli wynik mieści się na 16 bitach i jest nieujemny, to wartość rejestru DX jest równa 0 (jeśli wynik mieści się na 16 bitach i jest ujemny, to wartością rejestru jest FFFF). Na przykład instrukcja imul bx może być opisana następującą instrukcją w języku C: Oto przykładowe dane testowe: ax = ax * bx; Wejście: n Wynik: a n Wejście: a BX AX CX 3 8 2 Zad. 25(*). Napisz program obliczania sumy cyfr dziesiętnych podanej liczby n. Skorzystaj z instrukcji idiv s która dzieli zawartość pary rejestrów DX:AX przez zawartość s i iloraz przesyła do rejestru AX, zaś resztę do rejestru DX. W przypadku, gdy dzielna jest 16-bitowa należy pamiętać o wyzerowaniu rejestru DX. Na przykład instrukcja języka C ax = ax / bx; mogłaby być przetłumaczona w następujący sposób: mov dx, 0 idiv bx Oto przykładowe dane testowe: Wejście: n Wynik: DX CX D 4