Architektura systemów komputerowych jesień 2013

Slides:



Advertisements
Podobne prezentacje
Taktowanie mikroprocesorów Jednostka sterująca mikroprocesora jest układem sekwencyjnym synchronicznym, czyli wymagającym sygnału taktującego (zegarowego).
Advertisements

Tryby adresowania Prawie każda operacja wykonywana przez mikroprocesor wykonywana jest na pewnych argumentach (lub argumencie). Sposoby wskazywania argumentów.
Zerowanie mikroprocesorów Cel: wprowadzenie mikroprocesora w określony stan początkowy Zwykle realizowany poprzez: inicjalizację licznika rozkazów (PC)
Architektura jednostki centralnej RD MBR MAR IRPC +1 WR jednostka sterująca ALU A F Adres Dane Rejestry: MAR – (Memory Address Register) rejestr adresowy.
Programowanie w PMC.
Wykonał : Marcin Sparniuk
CPU.
Lista rozkazów Działanie mikroprocesora jest kontrolowane poprzez rozkazy (instrukcje). Dla każdego typu mikroprocesora istnieje specyficzny zbiór rozkazów,
Architektura szynowa systemu mikroprocesorowego szyna danych szyna sterująca szyna adresowa µP szyna danych szyna adresowa D7,..., D1, D0 A15,..., A1,
Mapa pamięci mikrokontrolera
Wykład 5 Przerwania w systemie SAB80C537 dr inż. Andrzej Przybył
Podstawowe składniki funkcjonalne procesora i ich rola.
Alokacja pamięci struct Test {char c; int n; double x; } st1; st1 cnxcnx
Systemy operacyjne Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Systemy operacyjne Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Tablice.
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
Magistrala & mostki PN/PD
Komputer, procesor, rozkaz.
Temat nr 10: System przerwań
ARCHITEKTURA WEWNĘTRZNA KOMPUTERA
Płyty główne Budowa.
Mikroprocesory i mikrokontrolery
Układy wejścia-wyjścia
Komputer a system komputerowy
Programowalny układ we-wy szeregowego 8251
Architektura komputerów
Urządzenia zewnętrzne
przykładowy 8-bitowy mikroprocesor uniwersalny CISC
Technika Mikroprocesorowa 1
Technika Mikroprocesorowa 1
MCS51 - wykład 2.
Dekodery adresów.
Mikroprocesor Z80 lista rozkazów
Mikroprocesor Z80 przerwania.
Programowalny układ we/wy równoległego.. Wyprowadzenia układu.
MCS51 - wykład 6.
Architektura komputerów
Architektura komputerów
Wyrażenia algebraiczne
Cyfrowe układy logiczne
Sekwencyjne bloki funkcjonalne
Zasada działania komputera
Etapy pracy biosu.
Architektura systemów komputerowych (jesień 2013)
Budowa i rodzaje procesorów.
Mikroprocesory.
Mikroprocesory mgr inż. Sylwia Glińska.
Przerwanie ang. interrupt.
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Pamięć komputerowa S t r u k t u r a p a m i ę c i.
Architektura PC.
Podstawy informatyki 2013/2014
Wykład 7 Synchronizacja procesów i wątków
Asembler MCS51. Budowa programu w asemblerze W ogólnym przypadku linia programu w asemblerze ma następującą budowę: na przykład: tuskocz:adda,r0 ;dodanie.
Procesor – charakterystyka elementów systemu. Parametry procesora.
Złożone układy kombinacyjne
WYKŁAD 3 Temat: Arytmetyka binarna 1. Arytmetyka binarna 1.1. Nadmiar
Procesor, pamięć, przerwania, WE/WY, …
Pamięć DRAM.
Pamięć SRAM.
Zasady arytmetyki dwójkowej
Architektura systemów komputerowych (jesień 2015) Wykład 5 Budowa i działanie komputera dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki.
Tryby adresowania i formaty rozkazów mikroprocesora
POLITECHNIKA POZNAŃSKA
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
POLITECHNIKA POZNAŃSKA
Mikrokontrolery System przerwań
Mikrokontrolery MSP430 DMA
Format rozkazu Tryby adresowania.
Zapis prezentacji:

Architektura systemów komputerowych jesień 2013 Wykład 6 Mikroprocesor Z80 dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz

Materiały źródłowe http://z80-heaven.wikidot.com/control-structures http://we.pb.edu.pl/~kaie/kaie-md/Lab/TM2EDsem4instr.pdf http://z80-heaven.wikidot.com/control-structures http://edu.i-lo.tarnow.pl/inf/retro/004_z80_inst/0007.php Marcin Peczarski Instytut Informatyki, Uniwersytet Warszawski, Materiały do wykładu: Mikroprocesor

Geneza mikroprocesora Zbyt czasochłonne projektowanie od podstaw z bramek logicznych nowego modelu np. kalkulatora lub sterownika windy Podczas projektowania łatwo popełnić trudny do usunięcia błąd Układ uniwersalny – mikroprocesor Nowa funkcjonalność przez wymianę programu

Geneza mikroprogramowania Zbyt czasochłonne projektowanie od podstaw z bramek logicznych nowej jednostki sterującej (mikro)procesora Podczas projektowania łatwo popełnić trudny do usunięcia błąd Uniwersalna jednostka sterująca Nowa funkcjonalność przez wymianę mikroprogramu

Mikroprogramowanie

Kod maszynowy a Asembler Kod maszynowy – binarny sposób opisu rozkazów procesora Każda architektura ma swój unikalny kod maszynowy W obrębie tej samej architektury kod maszynowy może być nieco różny dla poszczególnych modeli procesorów Asembler – język programowania niskiego poziomu Jedno polecenie odpowiada zwykle jednemu rozkazowi maszynowemu Każda architektura ma swój unikalny Asembler

Architektura mikroprocesora

Dlaczego Z80? Jeden z najpopularniejszych mikroprocesorów 8-bitowych Nadal produkowany i używany Bezpośredni wpływ na najpopularniejszą obecnie architekturę x86 Kompromisy projektowe, kompatybilność z 8080 Wystarczająco prosty

Wykorzystanie procesora  Komputery domowe ZX 80/81 ZX Spectrum Amstrad CPC Spectravideo Commodore 128 regulatory przemysłowe sprzęt pomiarowy

Cechy procesora 8-bitowa magistrala danych  16-bitowa magistrala adresowa  możliwość bezpośredniego adresowania 64 kB pamięci możliwość wykonywania operacji na bitach, słowach 8- i 16-bitowych  158 rozkazów (w tym 78 rozkazów wykonywanych przez 8080)  dwie linie przerwań (maskowalna i niemaskowalna) układ automatycznego odświeżania pamięci dynamicznych RAM pojedyncze zasilanie +5V sygnały logiczne TTL

Opis wyprowadzeń procesora

Opis wyprowadzeń procesora A15-A0 Magistrala Adresowa (wyjście, aktywna w stanie wysokim, trójstanowa). Linie A15-A0 tworzą 16-bitową magistralę adresową. Udostępnia ona adresy do wymiany informacji z pamięcią poprzez magistralę danych(do 64K bajtów) oraz do komunikacji z urządzeniami I/O (ang. Input / Output - wejście / wyjście). BUSACK Bus Acknowledge - Potwierdzenie Zwolnienia Magistral (wyjście, aktywne w stanie Niskim). BUSACK informuje żądające tego urządzenie zewnętrzne, iż magistrale adresowa, danych oraz sygnały sterujące MREQ, IORQ, RD i WR mikroprocesora przeszły w stan wysokiej impedancji (stały się nieaktywne elektrycznie). Urządzenie zewnętrzne może teraz przejąć pełną kontrolę nad magistralami w systemie. BUSREQ Bus Request - Żądanie Zwolnienia Magistral (wejście, aktywne w stanie Niskim). BUSREQ posiada wyższy priorytet niż NMI i jest zawsze rozpoznawane na końcu bieżącego cyklu maszynowego. BUSREQ wymusza stan wysokiej impedancji na magistrali adresowej, magistrali danych oraz dla sygnałów sterujących MREQ, IORQ, RD i WR, w celu przejęcia tych linii przez inne urządzenie w systemie. Wejście BUSREQ zwykle łączy się równolegle z liniami urządzeń i dlatego wymaga zewnętrznego podciągnięcia napięcia przy takich zastosowaniach (np. przez rezystor 4,7k do 5V). Przedłużone okresy BUSREQ spowodowane operacjami DMA (ang. Direct Memory Access - bezpośredni dostęp do pamięci) mogą spowodować problemy z odświeżaniem dynamicznych pamięci RAM przez mikroprocesor.

Opis wyprowadzeń procesora D7-D0 Magistrala Danych (wejście/wyjście, aktywna w stanie Wysokim, trójstanowa). Linie D7-D0 tworzą 8-bitową, dwukierunkową magistralę danych, używaną przy wymianie informacji z pamięcią i urządzeniami I/O. HALT Stan Zatrzymania (wyjście, aktywne w stanie Niskim). Sygnał HALT wskazuje, iż mikroprocesor wykonał instrukcję HALT i czeka albo na przerwanie niemaskowane, albo na maskowane (z włączoną maską) zanim powróci do wykonywania programu. Podczas stanu Zatrzymania mikroprocesor wykonuje cyklicznie rozkaz NOP w celu podtrzymania funkcji odświeżania pamięci dynamicznych. INT Żądanie Przerwania (wejście, aktywne w stanie Niskim). Żądanie Przerwania jest generowane przez urządzenia I/O. Mikroprocesor honoruje to żądanie na końcu bieżącej instrukcji, jeśli wewnętrzny przerzutnik flip-flop aktywacji przerwań (IFF), sterowany programowo, jest włączony Linia INT zwykle łączona jest równolegle z liniami urządzeń I/O i wymaga zewnętrznego podciągnięcia napięcia, aby umożliwić tę funkcję. IORQ Żądanie I/O (wyjście, aktywne w stanie Niskim, trójstanowe). Sygnał IORQ oznacza, iż na dolnej połowie magistrali adresowej znajduje się poprawny adres I/O do operacji odczytu lub zapisu I/O. IORQ jest również generowane współbieżnie z M1 podczas cyklu potwierdzenia przyjęcia przerwania w celu poinformowania urządzenia I/O, iż wektor odpowiedzi na przerwanie może zostać umieszczony na magistrali danych.

Opis wyprowadzeń procesora M1 Cykl Maszynowy Nr 1 (wyjście, aktywne w stanie niskim). Sygnał M1 wraz z MREQ oznacza, iż bieżący cykl maszynowy jest cyklem pobrania kodu rozkazu dla wykonywanej instrukcji. M1 wraz z IORQ oznacza cykl potwierdzenia przyjęcia przerwania. MREQ Żądanie dostępu do pamięci (wyjście, aktywne w stanie Niskim, trójstanowe). Sygnał MREQ oznacza, iż magistrala adresowa zawiera ważny adres dla operacji odczytu lub zapisu do pamięci. NMI Żądanie Przerwania Niemaskowanego (wejście, wyzwalane ujemnym zboczem: czyli przejściem ze stanu 1 na 0). Sygnał NMI posiada wyższy priorytet od INT. Sygnał NMI jest zawsze przyjmowany na końcu bieżącej instrukcji, bez względu na stan przerzutnika aktywacji przerwań (IFF) i automatycznie wymusza na procesorze restart od adresu 0066H. RD Odczyt (wyjście, aktywne w stanie Niskim, trójstanowe). Sygnał RD oznacza, iż mikroprocesor chce dokonać odczytu lub zapisu z pamięci albo urządzenia I/O. Zaadresowane urządzenie I/O lub pamięć powinni wykorzystywać ten sygnał do umieszczania informacji na magistrali danych mikroprocesora.

Opis wyprowadzeń procesora RESET (wejście, aktywne w stanie Niskim). Sygnał RESET inicjuje mikroprocesor w sposób następujący: kasuje przerzutnik aktywacji przerwań, zeruje rejestr PC oraz rejestry I i R, a następnie ustawia status przerwań na tryb 0. W czasie resetowania magistrale adresowa i danych przechodzą w stan wysokiej impedancji, a wszystkie wyjściowe linie sterujące przyjmują stan nieaktywny. Uwaga: sygnał RESET musi być aktywny przez minimum 3 pełne cykle zegara, zanim operacja resetowania zostanie zakończona. RFSH Odświeżanie (wyjście, aktywne w stanie Niskim). Sygnał RFSH wraz z MREQ oznacza, iż dolne siedem bitów magistrali adresowej systemu może zostać wykorzystane jako adres odświeżania dla pamięci dynamicznych. W górnej połowie magistrali adresowej jest umieszczana zawartość rejestru I. WAIT Oczekiwanie (wejście, aktywne w stanie Niskim). Sygnał WAIT informuje mikroprocesor, iż zaadresowana pamięć lub urządzenie I/O nie są jeszcze gotowe do wymiany informacji. Mikroprocesor powtarza cykle oczekiwania tak długo, aż sygnał ten powróci do stanu wysokiego. Przedłużone okresy oczekiwania mogą spowodować błędy w odświeżaniu przez mikroprocesor pamięci dynamicznych. WR Zapis (wyjście, aktywne w stanie Niskim, trójstanowe). Sygnał WR oznacza, iż magistrala danych mikroprocesora zawiera ważne dane, które mają zostać umieszczone w zaadresowanej pamięci lub w rejestrze I/O. CLK Zegar (wejście). Jednofazowe wejście zegarowe o poziomie MOS.

Rejestry procesora Każdy z rejestrów A, B, C, D, H, L jest 8-bitowy. Rejestry można łączyć w pary 16-bitowe: AB, CD, HL (H - starszy, L - młodszy bajt) Wyróżnionym rejestrem jest rejestr A - tzw. akumulator. W rejestrze tym umieszczony jest zazwyczaj jeden z argumentów operacji, a później wynik jej działania. W operacjach na liczbach 16-bitowych rolę akumulatora pełni para rejestrów HL.  W operacjach blokowych rejestr BC jest licznikiem.

Rejestry procesora Procesor Z80 dysponuje alternatywnym bankiem rejestrów A', F', ... itd. Dostęp do nich jest ograniczony – możliwy jest tylko poprzez rozkazy wymiany. EX AF, A'F' ; wymiana rejestrów AF z A'F' EXX ; wymiana wszystkich rejestrów

Rejestr flag procesora Bit Znacznik Nazwa Opis C Carry przeniesienie z najstarszego bajtu (np. przy sumowaniu) 1 N Negativ oznacza, że ostatnio wykonaną operacją było odejmowanie, informacja o tym jest istotna przy korekcji wyników 2 P/V Parity/Overflow po operacjach logicznych - oznacza parzystą liczbę jedynek w wyniku po operacjach arytmetycznych - przepełnienie w kodzie U2 4 H Half Carry przeniesienie połówkowe pomiędzy tetradami (z młodszej do starszej) 6 Z Zero znacznik jest ustawiony, gdy wynik operacji = 0 7 S Sign znak liczby w kodzie U2 (kopia najstarszego bitu wyniku)

Rejestry sterujące PC - Program Counter, 16-bitowy licznik rozkazów SP - Stack Pointer, 16-bitowy wskaźnik stosu. Przechowuje adres szczytu stosu. Stos rozrasta się "w dół" /adresy/. Programista ma dostęp tylko do szczytu stosu. Do wymiany danych ze stosem służą instrukcje PUSH i POP. IX, IY - rejestry indeksowe używane w rozkazach blokowych, czasem mogą zastępować rejestry HL I - Interrupt, wektor przerwania. Zawartość rejestru I uczestniczy w obliczaniu adresu podprogramu obsługi przerwania R - Refresh, rejestr odświeżania, jego zawartość jest umieszczana w cyklu M1 (w drugiej połowie) na magistrali adresowej (na młodszym bajcie)

Cztery podstawowe operacje sprzętowe Operacja/sygnały MREQ* IOREQ* RD* WR* odczyt danych: MEM --> CPU 1 zapis danych: CPU --> MEM odczyt z portu we/wy: I/O --> CPU zapis do portu we/wy: CPU --> I/O

Przesyłanie danej 8-bitowej LD d, s LD d, n 0 1 d s 00 d 110 n d argument 000 001 010 011 100 101 110 111 B C D E H L (HL) A d, s argument 000 001 010 011 100 101 110 111 B C D E H L (HL) A Adresowanie rejestrowe bezpośrednie (pośrednie) Adresowanie natychmiastowe

Przesłanie danej 8-bitowej (adresy) Adresowanie bezpośrednie (adresy są 16-bitowe) LD (p), A LD A, (p) LD (aa), A LD A, (aa) 000 p d 010 0 0 1 1 d 0 1 0 aal aah p para rejestrów 0 BC 1 DE d kierunek 0 z akumulatora do pamięci 1 z pamięci do akumulatora

Używanie rejestrów indeksowych LD r, (HL) LD r, (i + d) 0 1 r 1 1 0 1 1 i 1 1 1 0 1 0 1 r r r 1 0 0 d r rejestr 000 001 010 011 100 101 110 111 B C D E H L (HL) A i rejestr indeksowy 0 IX 1 IY

Używanie rejestrów indeksowych LD (HL), n LD (i + d), n 0 0 1 1 0 n 1 1 i 1 1 1 0 1 0 0 1 1 0 d n i rejestr indeksowy 0 IX 1 IY

Rejestry zapasowe i flagi EX AF, AF’ EXX 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 S Z - AC P/V N CY S – najstarszy bit wyniku operacji, wynik ujemny Z – wynik operacji zerowy AC – pomocnicze przeniesienie z pozycji 3, arytmetyka BCD P/V – znacznik parzystości dla operacji logicznych i nadmiaru (ang. overflow) dla operacji arytmetycznych N – znacznik zerowany przy wykonywaniu dodawania i ustawiany przy wykonywaniu odejmowania, arytmetyka BCD CY – znacznik przeniesienia (pożyczki przy odejmowaniu)

Rotacje i przesunięcia bitowe RL x RR x RLC x RRC x SLA x SRL x SRA x x : A, B, C, D, E, H, L, (HL), (IX + d), (IY + d)

Operacje na adresach Ładowanie LD r, nn LD r, (aa) LD (aa), r r: BC, DE, HL, SP, IX, IY Zamiana EX DE, HL Inkrementacja i dekrementacja INC r DEC r

Operacje na adresach Arytmetyka 16-bitowa ADD HL, r ADC HL, r SBC HL, r r: BC, DE, HL, SP Dodawanie i odejmowanie wartości w rejestrach indeksowych ADD IX, p gdzie p ∈ {BC, DE, SP, IX} ADD IY, p gdzie p ∈ {BC, DE, SP, IY}

Operacje stosowe Stos to blok pamięci. Rejestr SP wskazuje wierzchołek stosu – adres ostatniego zajętego bajtu. Stos rośnie w dół – w kierunku mniejszych adresów. PUSH p Odkłada na stos najpierw starszy, potem młodszy bajt argumentu (architektura little-endian). Zmniejsza SP o 2 p ∈ {AF, BC, DE, HL, IX, IY} POP p Zdejmuje ze stosu najpierw młodszy, potem starszy bajt i umieszcza je w argumencie. Zwiększa SP o 2.

Operacje stosowe Inicjowanie wskaźnika stosu LD SP, nn LD SP, (aa) LD SP, p gdzie p ∈ {HL, IX, IY} Manipulowanie wierzchołkiem stosu INC SP DEC SP EX (SP), p gdzie p ∈ {HL, IX, IY}

Skoki i podprogramy JP aa 1 1 0 0 0 0 1 1 aal aah wykonuje skok pod podany adres (wpisuje aa do PC) odkłada na stos adres następnego rozkazu (adres powrotu) i wykonuje skok pod podany adres 1 1 0 0 1 1 0 1 aal aah CALL aa zdejmuje ze stosu adres powrotu i wykonuje skok pod ten adres RET 1 1 0 0 1 0 0 1

Skoki warunkowe JP w, aa CALL w, aa RET w 1 1 w 0 1 0 aal aah w skrót warunek skoku 000 NZ Z = 0 001 Z Z = 1 010 NC CY = 0 011 C CY = 1 100 PO P/V = 0 101 PE P/V = 1 110 P S = 0 111 M S = 1 1 1 w 1 0 0 aal aah CALL w, aa RET w 1 1 w 0 0 0

Skoki względne JR d JR v, d 0 0 0 1 1 0 0 0 n v skrót warunek skoku 00 NZ Z = 0 01 Z Z = 1 10 NC CY = 0 11 C CY = 1 0 0 1 v 0 0 0 d JR v, d Skok względny dodaje do PC wartość d traktowaną jako liczba ze znakiem.

Przykłady programów

Pętle zm: equ 20h ;deklaracja zmiennej org 0h ;adres poczatkowy programu ld sp,38h ;zainicjowanie wskaznika stosu ld b,8 ;B=licznik petli petla: ld a,b add a,b ld c,a push bc ;zapis na stos 2 bajtow djnz petla ;realizacja petli programowej ld hl,zm ld (hl),a ;zapis do zmiennej 'zm' halt .end

Pętle i tablice tab: equ 20h ;deklaracja zmiennej org 0h ;adres poczatkowy programu ld sp,28h ;zainicjowanie wskaznika stosu ld hl,1 ld de,2 add hl,de ;dodawanie 2-bajtowe push hl ;zapis na stos slowa 16-bitowego ex de,hl ;zamiana zawartosci HL i DE ld b,2 ;B=licznik petli petla: pop de ;odczyt ze stosu 2 bajtow djnz petla;realizacja petli programowej halt .end

Tablice w assemblerze wygodnym narzędziem do deklarowania adresu początkowego zmiennej programowej, prostej lub złożonej (tablicy), jest dyrektywa asemblera EQU znak: equ 110h ;zadeklarowanie 1-bajtowej zmiennej "znak" znaki: equ 111h ;zadeklarowanie 15-bajtowej tablicy "znaki" ;o adresie początkowym 111h liczba: equ 120h ;zadeklarowanie zmiennej 2-bajtowej liczba znak: equ 110h znaki: equ znak+1 liczba: equ znaki+15

Dostęp sekwencyjny do tablicy Należy do wybranego rejestru 16-bitowego załadować adres początkowy interesującej na tablicy, a następnie odpowiednio czytać lub zapisywać jej kolejne komórki, zwiększając po każdej operacji wartość tego rejestru rozkazem INC. ld b,15 ;dlugosc tablicy znakow ld hl,znaki ;zainicjowanie rejestru adresujacego czysc: ld (hl)," " ;wpisanie spacji inc hl ;modyfikacja adresu djnz czysc ;realizacja petli programowej dostęp sekwencyjny do tablicy od końca ld b,liczba-znaki ;dlugosc tablicy znakow wyliczona aut. ld ix,liczba-1 ;zainicjowanie rejestru adresujacego ;na adres ostatniej komorki tabl. "znaki" litA: ld (ix),"A" ;wpisanie litery A dec ix ;modyfikacja adresu djnz litA ;realizacja petli programowej

Dostęp swobodny do tablicy ld bc,0 ;rejestr indeksujacy od 0 do 14 czysc: ld hl,znaki ;kazdorazowa inicj. adresu pocz.tablicy add hl,bc ;dodanie indeksu, HL-> wybrany element ld (hl)," " ;wpisanie spacji inc bc ;modyfikacja indeksu ld c,a ;sprawdzenie warunku konca cp 15 ;czy indeks < 15 jr c,czysc ;skok jesli tak

Operacje blokowe  Przemieść w pamięci łańcuch danych o długości 737 bajtów spod adresu DATA do BUFFER  LD   HL, DATA    ; adres start. łańcucha danych LD   DE, BUFFER  ; adres start. miejsca docelowego LD   BC, 737     ; długość łańcucha LDIR             ; prześlij łańcuch Polecenie LDIR przemieści obszar pamięci wskazywany przez HL do obszaru pamięci wskazywanego przez DE. Sekwencyjnie zwiększa HL i DE, zmniejsza BC, kontynuuj e, aż BC = 0.

Operacje blokowe Zadanie: skopiuj łańcuch tekstowy (o długości ograniczonej do 132 znaków) z adresu DATA pod adres BUFFER. Kopiowanie trwa do momentu napotkania znaku '$' lub przesłania wszystkich 132 znaków. LD   HL, DATA    ; adres początku łańcucha       LD   DE, BUFFER  ; adres docelowego bufora       LD   BC, 132     ; maksymalna długość łańcucha       LD   A, '$'      ; kod zakończenia łańcucha LOOP: CP   (HL)        ; porównaj znak z '$'       JR   Z, END     ; idź na koniec, jeśli znak się zgadza       LDI              ; przenieś znak spod (HL) do (DE)                        ; zwiększ HL i DE, zmniejsz BC       JP   PE, LOOP    ; wróć do LOOP, jeśli pozostało więcej znaków END:  HALT             ; inaczej przejdź do zakończenia.       .END             ; Uwaga: znacznik P/V jest używany ; do informowania, że BC osiągnął zero.