1 Ogolnie o asemblerach. 2 Zarys architektury MIPS



Podobne dokumenty
1 Zarys architektury MIPS

Lista Rozkazów: Język komputera

Programowanie w asemblerze MIPSa

Procedury. int mult (int mcand, int mlier){ int product = 0; while (mlier > 0) { product = product + mcand; mlier = mlier -1; } return product; }

. III atyka, sem, Inform Symulator puterów Escape rchitektura kom A

Struktura i działanie jednostki centralnej

Architektura typu Single-Cycle

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

Plan wykładu. Architektura systemów komputerowych. Cezary Bolek. Składowe architektury komputera

List s a R ozkazó z w: w Ję J z ę y z k y k k o k mp o u mp t u er e a a ( cd c. d )

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

Ćwiczenie nr 6. Programowanie mieszane

Język programowania: Lista instrukcji (IL Instruction List)

Jerzy Nawrocki, Wprowadzenie do informatyki

Architektury systemów komputerowych

Podstawy programowania sterowników GeFanuc

Rzut oka na zagadnienia zwi zane z projektowaniem list rozkazów

Programowanie niskopoziomowe

Architektura komputerów

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

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

2.1. W architekturze MIPS, na liście instrukcji widzimy dwie instrukcje dotyczące funkcji: .text main: la $a0, string1 # drukuj pierwszy łańcuch

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

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

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

Architektura komputerów. Asembler procesorów rodziny x86

1 Podstawy c++ w pigułce.

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

Programowanie Niskopoziomowe

organizacja procesora 8086

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

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

Mikrokontroler ATmega32. Język symboliczny

Lista instrukcji mikroprocesora Programowanie w assemblerze

Architektura typu multi cycle

Programowanie w elektronice: Podstawy C

Architektura komputerów

Organizacja typowego mikroprocesora

Bazy danych. Andrzej Łachwa, UJ, /15

Architektura komputerów

Elementy Modelowania Matematycznego Wykªad 9 Systemy kolejkowe

PROGRAMOWANIE NISKOPOZIOMOWE

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Przetwarzanie potokowe pipelining

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Język programowania: Lista instrukcji (IL Instruction List) Wykład w ramach przedmiotu: Sterowniki programowalne Opracował dr inż. Jarosław Tarnawski

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

Prosty procesor dla framgentu listy rozkazów MIPSa

Wstęp do informatyki. Architektura co to jest? Architektura Model komputera. Od układów logicznych do CPU. Automat skończony. Maszyny Turinga (1936)

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Programowanie niskopoziomowe

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

Architektura potokowa RISC

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

Technika mikroprocesorowa. Języki programowania mikrokontrolerów

Akademia Górniczo- Hutmicza w Krakowie Katedra Elektroniki WIET

Problemy optymalizacyjne - zastosowania

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

Architektura komputerów

Projektowanie. Projektowanie mikroprocesorów

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

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]

Systemy wbudowane Mikrokontrolery

Programowanie komputera

Podstawy programowania

PODSTAWY METROLOGII ĆWICZENIE 4 PRZETWORNIKI AC/CA Międzywydziałowa Szkoła Inżynierii Biomedycznej 2009/2010 SEMESTR 3

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

Sterowanie pracą programu

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

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH. Babbage i jego komputer mechaniczny. Ada programuje maszynę Babbage a. architektura. c Dr inż.

002 Opcode Strony projektu:

Programowanie funkcyjne. Wykªad 13

Shellcody a architektura MIPS na systemach IRIX. Adam Zabrocki.

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

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

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

1. Wprowadzenie do C/C++

Wykład 2. Budowa komputera. W teorii i w praktyce

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

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

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

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Procesory rodziny x86. Dariusz Chaberski

Języki formalne i techniki translacji

Architektura komputerów, Informatyka, sem.iii. Rozwiązywanie konfliktów danych i sterowania w architekturze potokowej

Jednostka centralna. dr hab. inż. Krzysztof Patan, prof. PWSZ

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Surowiec Zużycie surowca Zapas A B C D S 1 0,5 0,4 0,4 0, S 2 0,4 0,2 0 0, Ceny x

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

WSTĘP DO PROGRAMOWANIA

Podstawy programowania w języku C

Ukªady Kombinacyjne - cz ± I

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

1. Wprowadzenie do C/C++

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

Programowanie w asemblerze ARM wprowadzenie

Programowanie mikrokontrolera 8051

Transkrypt:

1 Ogolnie o asemblerach Kod zerojedynkowy jakim posªuguje si komputer jest niewygodny dla czªowieka. Pomysª: wprowadzenie symbolicznych nazw instrukcji, odzieli pola argumentów. Wci» jest niewygodnie, bo musimy podawa rzeczywiste adresy. Kolejny pomysª: wprawadzenie adresów symbolicznych (etykiet). Otrzymany j zyk programowania to asembler. Proces produkowania pliku wykonywalnego: 1. Program napisany w j zyku asemblerowym jest tªumaczony przez program równie» nazywany asemblerem na j zyk maszynowy (zerojedynkowy). Powsteje object le plik, który oprócz kodu zawiera dodatkowe informacje przydatne przy skªadaniu programu z kilku plików. W tej cz ±ci wylicza si adresy (wymaga to zazwyczaj dwukrotnego przejrzenia pliku ¹ródªowego). 2. Linkowanie program linkuj cy ª czy object les i biblioteki programowe, z których korzysta program w jeden plik wykonywalny. Tak naprawd, plik wykonywalny równie» nie zawiera jeszcze adresów rzeczywitych... Te generowane s dopiero podczas uruchamiania programu przez program ªaduj cy. Obecnie programuje si w asemblerach coraz rzadziej (tendencja: programowanie staje si coraz bardziej specykowaniem tego co chcemy osi gn, a nie tego jak to chcemy osiagn ). Asemblery jednak mimo wszystko maj zastosowania. Programy asemblerowe maj zazwyczaj krótszy kod (wykonywalny) od tych pisanych w j zykach wysokiego poziomu i s szybsze. Wprawdzie je±eli chodzi o du»e zadania, to kompilatory generuj lepszy kod ni» ludzie, ale pewne drobne fragmenty czªowiek potra zoptymalizowa st d cz sto pisze si program w j zyku wysokiego poziomu, po czym pewne kawaªki wstawia si w asemblerze. Poza tym kto± musi pisa kompilatory j zyków wysokiego poziomu tu znajomo± asemblera jest konieczna... 2 Zarys architektury MIPS Procesory rmy MIPS Technologies u»ywane s w komputerach (Silicon Graphics), skomputeryzowanych zabawkach (Nintendo, Sony) oraz w systemach wbudowanych (w jakie wyposa»one s np. telefony komórkowe). Dwie podsawowe architektury: 32-bitowa (MIPS32) i 64-bitowa (MIPS64). My zajmiemy si 32-bitow wersj MIPSa wszystkie rejestry s 32-bitowe, wszystkie rozkazy maj dªugo± 32 bitów, przestrze«adresowa jest adresowana adresami 32-bitowymi, co pozwala zaadresowa 4 GB. Mimo,»e procesory MIPS s typowymi architekturami RISC-owymi ich architektura zbioru rozkazów jest w miar bogata (RISC to mo»e nie tyle maªo rozkazów co proste rozkazy). Zawiera rozkazy arytmetyczne, logiczne, porównuj ce, instrukcje przesyªu danych, rozgaª zienia, skoki. Jest architektur typu ªaduj-zapisz, co znaczy,»e wszystkie instrukcje (poza wczytywaniem danych i zapisywaniem) dziaªaj na rejestrach (a nie na komórkach pami ci gªónej). MIPS32 ma 168 32-bitowych rozkazów, ale wiele z nich jest do siebie podobnych (jest np. 6 ró»nych rozkazów dodawania). Posiada m.in. instrukcje NOP (nic nie rób, zajmuje tylko czas procesora, co czasem mo»e by sensowne). Mamy 32 rejstry ogólnego przeznaczenia: oznaczane od $0 do $31. Rejestr $0 ma na staªe wpisan warto± 0, a rejestr $31 ($ra) jest domy±lny dla wielu rozkazów. Rejestr $1 ($at) jest zarezerwowany, rejestry $27 ($k1)i $26 ($k0) u»ywane s przez j dro systemu operacyjnego. Rejestry $28, $29, $30 ($gp, $sp, $fp) s rejestrami wska¹nikowymi. Numeracja pozostaªych rejestrów podana jest na rysunku 1. Ich znaczenie zebrane jest tak»e poni»ej: $at, $k0, $k1 - zarezerwowane dla asemblera i systemu operacyjnego (programista nie powinien ich uzywac) $a0-$a3 - przekazywanie argumentow do funkcji $v0, $v1 - zwracanie wynikow przez funkcje $t0-$t9 - rejestry pomocniecze $s0-$s7 - rejestry danych $gp - global pointer $sp - stack pointer 1

$fp - frame pointer $ra - return address ($31) $0 - staªa zero Warto podkre±li,»e podane zastosowania rejestrów s tylko konwencj i nic nie stoi na przeszkodzie, aby wykorzystywa je inaczej. Rysunek 1: Konwencja nazewnictwa rejestrów MIPS32 Dodatkowo mamy dwa rejestry specjalne HI i LO przechowuj ce wyniki pewnych operacji na liczbach caªkowitych. Oczywi±cie jest te» licznik rozkazów PC. Inny zestaw 32 rejestrów to rejestry do operacji na liczbach zmiennoprzecikowych. W trybie podwójnej precyzji warto±ci s przechowywane w parach rejestrów o kolejnych numerach. Jednostka zmiennoprzecikowa dysponuje te» 4 rejestrami specjalnego przeznaczenia. Ze strony http://www.cs.wisc.edu/ larus/spim.html mo»na ±ci gn emulator MIPS32, w wersjach dla ró»nych systemów operacyjnych. Znajduje si tam równie» sporo ciekawych linków. 3 Programowanie MIPSa Jak wspomnieli±my wszystkie rozkazy (z wyj tkiem rozkazów przesyªania danych) operuj tylko na rejestrach. Konwencja: rejestry $s0-$s7 przechowuj dane. Przykªad rozkazu: add $s0, $s1, $s2 # $s0=$s1+$s2 Grupa rejestrów $t0-$t7 przechowuje zgodnie z konwencj zmienne tymczasowe. s0 = (s1 + s2) (s3 + s4) napiszemy: add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1. Rozró»nienie mi dzy rejestrami $si i $ti jest umowne i nikt nie zabrania u»ywa ich inaczej. Operacja przesyªania z pami ci do rejestru to load word: lw $s0,40($s1) Np. licz c wyra»enie: W powy»szym przykªadzie zawarto± pami ci o adresie $s1+40 ªadowana jest do rejestru $s0. Zauwa»my,»e mamy tu do czynienia z adresowaniem bazowym. Jako bazy mo»emy u»y dowolnego rejestru ogólnego przeznaczenia. Przesuni cie jest podane jako argumnet natychmiastowy staªa (nie wolno w tym miejscu u»y rejestru). W druga stron mamy analogicznie dziaªaj c operacj store word: sw $s0, 40($s1) Uwaga o adresowaniu: pami jest adresowana bajtowo, ale sªowo ma dªugo± 4 bajtów, a wi c adres z jakiego pobieramy lub do jakiego zapisujemy powinien by wielokrotno±ci 4. Staªa w rozkazach lw, sw jest pami tana na 16 bitach. 2

3.1 Przykªad 1. Operacje na tablicy liczb caªkowitych Adres pocz tku tablicy (czyli elementu A[0]) przechowujemy w rejestrze $s0. Zaªadowanie elementu A[12] do rejestru $s1 wygl da tak (pami tamy o tym,»e adresujemy bajtami): lw $s1, 48($s0) W jaki sposób odwoªa si do elementu tablicy, którego indeks jest przechowywany w rejestrze $s2 (typowa sytuacja w programowaniu!)? Problem polega na tym,»e nie mamy adresowania po±redniego... Rozwi zanie: add $t0, $s2, $s2 add $t0, $t0, $t0 # t0 = 4*i add $t0, $t0, $s0 lw $s1, 0($t0) # ªadujemy A[i] do s1 3.2 Formaty rozkazów MIPSa Poznali±my ju» troch instrukcji MIPS-a. Podzieli je mo»na na trzy rodzaje: typu I (immediate), typu R (register) oraz typu J (jump). Jak te rozkazy wygl daj w j zyku maszynowym? Rozkazy typu R. Pierwszych 6 bitów to kod operacji (op). Nast pnie mamy trzy razy po 5 bitów wskazuj cych rejestry (rs, rt, rd), 5 bitów przesuni cia (shift ammount, shamt) oraz 6 bitów funkcji (okre±laj dodatkowe szczegóªy operacji). Np. add i sub maj te same bity kodu operacji, rozrózniaj je dopiero bity funkcji. W przypadku rozkazu add $t0, $s1, $s2 kolejne pola przyjmuj warto±ci (dziesi tkowo): 0, 17, 18, 8, 0, 32. Zauwa»,»e rejestr przeznaczenia $t0 jest w kodzie maszynowym zapisany jako trzeci, a nie jako pierwszy. Rozkazy typu I. Np. lw $s0, 8($t1). Kod operacji zajmuje 6 bitów. Potem dwa razy po 5 bitów na numery rejestrów i 16 bitów na adres (zapisany w kodzie dopeªnie«do 2). Nasz rozkaz przykªadowy zostanie zakodowany jako 35, 9, 16, 8. Inny przykªad rozkazu natychmiastowego: addi $s0, $s1, 3. Uwaga: nie ma subi. Rozkazy typu J. Np.: j addr. Kod operacji: 6 bitów. Adres: 26 bitów. Adres jest numerem sªowa a nie bajtu i jest adresem wzgl dnym. Rzeczywisty adres do jakiego si odwoªujemy: 4 najbardziej znacz ce bity s takie same jak w adresie rozkazu, nast pnie 26 bitów zakodowanych w adresie i na ko«cu 2 zera. 3.3 Kodowanie podstawowych konstrukcji z j zyków wysokiego poziomu Konstrukcj : if (i==j) s1=s2+s3 ; if (i!=j) s1=s2-s3; tªumaczymy na (przy zaªo»eniu,»e i jest w $s4, a j w $s5): bne $s4 $s5 E1 E1: beq $s4, $s5, E2 sub $s1, $s2, $s3 E2: Uwaga: rozkazy skoku warunkowego: bne, beq s typu I. Zatem adres ma w takim rozkazie ma tylko 16 bitów i mówi o ile trzeba skoczy w stosunku do aktualnego miejsca w pami ci. Konstrukcja if (i==j) s1=s2+s3 else s1=s2+s3 tªumaczy si na: 3

bne $s4, $s5 Else j EXIT Else: sub $s1, $s2, $s3 Exit: Nie ma rozkazu branch on less then. Do naturalnego przetªumaczenia konstrukcji if (i<j) s1=s2+s3 mo»na za to u»y rozkazu set on less then: slt $t0, $s1, $s2 #set less than s1<s2 -> t0=1 else t0=0 beq $t0, $zero, DALEJ DALEJ: Innym rozwi zaniem jest u»ycie rozkazu bgtz $i E (branch on greater than zero) lub bgez $i E (branch on greater or equal zero). P tla while: while (s4 < s5) s1=s2+s3 mo»e wygl da tak: Loop: slt $t0, $s4, $s5 beq $zero, $t0, EXIT j LOOP EXIT: 3.4 Kompletny przykªad prostego programu # Dodawanie elementow tablicy (przyklad zaczerpniety z #,,Krotkiego wprowadzenia do SPIM-a'' autorstwa Salah A. Almajdouba main:.text.align 2.globl main lw $s0, Size # czyta rozmiar tablicy li $s1, 0 # indeks i li $s2, 0 # s2 bedzie przechowywac sume li $t2, 4 # t2 zawiera stala 4 loop: mul $t1, $s1, $t2 # t1 dostaje i * 4 lw $s3, Nstart($t1) # s3 = N[i] add $s2, $s2, $s3 # sum = sum + N[i] addi $s1, $s1, 1 # i = i + 1 beq $s1, $s0, STOR # skaczemy do STOR na koniec j loop STOR: sw $s2, Result # wynik zachowujemy w Result.data 4

.align 2 Nstart:.word 8, 25, -5, 55, 33, 12, -78 Size:.word 7 Result:.word 0 Uwagi: 1. dyrektywa.text oznacza,»e kolejne dane nale»y umieszcza w segmencie programu 2. dyrektywa.date oznacza,»e kolejne dane nale»y umieszcza w segmencie danych 3. dyrektwya.align 2 nakazuje umieszcza dane z wyrównaniem do 2 2 4..word ka»e umieszcza kolejne dane na 4 bajtach (jest te» dyrektywa byte) 5..globl mówi,»e symbol jest globalny (widzialny z innych plików) 6. li (load immediate nie jest rozkazem, a tzw. pseudorozkazem podczas tªumaczenia na kod maszynowy przekªadane jest na ci g rozkazów (lub czasem pojedynczy rozkaz). Np. li $s0, 4 przekªadane jest na ori s0,zero, 4. 7. Podobnie pseudorozkazem jest mul. Pseudorozkaz mul $s1, $s2, $s3 zostanie przeªo»ony na mult $s2, $s3, mflo $s1. Rozkaz mul umieszcza bardziej znacz c cz ± wyniku w specjalnym rejestrze HI, mniej znacz c w rejestrze LO. Rozkaz mflo $s1 kopiuje zawarto± LO do rejestru $s1. 8. konstrukcja lw s3, Nstart(t1) rówznie» nie jest tutaj pojedynczym rozkazem maszynowy. powodem jest wyst pienie etykiety Nstart jako przesuni cia 9. podobnie jest z pierwszym rozkazem lw $0, Size, który tªumacozny jest na: lui $1, 4097, lw $16, 28($1); rejest $1 to rejestr $at 10. W tym przykªadzie u»yta jest nieco inna lozoa odwoªa«do pól tablicy ni» w przykªadzie wcze±niejszym: staªa w odwoªaniu lw $s3, Nstart($t1) oznacza pocz tek tablicy, a rejstr przesuni cie. Na kolejnym wykªadzie wróc jeszcze na chwil do pisania funkcji w asemblerze MIPS. Wtedy te» pojawi sie jakie± notatki dotycz ce tego zagadnienia. 5