1 1 Przykład 1/3 main() { int i,j,k,m; /* i-m : $s0-$s3 */... i = mult(j,k);... m = mult(i,i);... } int mult (int mcand, int mlier){ int product; product.

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Język C/C++ Funkcje.
Jarosław Kuchta Semafory.
Mgr inż.Marcin Borkowski Podstawy Java Część II
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas. 2 Wzorce Często pojawia się konieczność pisania podobnych funkcji lub klas operujących na argumentach.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Podstawy programowania w VBA
Informatyka Stosowana
Opisy funkcji Adres strony WWW : html /html_node/libc_528.html.
Nośniki sygnałów - przykład Nośniki sygnałów – przykład.
1 1 Więcej Load i Store Dwie dodatkowe instrukcje komunikujące się z pamięcią lb oraz sb – operują na bajtach Taki sam format jak lw i sw –lb $s2, 3($s1)
1 RISC – nasze założenia Podstawowe cechy: Wszystkie operacje są realizowane na rejestrach, Tylko operacje typu load i store wymagają dostępu do pamięci,
Wykład 5 Przerwania w systemie SAB80C537 dr inż. Andrzej Przybył
Funkcje Modularyzacja : program główny , funkcje Funkcje :
Budowa komputera Wstęp do informatyki Wykład 15
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Język C – Część II Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Wprowadzenie do SystemC
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
10. PROSTE MECHANIZMY KOORDYNACJI DOSTĘPNE W JĘZYKU C W systemie Unix użytkownikowi (nie będącemu administratorem) nie wolno wykonywać bezpośrednio żadnych.
Algorytmy Marek Pudełko
Typy wyrażenia, schematy blokowe, writeln, readln, if, pętle
Podprogramy.
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
Programowanie imperatywne i język C Copyright, 2006 © Jerzy R. Nawrocki Wstęp do.
Architektura komputerów
Podstawy programowania II
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Wprowadzenie do programowania w językach C i C++
Zadanie treningowe… …do wykładów ULOG cz. 6 i cz. 7 Rozwiązanie: E S 1
TABLICE C++.
Procedury i funkcje.
Przekazywanie argumentów
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
UKŁADY MIKROPROGRAMOWANE
Programowanie strukturalne i obiektowe
Warsztaty programowania w języku Python
Budowa programu w asemblerze W ogólnym przypadku linia programu w asemblerze ma następującą budowę: na przykład: tuskocz:adda,r0 ;dodanie do akumulatora.
STEROWANIE Ale nie tylko
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
INSTRUKCJE Umożliwiają zapis algorytmu, służą do sterowania przebiegiem programu. warunkowe (podejmowanie decyzji) 1. if-else „jeżeli”, 2. switch-case.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Składnia pętli do … while do instrukcja while (wyrażenie); gdzie: instrukcja – instrukcja pojedyncza lub blok instrukcji wyrażenie – wyrażenie przyjmujące.
VBA w MS Word Źródła: Steven Roman, Word.Makrodefinicje, Helion 2000
Generowanie kodu pośredniego
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Generowanie kodu pośredniego Java ML Pascal C C++ Alpha Pentium Sparc Java ML Pascal C C++ Alpha Pentium Sparc MIPS IR IR – intermediate representation.
Programowanie proceduralne Podstawy Programowania dla geoinformatyków Wykład 3 Rafał Witkowski, 2015.
Wykład 11 Aplikacje SDI PO11-1 / 22 Single Document Interface 1.Klasy aplikacji SDI 2.Menu systemowe aplikacji SDI 3.Serializacja 4.Tworzenie widoku 5.Tworzenie.
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
1 Opisy funkcji Adres strony WWW : html (należy odszukać hyperlink Function Index) (
Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
1 Czy procesor musi się grzać? Np. dodawanie 2 liczb 1-bitowych. Możliwych stanów początkowych: cztery Możliwych stanów końcowych: dwa to można opisać.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Lista Rozkazów: Język komputera Większość slajdów do tego wykładu to tłumaczenia i przeróbki oficjalnych sladjów do podręcznika Pattersona i Hennessy’ego.
Kompilatory optymalizujące Piotr Błaszyński. Generowanie kodu, wstęp : - Kod generowany jest dla różnych maszyn, trzeba pamiętać, że ten sam program źródłowy.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Opisy funkcji Adres strony WWW :
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
Chapter 6 Digital Design and Computer Architecture, 2nd Edition
Zapis prezentacji:

1 1 Przykład 1/3 main() { int i,j,k,m; /* i-m : $s0-$s3 */... i = mult(j,k);... m = mult(i,i);... } int mult (int mcand, int mlier){ int product; product = 0; while (mlier > 0) { product += mcand; mlier -= 1; } return product; }

2 2 Przykład 2/3 start:... add $a0,$s1,$0 # arg0 = j add $a1,$s2,$0 # arg1 = k jal mult # call mult add $s0,$v0,$0 # i = mult()... add $a0,$s0,$0 # arg0 = i add $a1,$s0,$0 # arg1 = i jal mult # call mult add $s3,$v0,$0 # m = mult()... j exit main() { int i,j,k,m; /* i-m:$s0-$s3 */... i = mult(j,k);... m = mult(i,i);... }

3 3 Przykład 3/3 mult: add $t0,$0,$0 # prod=0 Loop: slt $t1,$0,$a1 # mlr > 0? beq $t1,$0,Fin # no=>Fin add $t0,$t0,$a0 # prod+=mc addi $a1,$a1,-1 # mlr-=1 j Loop # goto Loop Fin: add $v0,$t0,$0 # $v0=prod jr $ra # return int mult (int mcand, int mlier){ int product = 0; while (mlier > 0) { product += mcand; mlier -= 1; } return product; }

4 4 System Calls Umożliwia realizację operacji we/wyj (biblioteka we/wyj) w symulatorze SPIM Rejestr $v0 jest używany jako rejestr sterujący – wskazuje na operację do wykonania (tabela) Argumenty sa ładowane do rejestrów $a0 oraz $a1. Odpowiedź w rejestrze $v0 (operacje czytania) Sugerowana kolejność instrukcji -Załaduj rejestry argumentu -Wprowadź kod operacji -Wykonaj syscall li $a0, 10 # load argument $a0=10 li $v0, 1 # call code to print integer syscall # print $a0

5 5 System Calls

6 6 Dyrektywy Asemblera - wybrane.text - sekcja kodu, po tej dyrektywie występują instrukcje asemblera.data- sekcja danych.globl- specyfikacja etykiet globalnych (adres symboliczny)

7 7 Pełny przykład 1.text # sekcja kodu.globl main main:li $v0, 4 # ustawienie drukowania stringu la $a0, str # adres stringu do wydruku syscall # drukuj string li $v0, 10 # ustawienie wyjścia syscall # wyjście.data # sekcja danych str:.asciiz Hello world!\n # NUL kończy string (jak w C)

8 8 Pełny przykład 2.text.globl main main:la $t0, Aaddr # $t0 = wskaznik na tablicę A lw $t1, len # $t1 = rozmiar tablicy A sll $t1, $t1, 2 # $t1 = 4*rozmiar add $t1, $t1, $t0 # $t1 = za ostatnim elementem A

9 9 Pełny przykład 2 Loop:lw $t2, ($t0) # $t2 = A[i] addi $t2, $t2, 5 # $t2 = $t2 + 5 sw $t2, ($t0) # A[i] = $t2 addi $t0, $t0, 4 # i = i+1 bne $t0, $t1, loop # if $t0<$t1 goto loop li $v0, 10 # exit syscall.data Aaddr:.word 0,2,1,4,5 len:.word 5

10 Przykłady we/wyj.data # sekcja danych promptInt:.asciiz Wprowadz wartosc typu int " resultInt:.asciiz Nastepna wartosc = " linefeed:.asciiz "\n" enterkey:.asciiz Nacisnij dowolny klawisz aby zakonczyc".text # sekcja kodu main: # zaproszenie do wprowadzenia wartosci int li $v0,4 # kod dla wydruku napisu la $a0,promptInt # w $a0 adres napisu syscall # wydrukuj zaproszenie # pobranie int z wejścia li $v0,5 # kod odczytu int syscall # pobierz int – wynik w $v0 move $t0,$v0 # int w $t0 # wylicz następną wartość int addi $t0, $t0, 1 # t0 <-- t0 + 1

11 Przykłady we/wyj # wydrukuj kolejna wartosc li $v0,4 # kod dla wydruku napisu la $a0,resultInt # w $a0 adres napisu syscall # wydrukuj napis # print out the result li $v0,1 # kod wydruku int move $a0,$t0 # wynik w $a0 syscall # wydrukuj wynik # przejscie do nowej linii li $v0,4 # kod dla wydruku napisu la $a0,linefeed # w $a0 adres napisu syscall # przejscie do nowej lini # oczekiwanie na nacisniecie klawisza li $v0,4 # kod dla wydruku napisu la $a0,enterkey # w $a0 adres napisu syscall # wydrukuj napis # oczekiwanie na nacisniecie klawisza – odczytana wartosc jest ignorowana li $v0,5 # kod odczytu int syscall # pobierz int – wynik w $v0 # Koniec li $v0,10 # kod wyjscia syscall # wyjscie z programu

12 Lista instrukcji add Rd, Rs, Rt Rd = Rs + Rt (signed) addu Rd, Rs, Rt Rd = Rs + Rt (unsigned) addi Rd, Rs, Imm Rd = Rs + Imm (signed) sub Rd, Rs, Rt Rd = Rs - Rt (signed) subu Rd, Rs, Rt Rd = Rs - Rt (unsigned) div Rs, Rt lo = Rs/Rt, hi = Rs mod Rt (integer division, signed) divu Rs, Rt lo = Rs/Rt, hi = Rs mod Rt (integer division, unsigned) div Rd, Rs, Rt Rd = Rs/Rt (integer division, signed) divu Rd, Rs, Rt Rd = Rs/Rt (integer division, unsigned) rem Rd, Rs, Rt Rd = Rs mod Rt (signed) remu Rd, Rs, Rt Rd = Rs mod Rt (unsigned) mul Rd, Rs, Rt Rd = Rs * Rt (signed) mult Rs, Rt hi, lo = Rs * Rt (signed, hi = high 32 bits, lo = low 32 bits)

13 Lista instrukcji multu Rd, Rs hi, lo = Rs * Rt (unsigned, hi = high 32 bits, lo = low 32 bits) and Rd, Rs, Rt Rd = Rs Rt andi Rd, Rs, Imm Rd = Rs Imm neg Rd, Rs Rd = -(Rs) nor Rd, Rs, Rt Rd = (Rs + Rt) not Rd, Rs Rd = (Rs) or Rd, Rs, Rt Rd = Rs + Rt ori Rd, Rs, Imm Rd = Rs + Imm xor Rd, Rs, Rt Rd = Rs Rt xori Rd, Rs, Imm Rd = Rs Imm sll Rd, Rt, Sa Rd = Rt left shifted by Sa bits sllv Rd, Rs, Rt Rd = Rt left shifted by Rs bits srl Rd, Rs, Sa Rd = Rt right shifted by Sa bits srlv Rd, Rs, Rt Rd = Rt right shifted by Rs bits move Rd, Rs Rd = Rs

14 Lista instrukcji mfhi Rd Rd = hi mflo Rd Rd = lo li Rd, Imm Rd = Imm lui Rt, Imm Rt[31:16] = Imm, Rt[15:0] = 0 lb Rt, Address(Rs) Rt = byte at M[Address + Rs] (sign extended) sb Rt, Address(Rs) Byte at M[Address + Rs] = Rt (sign extended) lw Rt, Address(Rs) Rt = word at M[Address + Rs] sw Rt, Address(Rs) Word at M[Address + Rs] = Rt slt Rd, Rs, Rt Rd = 1 if Rs = Rt (signed) slti Rd, Rs, Imm Rd = 1 if Rs = Imm (signed) sltu Rd, Rs, Rt Rd = 1 if Rs = Rt (unsigned) beq Rs, Rt, Label Branch to Label if Rs == Rt beqz Rs, Label Branch to Label if Rs == 0 bge Rs, Rt, Label Branch to Label if Rs >= Rt (signed) bgez Rs, Label Branch to Label if Rs >= 0 (signed) · bgezal Rs, Label Branch to Label and Link if Rs >= Rt (signed)

15 Lista instrukcji bgt Rs, Rt, Label Branch to Label if Rs > Rt (signed) bgtu Rs, Rt, Label Branch to Label if Rs > Rt (unsigned) bgtz Rs, Label Branch to Label if Rs > 0 (signed) ble Rs, Rt, Label Branch to Label if Rs <= Rt (signed) bleu Rs, Rt, Label Branch to Label if Rs <= Rt (unsigned) blez Rs, Label Branch to Label if Rs <= 0 (signed) bgezal Rs, Label Branch to Label and Link if Rs >= 0 (signed) bltzal Rs, Label Branch to Label and Link if Rs < 0 (signed) blt Rs, Rt, Label Branch to Label if Rs < Rt (signed) bltu Rs, Rt, Label Branch to Label if Rs < Rt (unsigned) bltz Rs, Label Branch to Label if Rs < 0 (signed) bne Rs, Rt, Label Branch to Label if Rs Rt bnez Rs, Label Branch to Label if Rs 0 j Label Jump to Label unconditionally jal Label Jump to Label and link unconditionally jr Rs Jump to location in Rs unconditionally jalr Label Jump to location in Rs and link unconditionally