3_Przetwarzanie
Transkrypt
3_Przetwarzanie
Little / Big Endian Machines Podstawy techniki mikroprocesorowej ETEW006 15 Word 8 7 High Byte N+1 Przetwarzanie danych Typy procesorów 0 Low Byte 15 8 7 Word High Byte N 0 Low Byte N+1 N N+2 N+1 High Byte Low Byte Low Byte High Byte memory address N Andrzej Stępień Katedra Metrologii Elektronicznej i Fotonicznej N−1 Algorytm Endianness 15 8 7 0 High Low Byte Byte Word 32-bit microprocessor halfword ARM core word N+1 N N+2 63 Quardword N 32 31 0 High Doubleword Low Doubleword N+4 N Double Quardword 64 63 0 High Quardword Low Quardword N+8 N algorytm (algorithm) - przepis rozwiązania określonego zagadnienia, sposób postępowania doprowadzający do rozwiązania problemu; algorytm złożony jest z: sekwencja 1 N – sformułowania problemu do rozwiązania 0 31 16 15 Doubleword High Word Low Word 24547010.pdf IA-32 Intel Architecture. Software Developer’s Manual. Volume 1: Basic Architecture 127 Big Endian Little Endian Optymalizacja, przetwarzanie danych T – określenia danych wejściowych i postaci wyników sekwencja 2 – przedstawienia działania, jego struktury w postaci ciągu operacji, np. arytmetycznych, logicznych, podstawień itp. elementami struktury algorytmu są: – sekwencja – element wyboru warunku – pętla umożliwiająca wielokrotną realizację określonych operacji warunek 1 sekwencja 3 T warunek 2 N Przetwarzanie rozkazów Przetwarzanie rozkazów – sposób wykonania rozkazu w procesorze: Optymalizacja kompilatorów: rozkazy wykonywane przez procesor realizują funkcje, które najczęściej powtarzają się podczas kompilacji lista rozkazów dostosowana do potrzeb kompilatorów, a nie własności procesora założenia przydatne przy projektowaniu nowych konstrukcji procesorów Sposób przetwarzania danych - obciążenie rejestrów procesora i pamięci: register-to-register → przestrzenią roboczą są rejestry ogólnego przeznaczenia: – accumulator-based CPU, z akumulatorem związana jest większość instrukcji arytmetyczno-logicznych i wymiany danych – register-based CPU (register-to-register), rolę akumulatora pełnią rejestry ogólnego przeznaczenia memory-to-memory → bloki pamięci traktowane są jako przestrzeń robocza, zastępująca rejestry ogólnego przeznaczenia • podział wykonywanego rozkazu na standardowe fazy: – pobierania (Ifetch) rozkazu z pamięci i umieszczenia w wewnętrznym rejestrze rozkazów lub pamięci buforującej, – dekodowania (Reg/Dec) rozkazu, ustalenie typu wykonywanej operacji, np. pobrania argumentów, – wykonania (Exec) rozkazu, np. wymaganej operacji arytmetycznologicznej, obliczenia adresu itp. – zapisu (Wr) wyniku w rejestrach lub pamięci, • w przetwarzaniu sekwencyjnym (skalarnym) każda faza wykonywana jest oddzielnie, niezależnie od pozostałych, • w przetwarzaniu potokowym, strumieniowym (pipeline processing) poszczególne fazy różnych rozkazów są w zasadzie wykonywane równocześnie. 1 Sekwencyjne przetwarzanie rozkazów Sekwencyjne (skalarne) - każda faza wykonywana jest oddzielnie, Potokowe przetwarzanie rozkazów Potokowe (strumieniowe, pipeline processing) - poszczególne fazy niezależnie od pozostałych. Cycle 1 Cycle Cycle Cycle 3 4 2 Cycle 5 Ifetch Reg/Dec Exec Wr różnych rozkazów są wykonywana równocześnie. Cycle 1 Cycle Cycle 6 7 Ifetch Reg/Dec Exec Cycle Cycle Cycle 2 3 4 Ifetch Reg/Dec Exec Cycle 8 Cycle 9 Wr Reg/Dec Exec Wr Reg/Dec wykonania (Exec) rozkazu Exec zapisu (Wr) wyniku Wr Konflikty przy przetwarzaniu potokowym Wr Cycle 6 Wr Cycle 7 Ifetch Reg/Dec Exec Ifetch pobierania (Ifetch) rozkazu dekodowania (Reg/Dec) rozkazu Cycle 5 Ifetch Reg/Dec Exec Ifetch Ifetch pobierania (Ifetch) rozkazu Wr Ifetch Reg/Dec Exec Cycle 8 Wr Ifetch Reg/Dec Exec dekodowania (Reg/Dec) rozkazu Wr Ifetch Reg/Dec Exec Ifetch Reg/Dec wykonania (Exec) rozkazu Ifetch zapisu (Wr) wyniku Przetwarzanie potokowe - typ R • zasobów – ten sam zasób wykorzystywany jest przez dwie lub więcej faz równocześnie (ALU, rejestry lub pamięć): – każda operacja zapisu do rejestrów lub pamięci może być w konflikcie z fazą pobrania rozkazu lub argumentów Instrukcja typu R (dostęp do rejestru) złożona z 4 cykli maszynowych: • Ifetch: pobranie kodu instrukcji z pamięci programu • Reg/Dec: pobranie zawartości rejestru i dekodowanie instrukcji • Exec: ALU wykonuje operację na zawartości 2 rejestrów • Wr: wpis wartości zmiennej do rejestru • danych – jeśli argumentem następnego rozkazu jest wynik poprzedniego, który nie został obliczony: – wykonanie następnego rozkazu musi być wstrzymane z powodu niedostępności argumentu Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Ifetch Reg/Dec Exec Ifetch Reg/Dec • sterowania – gdy wykonywany jest rozkaz skoku warunkowego zależny od wskaźników ustalanych przez poprzednie, jeszcze nie zakończone rozkazy Przetwarzanie potokowe - LOAD Instrukcja typu LOAD złożona z 5 cykli maszynowych: • Ifetch: pobranie kodu instrukcji z pamięci programu • Reg/Dec: pobranie zawartości rejestru i dekodowanie instrukcji • Exec: obliczenie adresu zmiennej w pamięci danych • Mem: odczyt wartości zmiennej z pamięci danych • Wr: wpis wartości zmiennej do rejestru Wr Exec Ifetch Reg/Dec Wr Exec Wr – typ instrukcji znany po jej zdekodowaniu (Ifetch & Reg/Dec) Konflikt zasobów • zasobów – ten sam zasób wykorzystywany jest przez dwie lub więcej faz równocześnie (ALU, rejestry lub pamięć): – każda operacja zapisu do rejestrów lub pamięci może być w konflikcie z fazą pobrania rozkazu lub argumentów Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Ifetch Reg/Dec Exec Ifetch Reg/Dec Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Mem Wr Exec Mem Wr Exec Mem Ifetch Reg/Dec LOAD Wr – instrukcja wykonywana w 5 niezależnych blokach funkcjonalnych – każda instrukcja korzysta tylko 1 raz z pojedynczego bloku funkcjonalnego – pobranie kodu następnej instrukcji możliwe po zakończeniu poprzedniego – czas trwania pojedynczej instrukcji wynosi 5 cykli maszynowych – średni czas trwania instrukcji w programie wynosi 1 cykl maszynowy LOAD typ R Ifetch Reg/Dec Exec Ifetch Reg/Dec Mem Wr Exec Mem Wr Exec NOP Wr Ifetch Reg/Dec Wr – w jednej z faz musi wystąpić dodatkowy cykl oczekiwania 2 Konflikt danych Eliminacja konfliktów • danych – jeśli argumentem następnego rozkazu jest wynik poprzedniego, który nie został obliczony: – wykonanie następnego rozkazu (zatrzymanie potoku) wstrzymane z powodu niedostępności argumentu • czasy realizacji poszczególnych faz mogą się różnić w zależności od typu wykonywanej operacji, Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 LOAD Ifetch Reg/Dec Exec Ifetch Reg/Dec LOAD NOP NOP Mem Wr Exec Mem Wr Wr wstrzymanie Exec Wr potoku Exec Mem Ifetch Reg/Dec LOAD Ifetch Reg/Dec • takty zegarowe muszą być tak dobrane, aby dłużej trwające fazy były wykonywane przez całkowitą liczbę tych taktów, np. jałowe takty oczekiwania, Wr – rozwiązaniem konfliktu jest umieszczenie między rozkazami instrukcji niezależnej od argumentów, np. NOP lub innej (problem optymalizacji kompilatorów – rozkazy są wykonywane nie w takiej kolejności jak zostały napisane w programie) ARM7 / ARM9 (1/2) • powielenie niektórych wewnętrznych układów i równoległe wykonywanie tych samych operacji prowadzi do struktury superskalarnej, Thumb only a 16-bit wide system data bus, less power, smaller footprint, reducing system cost Debug support Multiplier (64-bit result) In-Circuit Emulator interface • do skrócenia czasu wykonywanych operacji przyczynia się umieszczenie argumentów w wewnętrznych rejestrach, a nie w pamięci; procesor musi być wyposażony w dużą liczbę wewnętrznych rejestrów, • zmniejszeniu liczby rozkazów potrzebnych do wykonania zadania sprzyja duża długość słowa maszynowego. ARM7 / ARM9 (2/2) ARM7TDMI (ARM7TDMI-S) ARM7 processors have a 3-stage instruction pipeline: Fetch: Fetching an instruction from the memory containing the code Decode: Decoding the instruction and prepare data path control signals for next cycle Execute: The instruction gets executed on the data path specified and the result is written back to the destination Higher performance ARM9 derivatives use a 5-stage pipeline to compensate for the memory access bottleneck of the 3-stage pipeline: Fetch: Fetch next instruction from memory Decode: Decode instruction and read register operands Execute: Execute instruction Data: Access data memory, if required Write-back: Write the result of the instruction back to the destination memory location Architektura procesora typu Bit Slice każdy blok funkcjonalny tworzą oddzielne układy zwane segmentami, np. ALU, rejestry istnieje możliwość wzajemnej współpracy (połączenia) segmentów w celu zbudowania procesora o zadanej długości słowa, np. dysponując procesorem 4-bitowym można zbudować procesor 8-, 16-, 24- ..-bitowy mikrokod procesora (microcode) jest pamiętany w pamięci ROM lub szybkiej pamięci RAM (dynamiczne mikroprogramowanie) najpopularniejszym procesorem segmentowym jest seria Am2900 (Advanced Micro Devices), np. Am2901: – struktura: 4-bitowa ALU, 16x4-bitowa pamięć RAM (rejestry), akumulator Q – wykonywane operacje: dodawanie z przeniesieniem (addition with carry), odejmowanie z pożyczką (subtraction with borrow), OR, AND, XOR i XNOR Fetch ARM9TDMI Fetch Execute Decode Decode Execute Memory Write The maximum clock frequency of the ARM9TDMI core is generally in the range 1.8 to 2.2 times the clock frequency of the ARM7TDMI core when compared on the same silicon process. Reducing the number of cycles for loads and stores gives a significant improvement in program execution time as typically around 30% of instructions are loads or stores. Cechy procesora typu CISC (1/2) J. Biernat: Architektura komputerów. Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław 2001 CISC (Complex Instruction Set Computer) - procesor: – o złożonej liście rozkazów mających różny, zmienny format – z małym zestawem rejestrów strukturalnych (dla użytkownika) – predefiniowane przeznaczenie rejestrów, np. A (akumulator), rejestry indeksowe do adresowania pamięci (wiele rozkazów wykonujących operacje na komórkach pamięci) – o rozbudowanych trybach adresowania – argumenty zawarte w: RAM, akumulatorze, zewnętrznych wejściach, domyślna wartość 0, trudności z racjonalnym wykorzystaniem zasobów procesora; przy prostych, elementarnych operacjach wykorzystanie niewielkiej części zasobów procesora – wynik operacji: przeniesienie dla innych segmentów (carry-out flag), znak (sign flag), przekroczenie zakresu (overflow flag), wynik zerowy (zero flag)... wzrost liczby taktów zegarowych przy wzroście złożoności instrukcji 3 procesor: – z małym zestawem rejestrów strukturalnych (dla użytkownika) – predefiniowane przeznaczenie rejestrów, np. A (akumulator), rejestry indeksowe do adresowania pamięci (wiele rozkazów wykonujących operacje na komórkach pamięci) 8086 SP BP SI DI Procesory DH DL CISC CH CL BH AH BL AL Status Flags R7 R7 R7 R6 R7 R6 R6 R5 R6 R5 R5 R4 R5 R4 R4 R3 R4 R3 R3 R2 R3 R2 R2 R1 R2 R1 R1 R0 R1 R0 R0 R0 temp trudności z racjonalnym wykorzystaniem zasobów procesora; przy prostych, elementarnych operacjach wykorzystanie niewielkiej części zasobów procesora ALU RB0..3 A X temp Y ALU PSW różny, zmienny format rozkazów: 0010 1 r r r ADD A, Rn ST72334 C51 B Procesory CISC C51 — Formaty instrukcji A temp ALU CC 0111 011 i dana AAA0 0 0 0 1 adres A ACALL adr_11 1011 0101 adres rel MOV @Ri, #dana CJNE A, adr, rel DPTR Intel Architecture Software Developer’s Manual. Volume 2: Instruction Set Reference. Intel, 1997, p.2-1 Procesory CISC 8086 — Formaty instrukcji Procesory CISC cykle maszynowe procesor: – o złożonej liście rozkazów mających różny, zmienny format Instruction Prefixes Opcode ModR/M SIB Dispacement Immediate wzrost liczby taktów zegarowych przy wzroście złożoności instrukcji C51: – 1 lub 2 cykle maszynowe dla wszystkich instrukcji Up to four 1 or 2 byte 1 byte 1 byte Address Address prefixes of opcode (if required) (if required) displacement displacement 1-byte each of 1, 2, or 4 of 1, 2, or 4 (optional) bytes or none bytes or none – 4 cykle maszynowe dla MUL AB oraz DIV AB (TYLKO w standardzie) ST7: 7 6 5 Mod 3 2 Reg/ Opcode 0 R/M 7 6 5 Scale 3 2 Index 0 – od 2 do 7 cykli maszynowych dla większości instrukcji – od 5 do 9 cykli maszynowych dla instrukcji CALL Base – 12 cykli maszynowych dla MUL Y,A (brak instrukcji DIV) SIB (Scale-Index-Base) ST7 FAMILY. PROGRAMMING MANUAL. STMicroelectronics, November 2005, p.8-29 Procesory CISC C51 — dostęp do pamięci CISC (Complex Instruction Set Computer) - procesor: Procesory CISC ST7 — dostęp do pamięci CISC (Complex Instruction Set Computer) - procesor: – predefiniowane przeznaczenie rejestrów, np. A (akumulator), rejestry indeksowe do adresowania pamięci (wiele rozkazów wykonujących operacje na komórkach pamięci) – predefiniowane przeznaczenie rejestrów, np. A (akumulator), rejestry indeksowe do adresowania pamięci (wiele rozkazów wykonujących operacje na komórkach pamięci) – o rozbudowanych trybach adresowania – o rozbudowanych trybach adresowania wewnętrzna pamięć RAM: MOV A, @Ri lub MOV @Ri, addr zewnętrzna pamięć RAM: MOVX A, @DPTR lub MOVX A, @Ri) pamięć kodu (stałe): MOVC A, @A+PC ; A ← (Ri)IDATA, i=0, 1 ; (Ri)IDATA ← (addr)DATA ; A ← (DPTR)XDATA ; A ← (256∗P2 + Ri)XDATA ; A ← (A + PC)CODE ld A, $55 ; A ← (55h), ld A, (X) ; A ← (X), Direct Indexed, no offset ld A, ($55,X) ; A ← (55h + X), Indexed & offset ld A, [$55] ; A ← ((55h)), Indirect & pointer ld A, ([$55],X) ; A ← ((55h) + X Indirect indexed & pointer ld A, #$55 ; A ← 55h, Immediate 4 www.intel.com: XP SP2 vs. Intel Prescott Cechy procesora typu CISC (2/2) What is "microcode" ? (1/2) Anything sufficiently complex that has been handcrafted by humans will contain errors. Modern software has millions of lines of source code, and modern processors have millions of transistors, so this applies to both. statystyka działania systemów operacyjnych i programów użytkowych wskazuje na częste wykonywanie operacji prostych i rzadkie złożonych sterowanie przepływem rozkazów realizowane programowo (mikro-kody); łatwa realizacja sterowania wykonywania złożonych rozkazów wymagających różnych okresów czasu Microsoft Operating Systems arrive on CD that is built to a particular Service Pack level, and errors found after that was made will be fixed via patches downloaded from their web site. Intel processors are manufactured to a particular stepping level, and errors found after that was made may be fixed via microcode updates sent to the processor, typically by BIOS on every system startup. Microcode updates are not stored permanently within the processor; they vanish when the power is cut, so every boot has to re-assert them. Intel® IXP1200 Network. Processor Family. Microcode Programmer’s Reference Manual. INTEL Corporation, March 2002, Part Number: 278304-011 80C196KB User's Guide. INTEL Corporation, November 1990, Order Number: 270651-003 What is "microcode" ? (2/2) microcode engine controls the CPU, allowing it to perform operations with any byte, word or double word in the 256 byte register space instructions to the CPU are taken from the queue and stored temporarily in the instruction register microcode engine decodes the instructions and generates the correct sequence of events to have the RALU perform the desired function MICROCODE ENGINE (1/2) uproszczoną strukturę mikroprocesora, o zredukowanej liście rozkazów zaproponował John Cocke (IBM Research w Yorktown, New York, 1974) wychodząc z założenia, że 20% dostępnych instrukcji zajmuje aż 80% czasu pracy procesora skrót RISC (Reduced Instruction Set Computer) zaproponował David Patterson (University of California, Berkeley, 1985) QUEUE 80C196KB User's Guide. INTEL Corporation, November 1990, Order Number: 270651-003 Cechy procesora typu RISC Cechy procesora typu RISC (2/2) prosta struktura wewnętrzna sterowanie przepływem rozkazów realizowane sprzętowo (brak mikro-kodów, eliminacja mikroprogramowania) uproszczenie trybów adresowania, zwykle jednolity format rozkazów (stała długość kodów instrukcji) większe możliwości wyboru uniwersalnych rejestrów mikroprocesora architektura typu load/store, przetwarzanie danych w oparciu o rejestry, a nie bezpośrednio na zawartości pamięci szybsze działanie → ideałem jest wykonanie każdej instrukcji w jednym cyklu procesora → zmniejszenie liczby taktów zegarowych tworzących cykl maszynowy (przetwarzanie potokowe) ułatwienie opracowania, wytworzenia i testowania: – nowego mikroprocesora – systemu operacyjnego i programu użytkowego – kompilatora wysokiego poziomu wykonanie operacji równoważnej wymaga większej liczby rozkazów w procesorze RISC niż w procesorze CISC obecnie skrót RISC tłumaczony jako Rational Instruction Set Computer idea RISC została wykorzystana w mikroprocesorze SPARC firmy Sun Microsystem; początek powstania tego co jest znane jako technologia MIPS, np. w komputerach Silicon Graphics, procesorze Alpha firmy DEC Procesory RISC MSP430 (1/2) Memory Data Bus – MDB 15 Single-cycle register operations 16-bit data bus allows direct manipulation of wordwide arguments Constant generator (CGx) provides six most used immediate values and reduces code size R0/PC Program Counter R1/SP Stack Pointer R2/SR/CG1 Status R3/CG2 Constant Generator Large 16-bit register file reduces fetches to memory 16-bit address bus allows direct access and branching throughout entire memory range Memory Address Bus – MAB 0 R4 Zero, Z Carry, C Overflow, V Negative, N General Purpose ....................... 16 16 R14 General Purpose R15 General Purpose dst scr 16-bit ALU MCLK MSP430x4xx Family User’s Guide. Texas Instruments, SLAU056G, 2007, p.3-3 5 MSP430x4xx Family User’s Guide. Texas Instruments, SLAU056G, 2007, p.3-18 Procesory RISC MSP430 (2/2) Procesory RISC MSP430 — formaty rozkazów 15 12 11 OP - Code 8 7 6 5 source register Ad B/W 4 As 3 www.ti.com 0 dest. register Format I 16 rejestrów uniwersalnych: Address Modes Source – R0 – licznik rozkazów PC 15 0 12 11 0 0 1 OP - Code As/Ad Addressing Mode – R1 – wskaźnik stosu SP 7 – R2 – rejestr statusowy SR lub generator stałych CG1 6 B/W 5 4 Ad 3 0 dest. register Format II Address Modes Destination Instructions Example: Orthogonality for two operand instructions – R3 – generator stałych CG2 – R4 .. R15 – rejestry ogólnodostępne Address Modes Source Ad Addressing Mode 27 bazowych + 24 emulowane instrukcje 15 0 13 12 0 10 1 OP - Code 9 8 0 S Offset Format III Contitional and unconditional Jumps (+/– 9 bit Offset) ortogonalne tryby adresowania - wszystkie instrukcje ze wszystkimi trybami adresowania i operandami Instructions Example: Non-Orthogonality for two operand instructions ATmega32A. 8-bit Microcontroller with 32K Bytes In-System Programmable Flash. Atmel, 2008, p.7 Procesory RISC AVR — ATmega32 AVR uses a Harvard architecture – with separate memories and buses for program and data (data space: Register File, I/O memory and internal SRAM or/and external SRAM if applicable) instructions in the program memory are executed with a single level pipelining – while one instruction is being executed, the next instruction is pre-fetched from the program memory (enables instructions to be executed in every clock cycle) fast-access Register File contains 32 x 8-bit general purpose working registers with a single clock cycle access time – allows single-cycle Arithmetic Logic Unit (ALU) operation in a typical ALU operation, two operands are output from the Register File, the operation is executed, and the result is stored back in the Register File – in one clock cycle ATmega32A. 8-bit Microcontroller with 32K Bytes In-System Programmable Flash. Atmel, 2008, p.10 Procesory RISC AVR — ATmega32 Working Registers Clear Register: CLR Rd ; 0 ≤ d ≤ 31 General Purpose Working Registers Clear Bits in Register: CBR Rd,K ; 16 ≤ d ≤ 31, ; 0 ≤ K ≤ 255 six of the 32 registers can be used as three 16-bit indirect address register pointers for Data Space addressing – efficient address calculations AVR 8-bit Instruction Set. Atmel, 0856G–AVR–07/08 Procesory RISC AVR — ATmega32 Load Memory R0 R1 R2 ................... R13 R14 R15 R16 R17 ................... R26 R27 R28 R29 R30 R31 $00 $01 $02 $0D $0E $0F first 32 locations of the user Data Space $10 $11 $1A $1B $1C $1D $1E $1F Low Byte High Byte Low Byte High Byte Low Byte High Byte X-pointer register Y-pointer register Z-pointer register AVR 8-bit Instruction Set. Atmel, 0856G–AVR–07/08 Procesory RISC AVR — ATmega32 Store Memory Load Indirect from Data Space to Register using Index X, Y or Z: LD Rd, X ; Rd ← (X), X: Unchanged, 0 ≤ d ≤ 31 LD Rd, Y+ ; Rd ← (Y), Y ← Y + 1, Y: Post incremented, 0 ≤ d ≤ 31 LD Rd, – Z ; Z ← Z – 1, Rd ← (Z), Z: Pre decremented, 0 ≤ d ≤ 31 Load Indirect from Data Space to Register using Index Y or Z: LDD Rd, Y+q ; Rd ← (Y+q), Y: Unchanged, ; q: Displacement, 0 ≤ d ≤ 31, 0 ≤ q ≤ 63 Load Direct from Data Space: LDS Rd, k ; Rd ← (k), 0 ≤ d ≤ 31 0 ≤ k ≤ 65535, Address Modes Destination Load Indirect from Program Memory: LPM Rd, Z ; Rd ← (Z), Z: Unchanged, 0 ≤ d ≤ 31 LPM Rd, Z+ ; Rd ← (Z), Z ← Z + 1, Z: Post incremented, 0 ≤ d ≤ 31 Store Indirect From Register to Data Space using Index X, Y or Z: ST X, Rr ; (X) ← Rr, X: Unchanged, 0 ≤ r ≤ 31 ST Y+, Rr ; (Y) ← Rr, Y ← Y+1, Y: Post incremented, 0 ≤ r ≤ 31 ST –Z, Rr ; Z ← Z – 1, (Z) ← Rr, Z: Pre decremented, 0 ≤ r ≤ 31 Store Indirect From Register to Data Space using Index Y or Z: STD Y+q, Rr ; (Y+q) ← Rr, Y: Unchanged, 0 ≤ r ≤ 31, ; q: Displacement, 0 ≤ q ≤ 63 Store Direct to Data Space: STS k, Rr ; (k) ← Rr, 0 ≤ k ≤ 65535, 0 ≤ r ≤ 31 6