4. Kdwanie rzkazów Załącznik d ćwiczenia w śrdwisku MASM32 Przesyłanie danych i zarządzanie danymi Prcesr 32-bitwy Intel ma skmplikwane reguły kdwania rzkazów, pnieważ prcesr mże perwać 8-, 16- lub 32-bitwymi danymi, 16- lub 32-bitwymi adresami i wyknywać rzkazy 16- lub 32- bitwe. Rzkazy 32-bitwych prcesrów Intel zajmują d 1 d 12 bajtów. Średni rzmiar rzkazu 3,2 bajta. W pierwszych 1 lub 2 bajtach znajdują się kd rzkazu, infrmacja typie danej, infrmacja istnieniu następnych bajtów, w których są umieszczane stałe i adres względny (przesunięcie). Jednbajtwe rzkazy nie ptrzebują perandów. Rzkazy mają strukturę: Pierwszy_bajt_kdu_peracji [Drugi_bajt_kdu_peracji] [Byte_ md r/m ] [Byte_ sib ] [Bajty_przesunięcia] [Bajty_danej] Nieknieczne elementy struktury są pkazane w nawisach kwadratwych. Pla md r/m i sib definiują tryb adresacji i rejestry. Każde z pól Bajty_przesunięcia i Bajty_danej mże być pustym lub mieć rzmiar 1, 2 lub 4 bajty. Struktury pól rzkazów przedstawia tab. 1. Struktury pól rzkazów 32-bitweg prcesra Intel Ple rzkazu Struktura bajta Pierwszy_bajt_kdu_peracji B B B B B B B B Drugi_bajt_kdu_peracji Pierwszy_bajt_kdu_peracji B B B B B B B w Drugi_bajt_kdu_peracji Pierwszy_bajt_kdu_peracji B B B B B B s B Pierwszy_bajt_kdu_peracji B B B B B B s w Pierwszy_bajt_kdu_peracji B B B B B B d w Pierwszy_bajt_kdu_peracji B B B B B reg Pierwszy_bajt_kdu_peracji B B B B w reg Pierwszy_bajt_kdu_peracji B B B s2 B B B Drugi_bajt_kdu_peracji B B sr3 B B B Byte_ md r/m md B B B r/m Byte_ md r/m md reg r/m Byte_ md r/m md sr3 r/m Byte_ sib ss ind base Byte_ eee 1 1 eee reg Bajty_przesunięcia przes8 Bajty_przesunięcia przes16_0 przes16_1 Bajty_przesunięcia przes32_0 przes32_1 przes32_2 przes32_3 Bajty_danej dana8 Bajty_danej dana16_0 dana16_1 Tabela 1.
Bajty_danej dana32_0 dana32_1 dana32_2 dana32_3 Bajty_danej numer prtu W tej tabeli i dalej znaczn: B bit z wartścią 0 lub 1, d ple kierunku (d = 0 - ple reg jest interpretwane jak źródł, a ple md r/m lub md ss ind base jak miejsce przeznaczenia, d = 1 - ple reg jest interpretwane jak miejsce przeznaczenia, a ple md r/m lub md ss ind base jak źródł), dana bajty rzkazu zawierające daną, eee 3-bitwe ple z indeksem rejestru sterwania (Cntrl Register), debugwania (Debug Register) lub testwania (Test Register), md 2-bitwe ple z infrmacją strukturze rzkazu i trybie adresacji, przes bajty rzkazu zawierające adres względny (przesunięcie), r/m 3-bitwe ple z infrmacją miejsce perandu, reg 3-bitwe ple z indeksem rejestru gólneg przeznaczenia, s2 2-bitwe ple z indeksem rejestru segmentweg, sr3 3-bitwe ple z indeksem rejestru segmentweg, s - znacznik rzszerzenia znakweg dla danej, w jednbitwy znacznik rzmiaru danej (w = 0 jeden bajt, w = 1 pełny rzmiar, tj. 16 lub 32 bitów w zależnści d wartści pla reg). Wartść pla reg wskazuje na rejestr w zależnści d pla w w spsób przedstawiny w tab. 2. Tabela 2. Kdwanie rejestru gólneg przeznaczenia w zależnści d pól reg i w Rejestr Ple Operacja 16-bitwa Operacja 32-bitwa reg w=0 w=1 lub brak pla w w=0 w=1 lub brak pla w 000 AL AX AL EAX 001 CL CX CL ECX 010 DL DX DL EDX 011 BL BX BL EBX 100 AH SP AH ESP 101 CH BP CH EBP 110 DH SI DH ESI 111 BH DI BH EDI Pla s2 i sr3 zawierają infrmacji indeksie rejestru segmentweg (tab. 3). Kdwanie rejestrów segmentwych w plach s2 i sr3 Tabela 3. Rejestr segmentwy Ple s2 Ple sr3 00 01 10 11 000 001 010 011 100 101 110 111
ES CS SS DS ES CS SS DS FS GS - - Pla 2-bitwe md i 3-bitwe r/m używane są d kdwania infrmacji strukturze rzkazu i trybie adresacji (tab. 4a i 4b). Tryb adresacji w przypadku istnienia bajta md r/m i braku bajta sib Tabela 4a. Adres efektywny lub rejestr Ple Adresacja 16-bitwa Adresacja 32-bitwa md r/m Operacja 16-bitwa Operacja 32-bitwa Operacja 16-bitwa Operacja 32-bitwa w=0 w=1 w=0 w=1 w=0 w=1 w=0 w=1 00 000 DS:[BX+SI] DS:[EAX] 00 001 DS:[BX+DI] DS:[ECX] 00 010 SS:[BX+SI] DS:[EDX] 00 011 SS:[BX+DI] DS:[EBX] 00 100 DS:[SI] według bajta sib 00 101 DS:[DI] DS:przes32 00 110 DS:przes16 DS:[ESI] 00 111 DS:[BX] DS:[EDI] 01 000 DS:[BX+SI+przes8] DS:[EAX+przes8] 01 001 DS:[BX+DI+przes8] DS:[ECX+przes8] 01 010 SS:[BX+SI+przes8] DS:[EDX+przes8] 01 011 SS:[BX+DI+przes8] DS:[EBX+przes8] 01 100 DS:[SI+przes8] według bajta sib 01 101 DS:[DI+przes8] SS:[EBP+przes8] 01 110 SS:[BP+przes8] DS:[ESI+przes8] 01 111 DS:[BX+przes8] DS:[EDI+przes8] 10 000 DS:[BX+SI+przes16] DS:[EAX+przes32] 10 001 DS:[BX+DI+przes16] DS:[ECX+przes32] 10 010 SS:[BX+SI+przes16] DS:[EDX+przes32] 10 011 SS:[BX+DI+przes16] DS:[EBX+przes32] 10 100 DS:[SI+przes16] według bajta sib 10 101 DS:[DI+przes16] SS:[EBP+przes32] 10 110 SS:[BP+przes16] DS:[ESI+przes32] 10 111 DS:[BX+przes16] DS:[EDI+przes32] 11 000 AL AX AL EAX AL AX AL EAX 11 001 CL CX CL ECX CL CX CL ECX 11 010 DL DX DL EDX DL DX DL EDX 11 011 BL BX BL EBX BL BX BL EBX 11 100 AH SP AH ESP AH SP AH ESP 11 101 CH BP CH EBP CH BP CH EBP 11 110 DH SI DH ESI DH SI DH ESI 11 111 BH DI BH EDI BH DI BH EDI Tryb adresacji w przypadku istnienia bajtów md r/m i sib (adresacja tylk 32-bitwa) Tabela 4b. Ple md base Adres efektywny 00 000 DS:[EAX+ind*ss] 00 001 DS:[ECX+ind*ss] 00 010 DS:[EDX+ind*ss] 00 011 DS:[EBX+ind*ss] 00 100 SS:[ESP+ind*ss] 00 101 DS:[przes32+ind*ss] 00 110 DS:[ESI+ind*ss] 00 111 DS:[EDI+ind*ss] 01 000 DS:[EAX+ind*ss+przes8] 01 001 DS:[ECX+ind*ss+przes8] 01 010 DS:[EDX+ind*ss+przes8] 01 011 DS:[EBX+ind*ss+przes8] 01 100 SS:[ESP+ind*ss+przes8] 01 101 DS:[przes32+ind*ss+przes8] 01 110 DS:[ESI+ind*ss+przes8] 01 111 DS:[EDI+ind*ss+przes8] 10 000 DS:[EAX+ind*ss+przes32] 10 001 DS:[ECX+ind*ss+przes32]
10 010 DS:[EDX+ind*ss+przes32] 10 011 DS:[EBX+ind*ss+przes32] 10 100 SS:[ESP+ind*ss+przes32] 10 101 DS:[przes32+ind*ss+przes32] 10 110 DS:[ESI+ind*ss+przes32] 10 111 DS:[EDI+ind*ss+przes32] Pla ss i ind wskazują na wartść mnżnika indeksacji i na rejestr indekswy (tab. 5). Kdwanie mnżnika indeksacji i rejestru indeksweg w plach ss i ind Tabela 5. Mnżnik Rejestr indekswy Ple ss Ple ind 00 01 10 11 000 001 010 011 100 101 110 111 1 2 4 8 EAX ECX EDX EBX - przes32 ESI EDI Ple eee jest zastswane d kdwania rejestru sterwania (Cntrl Register), debugwania (Debug Register) lub testwania (Test Register) (tab. 6). Tabela 6. Kdwanie rejestru sterwania (Cntrl Register), debugwania (Debug Register) lub testwania (Test Register) w plu eee Kd w plu eee Cntrl Register Debug Register Test Register 000 CR0 DR0-001 - DR1-010 CR2 DR2-011 CR3 DR3-100 CR4 - - 101 - - - 110 - DR6 TR6 111 - DR7 TR7 Na krk rzmieszczenia rzkazów w pamięci (2 lub 4 bajty) wskazuje wartść jedneg z bitów znacznika dstępu deskryptra segmentu CS. Ten znacznik definiuje też dmyślny rzmiar perandów i adresu efektywneg. 5. Rzkazy prcesra Intel W dkumentacji firmy Intel rzkazy 32- bitwych prcesrów są pdzielne na grupy: Data Transfer przesyłanie danych, Segment Cntrl sterwanie segmentami, Flag Cntrl sterwanie znacznikami, Arithmetic peracje arytmetyczne, Lgic peracje lgiczne (bitwe), Shift/Rtate przesuwanie bitwe, String Manipulatin peracje z wierszami (tablicami),
Bit Manipulatin peracje bitwe, Cntrl Transfer przejście sterwane, Cnditinal Jumps skki warunkwe, Cnditinal Byte Set warunkwe ustawienie bajtu, Interrupt Instructins rzkazy przerwań, Prcessr Cntrl sterwanie prcesrem, Prefix Bytes (bajty prefiksu), Prtectin Cntrl (sterwanie chrną), High Level Language Supprt ptrzymanie języka wyskieg pzimu, Operating System Supprt ptrzymanie systemu peracyjneg, Prcessr Extensin Instructin (instrukcje kprcesra), MMX Unit Instructins (instrukcje jednstki MMX). Rzpatrzmy rzkazy prcesrów Intel według grup. Kdwanie rzkazów prcesrów Intel jest przedstawine w tabelach przytcznych niżej, gdzie znaczn: A rejestr-akumulatr EAX (AX, AH, AL), EA adres efektywny, Num numer prtu, param8/16/32 parametr 8-, 16- lub 32-bitwy, przes8/16/32 przesunięcie 8-, 16- lub 32-bitwe, P pamięć, R rejestr, r8/16/32 rejestr 8-, 16- lub 32-bitwy, R/P rejestr lub pamięć, Rs rejestr segmentwy. 5.1. Grupa Data Transfer (przesyłanie danych) Wyknując rzkaz mv dbirca, źródł (tab. 7) prcesr mże przesłać daną z rejestru d rejestru, z kmórki pamięci d rejestru, w tym d akumulatra, i dwrtnie, raz mże zapisać d rejestru lub d kmórki pamięci daną bezpśrednią. Dana mże być 8-, 16- lub 32 bitwa. Nie istnieje mżliwść przesyłania danych bezpśredni między kmórkami pamięci. W przypadku przesyłania danej d rejestru segmentweg ma miejsce zakaz przerwań. Rzkaz mvsx w prcesie przesyłania danej rzszerza znak z bajta na słw (pdwójne słw) lub ze słwa na pdwójne słw. Pdbny rzkaz mvzx rzszerza daną zerami w strnę starszeg bajta lub słwa. W prcesie wyknania rzkazów push i pp prcesr ładuje daną na sts lub zdejmuje daną ze stsu. Wierzch stsu znajduje się pd adresem SS:ESP, a sts rśnie w strnę mniejszych adresów. Wyknując rzkaz push prcesr zmniejsza ESP dwa lub cztery w zależnści d typu prcesra i zapisuje perand na wierzch stsu. W przypadku dkładania na sts bajta ma miejsce rzszerzenie znaku.
Rzkaz pp pwduje dczyt danej z wierzchu stsu z pd adresu SS:ESP, a następnie zwiększenie ESP dwa lub cztery w zależnści d typu prcesra. Operacja pp nie jest mżliwa, jeżeli miejscem przeznaczenia danej służy rejestr segmentwy CS. Rzkazy pusha/pushad i ppa/ppad bardz przydatne na pczątku i w kńcu pdprgramu, pnieważ ładują na sts i zdejmują ze stsu grupę rejestrów gólneg przeznaczenia. Klejnść dkładania na sts zawartści rejestrów: dla pusha: AX, CX, DX, BX, SP (przed dkładaniem), BP, SI, DI; dla pushad: EAX, ECX, EDX, EBX, ESP (przed dkładaniem), EBP, ESI, EDI.
Tabela 7 Kdwanie rzkazów grupy Data Transfer (przesyłanie danych) mv R/P, R mv R, R/P mv R/P, Rs mv Rs, R/P mv A, P mv P, A mv R, dana mv R/P,dana Mnemnik i perandy Bajt 0 Bajt 1 Bajt 2 1000100w 1000101w 10001100 10001110 1010000w 1010001w 1011wreg 1100011w md_reg_r/m md_reg_r/m md_sr3_r/m md_sr3_r/m przes przes dana md_000_r/m dana mvsx R, R/P 00001111 1011111w md_reg_r/m mvzx R, R/P 00001111 1011011w md_reg_r/m push R/P push R push Rs push FS/GS push dana pp R/P pp R pp Rs pp FS/GS 11111111 01010reg 000s2110 00001111 011010s0 10001111 01011reg 000s2111 00001111 pusha; pushad 01100000 ppa; ppad 01100001 xchg R/P, R; xchg R, R/P xchg R, A; xchg A, R in A, Num in A, DX ut Num, A ut DX, A 1000011w 10010reg 1110010w 1110110w 1110011w 1110111w md_110_r/m 10_sr3_000 dana md_000_r/m 10_sr3_001 md_reg_r/m Num Num lea R, P 10001101 md_reg_r/m Jasne, że klejnść zdejmwania ze stsu zawartści rejestrów jest dwrtna: dla ppa: DI, SI, BP, SP, BX, DX, CX, AX; dla ppad: EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX. Zamianę miejscami zawartści rejestru i drugieg rejestru, lub rejestru i akumulatra, lub rejestru i kmórki pamięci wyknuje rzkaz xchg. D wprwadzenia danej z prtu służy rzkaz in, a d wyprwadzenia danej d prtu - rzkaz ut. Jeżeli numer prtu znajduje się w granicach 0 255, t stsuje się rzkaz z bezpśrednim adreswaniem perandu. W przypadku, gdy numer prtu jest większy niż 255, stsuje się rejestr DX i adreswanie pśrednie rejestrwe. Maksymalnie mżliwy numer prtu w kmputerach PC jest równy 1023. Wyknując rzkaz lea prcesr przesyła d miejsca przeznaczenia przesunięcie adresu kmórki pamięci.