Page 1
ASSEMBLER strona 1
ASSEMBLER
Definicje
Mnemonik������������������ ��������������� ������������Dyrektywa������������������ �������� �����������������������Operandy (argumenty) - liczby i inne nazwy z prawej strony mnemoników, oddzielamy je przecinkiem ‘,’Instrukcja���������������������������������������������������� � ���!������� ���������������������������������
����������� ����������"���������������������#��������������
Instrukcja maszynowa - binarny odpowiednik instrukcjiKomentarz����� ������#�$��������%;%����� ������������� ��������Liczba - szesnastkowa: ������������ �� �����������%H&�����$���� ������#�����������������������%0’
1202H, 0A010H������#���' zwyczajnie- ósemkowa: ��� ���������������%Q’ lub ‘O’.- binarna: ��� ���������������%B’
EOL = Carrier Return (13) + Line F�����()"����������� ��������
* ����$ ���# :NAZWA w Asemblerze ����������
����� WORD 2���+��������� DWORD 4� ��+��������� QWORD 810 bajtów TBYTE 10paragraf PARA 16strona PAGE 256segment SEGMENT 65536( !�"������� ����#���������������������� �� �"�����������������������)
Architektura mikroprocesora* ��� ���� �����������#�����#� ����,�-����������� �����������cykl rozkazowy,�.��������������������������pojedynczej instrukcji. Na jeden cykl rozkazowy przypada kilka cykli maszynowych������+�� ���������������������#��kilku cykli zegarowych. Jeden cykl zegarowy wykonywany jest w jednym takcie zegara. Poszczególne cykle maszynowe�������������������������� ������� ���������+��������,�/�����������'
BU������������������������"�0����������������������������� �#�����# ������� ������������� �����+������������������������������������ ����$���������#�������
IU�������������� �"�0������������� ���������������+������������������ ����������������� �������� ���potok).EU �������������� ��"�0���������������� ��������������������������������������123���������,����� ��������������������,��������� ���#������������������� ����� ������� "
AU����������������"�0������������# ������������ ���������������������!�� ���������!��� ���� �����,1+��������$�� �������������������������#�����+��� ��������� ����,������+����� ��������4/���������
������ �#��5/������������������#��������� �#,
Adresy
6����������������7)������,�8����������#�������������7��������+�,�-��������������������segmentu (okienko 65536-����������������+����������������#����������������������������������������+��� ����������#"��������������
������# ���offset"�������$����������������+��#���# ��������� �,�8��������+���� ���������������������# �����#����� ��������������,�.�#�������offsetu���(�����������#���������������������#����� (20 - bitowego) ojeden bajt, natomiast ( ! "���������#������������������%(&�����������#��������������#�������������� �����segmentu o 16 bajtów (adres segmentowy - adres paragrafu).
( ! ) - adres nie jest jednoznaczny �������������������������� ����,�9�$����������������������#�����������#��������������(:�����+������������ �������������!!��������������(:�����+������7������������������
�#��+� ���������������+��#,
Zapis adresu - w postaci: <segment> : <offset> � 0100H:0001H.
Page 2
ASSEMBLER strona 2
Dekodowanie adresu����������������� ��������������������������������������(:��������������7)�������� ��#���+���������������;������������������",�<��������� ������������������(:�������� �������������!!����,�* ����������
adres 20-bitowy.
Bufor obrazu��������� ��������������������8=>55����������$������������������,�8����������������# ����������'�)?@))A�������"�����)?)))A������",�B����������$����������������������7������'�(�������8=>55
��$�����������������7�������������������;��������������������������������������",�8������������������������������
)CA,�-��������������������������#������������+���������������������������������������������������������������
������������,�9�������������(:)�����+�, ( !�"�3�����������������$�����������# ���������������� ���������bajty (np. write() )
Data BIOS�������������#�������������������)DDDD')))E,���������������������������������������!!������������)����(E",<���������������������� ������$ �����+��8=>55���������� � ������'�25/04/97
Restart (zimny) - w BIOS zapisana pod adresem 0FFFF:0000 instrukcja skoku do procedury startowej.
Rejestry
Rejestry segmentowe����������������������������������������+������������(:���+�,CS (code segment"��������������� ���������������������#��������� ������,�8������������������+��������������#�������������������� �#$��������������������#���>=
DS (data segment"���������������������������#��������� ������ ,�3����������������������+������ ������������� ����������������������������������
SS (stack segment"����������������� ��������������������ES (extra segment) - zawiera adres dodatkowego segmentu danych
Dodatkowe rejestry segmentowe (386 / 486)FS i GS - (nazwa od kolejnych liter alfabetu"���������������������������� ��������+������ ( !�"������������ ����������������������������������������������������������� �����"����������������+����������� �������������������������������� �������������������,
Rejestry ogólnego przeznaczenia����������������+����!��� ��• przechowywanie offsetów: BX, BP, SP, SI, DI,�8������������#������������#��+� �����,'�SS : SP . ( !�"�B��������������������!!���+���������+��8F��>F� ���<F,
• ��+����������+�'���������������������@�����������������#��� � ��������+�'�AX, BX, CX, DX. Odpowiednio������������������#��������������������� ������'�8X = AH + AL�,�=���������+�������MSB (most significantbyte"�������������LSB (least significant byte)
Rejestry 32-bitowe (386 / 486)* �������������������+������������ ������������?-��=-��=5��<5"��������������G7���+��� nazwa 32-bitowegoodpowiednika tworzona jest zgodnie ze schematem: AX �EAX.( !�"�B���������������������������������������������������������������������������������������EAX to AX)* ���H��������� ��- rejestr IP��������������� ���������!!����������� ����������������+����#�����������������������#��,�-������ ����������� ��>-/���#�����5-����������$������+������������������������������������������ ��
maszynowa.( ! ) ����������������#��������#���������� ���������CS:IP( ! ) �����������5-��������������$������ �������������
Rejestr znaczników (!���"���(:���������#����$����+��������������������������������(����������������������������� �������������+��������������������������� ��������+�,�* #����$�������� �����������$ ���������
��������������������������������������������������������+�����+�",�* �@)@:���������������#��������I���+���
�������������,�6�������������!����"���������������������#'
OF (overflow flag) ����� ��������������������������������������� ���������������������$ ��#�����������przeznaczeniaDF (direction flag) - znacznik kierunku � nie wskazuje niczego, ( !�"���������������������������������� ��������������������������������������� �������,�J���<D���������������������� ����������������#�K����+����������L����
��������������� ������+�������)��������������#���� ������+�,�/�����������(������ ��STD, 0 - CLD.( !�"���� �������������� ���������������$ ���K)L
Page 3
ASSEMBLER strona 3
IF (interrupt enable flag"������ �����������������������������������������������>-/������������������������������� �������� ��STI (na 1) oraz CLI�����)",��9�$������������$�������)�����������������#�������������,TF (trap flag) ����� ��������������������������������������������������SF (sign flag) - znacznik znaku � ustawiany, gdy wynik operacji jest ujemny (1 na najstarszym bicie), zerowany - wynikdodatni.ZF (zero flag) - znacznik zera � ustawiony, gdy wynikiem operacji jest ‘0’ ( ! ) , zerowany, gdy cokolwiek innego.AF (auxiliary carry flag) - znacznik przeniesienia pomocniczego ��������������������������� ��� �������#��� kodowanych binarnie - BCD - bajt traktowany jako para 4-bitowych nybli��������������� ������������� �!���)�I,PF (parity flag"������ �����������$ ������������������ ������������ ���+��������������� �� ������ �������jest parzysta, zerowany - gdy nieparzysta.CF (carry flag) - znacznik przeniesienia ��������������������������������������� ��� �����������������������������������������������������������,�D���#��������������!������������ ����STC (CF = 1), CLC (CF = 0), CMC(CF = -CF)AC (alignment check"��;@:"�������������#������+�������������������������������������������# ������������������������;,�* �;@:������ ��$���� ��������#�G7������������� �������������#����������������#
���+������������������ �����+��� ���+�,
Kopiowanie rejestru flag������������������ ��32M�� nale¿y u¿yæ stosu - naspierw PUSHF a potem POP
Rodzaje danych i adresacje
������������������������������
Instrukcje wymagaj�� �#�����������������H�+�������� ��������� ���� �����������������H�+��� ) i adresu������ ��������������������������!���� ����������operand przeznaczenia). Operand przeznaczenia stoi za zwyczaj������������ ���,�MOV DX, AX ��<F���������� ������8F���H�+���,
Rodzaje danych5�������G������������� ����+������������������������������'
Dane natychmiastowe��������������#��adresowaniu natychmiastowemu - dana zawarta jest w segmencie kodu zaraz po������������ ������������������� ���������������� �",
( ! "���3������������������������H�+���������������������$ ������������������������ �������������@��+�� ��������@�������� ������H�+���",
Dane natychmiastowe to �� �����������#���������� �����,�MOV AX, 1<������������������������������������� ����� ��������������������+�����!!����������������# �������������
���������$���������������������(:������������@������������������ ����� ����������"������,
Dane rejestrowe������ ������������������ �>-/,�<���#�����#��adresowaniu rejestrowemu (ukrytemu). Sprowadza�#����������������������������' MOV AX, BX - w BX jest dana rejestrowa, która zostanie zapisana jako danarejestrowa w AX.
( !�"������������������H�+����@���+����� ����(:���������������������,
<������# ����������������#�����$���(3?������������# ,���!�"�* ��#����$ ������� ����������������������+��������������������# ,�<������������������ ��� �����������,�B���������������������������������
�������+�������$�������������������������# �,�B���#�������������#�������� ��[ ], którymi wskazujemy, w jakich�������� ���������������+�����# ,
������������������
=������������ ���$������'
( !�"�* ���������������������������przedrostka zmiany segmentu.• [ <rejestr_offsetu> ] � [BX] - �������# ���������������������� dla BX i offsetu zawartego w BX• [ <rejestr_bazowy> + <rejestr_indeksu> ] � [BX + DI] - ������������������������#������������������# �����
segmentu DS����!!�� ���+���������������$ ���?F��<5 ( !�"����������������������������������+������ ������������������������������ ���������� ����������������� ����!��������������� ��������������������������� ���������# ������#����� ���������� �"• [ <rejestr_bazowy> + <dana_natychmiastowa> ] � [SI + 1] - ������������$��������������# �� -
<����N���� �������O�������������# ���������������$��� �����"�����#�����������������!!����������������", ( !�"����������������������������������#����������� �+��������������������������������� ������������������� ��������"��������# �������������������������������������������������� ��������������������������������� �����������#������������ ��#�����+������#�����������������"
Page 4
ASSEMBLER strona 4
• [ <rejestr_bazowy> + <rejestr_indeksu> + <dana_natychmiastowa> ] �[BX + DI + 7] - adresowanie indeksowe����#�����������������# ������������# ������<=���!!�����+����������!!���+���������+��������$ �� ������,
( !�"������������������������������������#������������� �+�������� � �������+��� <rejestr_bazowy> wskazuje adres tablicy, <rejestr_indeksu> - element tablicy (rekord), <dana_natychmiastowa> - konkretne pole w danym ��������������������#������������������ �������������������������������������$������+������ ������������"
Adresowanie wielowymiarowe - dla tablic o wielu wymiarach ���������������������������������������<�������N������O���� ���������� ���Pdana_natychmiastowa> - pole w rekordzie, <rejestr_indeksu> - konkretny element���� �����+���� ��$�������������� ��������������������������������"����������������� ������K)L"�'
nr_wiersza * ���������������������nr_kolumny
<���$�����������������������������������#����������������������+��,�* ����� �����������������!!�������������
�����������������������������$���,�* ����$ ����������������������������� �����������������+������� �������
������!!���,�B�� �#$ �������$��������������#��������'
• DS dla offsetów BX, SI, DI• SS dla offsetu SP ( !�"���������������������• SP dla BP9�$�� ��������������$����������������������������������������przedrostka zmiany segmentu w postaci<rejestr_segmentu> : ���������������������!!������,�ES:[BX], CS:[SI], ES:[BX + DI] itd.Tworzenie programu „exe”6������������������������ ����������G������������� ���'������������ ������,�3����������# ����������+�,
=���������!������#������� ������������=4J34BQ�������������������'
P�����O�=4J34BQ��R��S�R��� ����S�R%nazwa_klasy’] np. MojeDane SEGMENT.gdzie:• P�����O��������������� ����������������������• R��S�������$������������ �����#���������������� �������������������$ '
BYTE - od pierwszego wolnego bajtu WORD���������������������������� PARA - od pierwszego wolnego adresu podzielnego przez 16 PAGE - od pierwszego wolnego adresu podzielnego przez 256
( !�"���$���������������������$��������#�����������-818• R��� ����S����!�����������������������+���� �����������������������������������������������$ '
PUBLIC�������������#������������+���������������������+����������������������#����������������������� � ����������������������������#���������������+��������� ��������+�������������
COMMON�������������������������������#����������+����������� ��������������$�����������T �����$ �����#����������� ���� ��������+�
MEMORY������������������������ ����������� ���������������������������������������(������������ AT <��������N������ ���O - segment zostanie umieszczony pod adresem segmentowym znanym w czasie
������� ������$�����������P��������N������ ���O STACK������������������������������������� �����=Q8>6�����������+��������������������������$
równej ich sumie ( !�"�9�$����� �������������������������$��������#��������PRIVATE���������������#�������������������� ����,• [‘�����N�����&S�������������������������������������������� ������+�����$������������������#�������������������#�����+�������������������������������� ����
6��� ���!� ��������������������$���������������ENDS���������+�������P�����O,6��������������������!� ���������� ��������+����������������"���� ��������������������������END poza����������������+�,�8������������#���� ����������� ������� ����������������������� � ��#���4B<,
��������������������
8������������������������������������������ ��� ��������� � ��������+���������� ��� ��,��7)�U�(E��������)w kodzie programu,�2�� ����� �����������#��� ������������ ����������������������������������������������������������������$�������������� ����������#������������������� �������������������!������������� �
4V/",�3������+�������������������NOT <op>����������� ����������������������������������po obliczeniu zostanie��������������������� ����������������$�,�B2Q���������������������Pop>. ����!�������������"#$�%�&#$�%�'#$
B������������������������ ������������������������� ������"'�.486 (MASM/TASM) lub P486N (TASM).9�������+������ �����
• @)@:�W�@)@@��� ������������������������ ���+�����������������������������$��-/=AD���� �����������������!�����������������������-2-D����$���������#�������������������@)@:����$�����,,,
Page 5
ASSEMBLER strona 5
• 7@:��� ������������������������ ���+������������������������������� ����������� ������������(7�(;�����zastosowanie) ����#����������� ������������@)@:,�9�$�������������������������7@:����$�����,,,
• 386 - rejestr AC zawsze równy 0 ���$����������#����������� mamy 386, w przeciwnym razie 486
Segment stosuAdres segmentu stosu przechowuje SS,�9���������������������<2=�������� �������������,�1���������������������������� ����(6?����������������������������������������������������������+�����!��� �����������<2=��?52=,
=��������������� ������#����==')������������������������ �������������#�� ������������������� ����������� �,
B��� ������SP wskazuje na koniec stosu (SS + rozmiar stosu).3#����==������������=='=-�����������#����������� ����=='=-�������������������������������������������Szczytstosu",�3#����==')���=='=-������������#���������������������������������������# ,
�(��������������
-���������������������zmniejsza��#�=-�����������������������������������������=='=-,�2�������#��������� ��PUSH�������������������������$������������������������������ ������������������������7@:"������natychmiastowej) lub PUSHF������������������!���"��,�
PUSHFPUSH AXPUSH [BX]PUSH 21H
( !�"�2��������� �����������������������(�����������������������������������������+��@������ ,�?��������������������#�����������'��������� �� ����=='=-������������� �� ��=='=-�(
( !�"������������������������������� �����$���� ��@)@:"
Zdejmowanie ze stosu.������� ���������� ��������#��� ��������������������#�������������������$��=-,�1���������#���������� �
POP (ogólne) lub POPF (dla flag). ( !�"�2��� �������������������$ �(�����������@���",POPFPOP AXPOP [BX]
Inicjalizacja stosu<�!������#������������������������������������������������ ��DUP (patrz: Segment danych) np.
DB 64 DUP(‘STACK!!!’);
( !�"������ ���#������������������ ������� ��������$������!���� �����������,�%��� �&"�������#���������������������������H�������<4?/J,�Q� ����#��������������������������������������
Segment danychTyp danych - w asemblerze oznacza rozmiar danych.
Definiowanie zmiennych<�!���� ������������$����#��������������������������"������������������!� ������ :DB (define byte) - definiuj bajtDW (define word)�����!���������DD (define double)�����!�������+���������DQ�����!������ ��+���������DT ����!�����()�����+���E���+�"np. �������<* ���X��K������L��#����������������7�����+�,
( ! ) W przypadku gdy zmienna „��L������(:��������������������#���'�MOV AL, zm, �����������$�typów �����@���+��K�������#L�(:���+�,�B�������+� ���������specyfikatora zmiany typu.
.��������������������� ������������������������������#������$�����������,�zmienna DW 0FFFFH.
SS + rozmiar
SS:SP
SS:0
Page 6
ASSEMBLER strona 6
)���������*�+�,���
.�������������� �������+���string"������ ����������������# ,�3��� ������� ������������#�� ������� ����������������+�,�-�����������������������#���������#�DB ( ! ) ����+��������� ����#� �������+�,�>�������+������ ����#���„ ” lub ‘ ‘������������ �� �����������$ �������� �����+��8=>55���������� ���� ����,�Q���# �<?�����������������(��������#�� ��� ������������������� � �,�Q�������������������������������� �������<?,
Y ��������+����������!� ��� �������������������������������� �����+�,�3������� ������������������� � ��+�
����+��� ������� � ���������� ������� �����%,’ np.lancuch DB „Ala”, „ma kota”, ‘$’Eol DB 0DH, OAH, ‘$’
<����$����� � ������$����� ������������� � �� �������������������$�������� �����������������������������
��� � �"��������#������� �����������!� �������������'
-����.EQU $ - <��������*�+�,�.����'�P�����O����#�����������������$����� � ��P�����N��� � �O��$��������������� ���� �������������� - zwraca���������� ���������������+�������������,�* ���������� ��P�����N��� � �O�������������������������stringu, $ - napierwszy bajt zaraz po ���������# �P�����O��#������$ ������+��stringu np.
Napis DB ‘Ala ma kota, ale kot jest zielony’Dl EQU $ - Napis ������������� ����� ����������������
)���������/(����,����������
9�$�� ��������������������� ���������������#����������#������������������������������ �������������
ze stringów������������������������DUP,�.��������!������#������������ ������'<nazwa_zmiennej> DB <ile> DUP( < ���N������O�"
<?�������������������� ������������
P��O���� �������+�����������������������
< ���N������O��������� ����� ����� ��� string, liczba lub ?������� ������������������������������������������� ����#�����# ,
np. Nazwa DB 10 DUP(‘Luke’) ; ”Nazwa” zajmie 40BTemp DB 10 DUP(?) ; „Temp” zajmie 10B, nie inicjalizowana
( ! ) - ��������#������������'����U�sizeof ( < ���N������O"
Zmienne anonimoweQ�������#������������ ��������������������������������� ������ ���,� DB 100 DUP(?),�<���#�������������������������������#�������� ���������������# ���������������������� ������ ,
( ! ) - offset zmiennej w DS�T���$������+�����+������#�������������!�������� ��$������������ ������
Dyrektywa LABEL<�������������������������$����������$ ���# �����������������������������,�3����������#��� ��������#'
<nazwa_zmiennej> LABEL <������N��# Ogdzie: <������N��# O������������������������������,�WORD, DWORDB��������������#�����#����������������������+�����# ����+��������������!��������������������� �
jednej z dyrektyw definicji zmiennych (DB, DW). Z <�����N�������O��#���������������������������� nie trzeba�#�������������specyfikatora zmiany typu ����������",
Tablice<�!������#�������� ������������DB������+����������� �����������#�������������������������stringu lub������� �����������</-��"������+������������ ������������������ ��������$ ���������������������</-�����
������ ����T���$ ��������� �+������ ���,
Tab DB ’1234567890’ ������ ��()� ������������������������������������+��()� ���������+��(�������� ,Tab DB 100 DUP(‘12’) ������ �����+���������������������� ������())��������+��7�������� ,3������������������� �����������,�DW���+� ��������������������������������������������������������# ����������� ������� ���������������������������� �� ������������������������������ ����������
��������������������������������������������� ���������� �",�-����������'
Tab DW 0B800H DW 0A000H
DW 0000H . . .( !�"�-����������������#����������� ��������+������ ����������#� ����� �� �������������������� ��, wówczas����������������������� ���������� ������������������������������������������ �,�9�$��������������� �������������
n-����+������������������������������������$ ��n.( !�"�2�� ���#������$��elem. tablicy (n"���!���������������������$��K7L���������������� �������# ��i-tego�������������������#���������i*n�� ���������+� ������������������������� ��=AY
Page 7
ASSEMBLER strona 7
( !�"�-����������������#������,����� �������������������� ����� ������������������������ � wówczas rejestr��������������������������������������������� �������������������������������$�"�����������#�� ������������ �,
( !�"��������������������+������ ��������������������#��� �'<nazwa_tablicy>[ <indeks> ] np. tab[2]
�����P�����O����� ������������+����������� �,�1������������$�"����+��������������������������������������
definiowania tablicy (np. DB, DW ), ewentualnie od zadeklarowanego dla <�����N���� �O�����������# ������� �dyrektywy LABEL.Szybkie odwzorowania - tworzenie ���� ����������� ������ ����������� �������������������+������i-tym������ ������������#������$������������������������ ��i. ( f ( i ) ",�Q�������� #������������������ ��������������������������",�<�#������������������������������������������������ ����f( i )���,��������������������������'���$��i T�)����+��C����$��i = (����+��7��,,,
0���
<�!� ������� �����������#�������� ������������EQU���������+���������������������������+��������#���������������+�������������������������������,������������������ �������������������!� ��������� �������,"��,
Stala EQU 2-7*4Imie EQU ‘Cindy’Data EQU 0FFFF:0005( ! ) EQU dziala jak #define, na etapie ���� ���������������������������������������������������������$�,
Zmiana typu* ��#����$ �������+������������� ������������������������������#������# �����������������������
( ����� ����������"����,�B4J��5B>��<4>��B2Q������������������������������$ ����� �����#������������np. ���B4J������������������� ��� ����������������������������",�2������#���������������specyfikatorów zmianytypu - BYTE PTR, WORD PTR itp. np. NEG BYTE PTR [BX]
( !�"���������������$����������� ������� ������� �,( !�"�* ������ ������� �������@���+��������(:���������������������������������(:�������������specyfikator zmiany BYTE PTR i zostanie tam zapisana starsza���+����������������,MOV AL, BYTE PTR Zmienna
Segment kodu
Definiowanie EtykietEtykieta��������������� ��������� ���������$��������� ������# ����������T���������������������������������� �w kodzie, adres segmentu itp. ).* ������������������������!�����������������+�������������������������������� ������� ���������� �,
/��������������������������������������� ��������������������������T��������������� ����������������� ��
������������# ������#����>=�������������� �,�4�����#���!������#�����#��� �'
<etykieta> : gdzie <etykieta> - dowolny string np. Tutaj :( !�"�2���������������������������#������������������������,�MOV SI, Tutaj.
1�2��������������!(+����3���+
-����������� ��������+���� �������� ��������������������������#��,�=����,�B���#�����END��������������#tej etykiety.
(���������(��+����������������,���3�����
<���������������������������+�����������������������������+������������������8==/34,�/������#����
�������������#��� ������� ��'�ASSUME CS:Kod, DS:Dane, SS:Stos , gdzie Kod, Dane i Stos to etykiety - nazwy�������+�,�2��������������������������#����Dane SEGMENT a Dane ENDS���������������������������������������� �����#�������������������������!����������������#����Dane SEGMENT a Dane ENDS���������#�������� ������ ���#������� ���������#����������� ��������������� ���!������ ��������� ������,�B�����
������������������#�������������������������$ ������������ ����������������.( !�"���B����������������������������������� �������������<=,�B��������������������������������$����������������� ��������� �����# ����,�1�������#�������#��� �����+�'
mov AX, Danemov DS, AX
Page 8
ASSEMBLER strona 8
Procedury
Definiowanie-�� ���������������������� ������������PROC���������+���������������T�nazwa procedury,�B���#�����!������#������ ��������� ���������� ����#������� ��ENDP���������+��������������� �������,
Moja PROCmov AX, Danemov DS, AXdec CX....ret
Moja ENDP
*���������� �������������� ��CALL <nazwa_procedury> np. call Moja. >8YY��������������������������������!!���= 2B = 16b) i skacze do wskazanego miejsca. ( ! ) - -�� ������������������������ �#�RET���������� �����+����������������������������������>8YY���14Q�������������������������� ����������,
( !�"�������������� �������������������������� ����������� �#$ �������������������������������� ,
4��������*���
-���������������� ����������������������������������������������������� ���"���������������������$���
����������� ����������������������������,�5������������������ ������ ����#���K��������L�����������#
�����������������!����������������������������,�8�����������������������������#�������,�B��� ���������������
������������������������������+������������� �#$ ��#����������!�������������#��������������� ����� �����
���������������������������������$ ��,
Moja PROC; zabezpieczenie wart. rejestrowpush AXpushf...XOR AX, AX ;modyfikowany rejestr AXCMP AX, zmienna ;modyfikowane flagi......; przywrocenie wartosci z momentu wywolaniapopfpop AXret
Moje ENDP
Przekazywanie parametrów do procedur• przez odpowiednie rejestry �������������������� ����������������#��������+�������+�� �������������������������������������������������������������������������������,"���������� �!������������ ���������
procedura zwróci wynik• przez stos����� ����������������������������������������������������� ����$ �����������$�������������$ ,* ����$������ ����������������������������������,���!�"���������������������������������#���������� ���������zawiera adres powrotu z procedury �����������������$ ������������"�����������#����=='R=-�7S
���(�����������3+����������������+�������+����+����+
* �������������������������������������������������� ����� �� ��������������������������� ��������������#
������+������# ��������� � ��#�K��L��� �����������,�=� ���������������������������������������=-,�B���������
����������������������������������������������������������$��������������# ��,�D��� �#�����������������
��������������?-,�* � ������ �������������+����������� ������ ������������������������+���������������$����
�����$ �=-��������#��������������������#������+����# ��������������������� ����������?-�;��?-�:�,,,
-����������������#����������� �����������+���������������#���������������� �������'Moja PROC
;zabezpieczenie rejestrówpush BPpush AXpush BX����������������������������
��� ! �"������������#$%&����'��'����(�)*+�����#$%,� *+�����#$%-�)$+
; pod SP+8 - adres powrotu z procedury dla RETmov BP, SPmov BX, [BP+10] ;do BX trafia drugi ��.��������mov AX, [BP+12] ;do AX pierwszy...�������������� ��������������������
pop BXpop AXpop BP
Page 9
ASSEMBLER strona 9
retMoja ENDP
-������������������������ ��������������'...push arg1push arg2call Mojapop arg2 �'� ������/�������������� ������������������0�������/���� �����������
pop arg2 ���1���'���������������...
...
( !�"���* ��������������������������� ����������������������������$ ���������+����+����������$���������������������������������-2-����$ ���# �� ���������,�* ����� ���������#�����������������
ADD SP, N
gdzie N��������$ ������+������������������������������������,
Zmienne lokalne9�$���� �������� ���$����������������������� �������� ������������ �����������������������������������
�����,�* ����� ���������������#������������$��N - bajtów miejsca (SUB SP, N ). W tym momencie mamy dodyspozycji N�����+�������������������������������������������,�<��������� ������� �������������#������������� �����������?-����+��������������+�����������=-,
( !�"�9�$���������������������� �������������������� �������������#��,������������+������������� ������������� ��������������������#��������������?-�����������#���N�����+����������� ��������+������#��������������$ �?-�������#�������N np.
mov BP, SP������)$%,�"�����������������������
sub SP, 4 �������������������������������������
mov BP, SP ;SP wskazuje na ostatn�2�������2�������2; pod BP + 8 - pierwszy ��.��������
( !�"�* ������ ����������������������������������������������������������������������������� ���������������� ��8<<�=-��N.( !�"�-���������������������������� �������������������������� �����������������������������������������,
sub SP, 4; �����'�����'�������&�����
mov BP, SP;OPIS ZMIENNYCH LOKALNYCH:�)$�"����������1��������...
�)$%&�"����������1��������...
...
+�(����������
* ����� ��� ���������������!�����������������+���+H���������������������������������$ ��� tej procedury.<�#����������������������� ���(�������� �����������������+����!��� ����������� ������� �����������$ �����
����������� ������� �",�<�#��������������,����!�����������$ �����$������ ���������+����#���� ���������
������ ����������������������-12>��������#������!��������������$ �������� ������� �� ���������� ����
����#����������������� ��������+���,DodajDomysl PROC
mov AX, 2mov BX, 2
Dodaj: add AX, BXret
DodajDomysl ENDP
*���������� �����������������������$ ��������������#�������� '�CALL <����N���$ ���O.( ! ) <����������� �����������������������'
• nazwa procedury• co dana procedura robi• �����������������$ ���• ��+����������������������������������������������$ ���• ������������������������������������wej.• ��+�������������������!��������������������������� �����• ����� ��������� ����� ��������������$�• ���� �������������������������������� ���������$�• ���������������� ����������� ����
Page 10
ASSEMBLER strona 10
Makroinstrukcje3������������������������� ������K����L������������������ ������������� �����preprocesingu asemblacji.2�������#������������������������������� ��������������������� ��� ,
Definiowanie3�������!������#���!�"��������������������������!� �#����������� ������#�����#��� �'<nazwa_makra> MACRO <parametr1> , <parametr2>, ...�����P��������O��������������� ���� ����������parametry�������������+��������� ������������preprocesingu)����������������������argumenty.Parametr makra�����������������"�����������$�������������������38>12�������!� �������Argument makra������������������$ �������������������������,2������������������+������������ ��� ��������+�"���������#��������������������� ���������P��������O<�!� �#���������� �������������ENDM.( ! ) - etykiety�������� �����������lokalne�����������������������������������������!� �������������������������������",�* ����� �������������7����������������������������� ���38>12"��������������������������
������������� �������� ����������������������'
LOCAL <etykieta1> , <etykieta2>, ...4��������������� ������������������#�����!� �������,
-������������$���������������������+�������������"Gotoxy MACRO WspX, WspY
LOCAL Petla, Koniecmov DH, WspXmov DL, WspY
Petla: dec CX...
Koniec: mov AX,[BX]ENDM
( !�"��������� �������������������14Q������������������������������������������"( ! ) - przed ENDM nie stoi nazwa makra( !�"�����$����������������#���������������� ������+��������������������� �������������������� ������ ������� parametrów (��������������#������� �#���+���������������������� ����� ������� �������� ��������������parametrze � ��$���������������������������������������������� �������������������������������������������������#������������� �����������������������������) � ����������������������������� ��������� �� ��������+��������+���������������������$ ���������� ��������� ����������� ���������� ����� ������� �
�����$�������������������������������#�������������������� �#������������������)
�����������
.�� ���������������������������������� �������������������"�����������#������������ ������'
<nazwa_makra> <argument1> , <argument2>, ... np. Gotoxy 10, 20( !�"���������������# �����������+������������+�����������������������������",�.�������arg. ������,( !�"�������������>8YYPrzekazywanie dalekiego adresu�������������������������+ ���!!����������$�������������������������������������,������ ������# �����������! ����"�����������������#������� ��LES wg. schematu:
Clrscr MACRO AdresBuf, CzymczyscLES DI, DWORD PTR AdresBuf ; ���)�0�����������������������3#4�5
*�����������������������������������'Clrscr 0B800H:0000H,‘ ‘
Wzorzec programu „exe”;---------------------------SEGMENT STOSU - STARTStos SEGMENT STACK
DB 64 DUP (‘STACK!!!’)Stos ENDS;---------------------------SEGMENT STOSU - KONIEC
;---------------------------SEGMENT DANYCH - STARTDane SEGMENT
Zmienna DBDane ENDS;---------------------------SEGMENT DANYCH - KONIEC
;---------------------------SEGMENT KODU - STARTKod SEGMENT
assume CS:Kod, DS:DaneMain PROCStart: ��������������(������
mov AX, Dane
Page 11
ASSEMBLER strona 11
mov DS, AX ��� ������������������'�������������������/
...
mov AH, 4CH ��6�����������7#���8��2��'������
mov AL, 0 ��������������� �������������'�39979:3;3:
int 21HMain ENDP
Kod ENDS;---------------------------SEGMENT KODU - KONIEC
END Start
Program typu „com”�����������
• zbiory . ��������+��������,���E(7�������������+��������,exe)• programy . ������������������#��������� ����������� ��:;6?• dla programów .com stos jest generowany automatycznie, miejsce na niego przydzielane jest w ramach segmentu�����������������������������$��������������$������ ���������� �����������#
• program . ���������!�������������������������������������� ��������������������������� ������������� ������������� �������������
• ������������������������������������������������������� ���������������������� ������������NEAR)• ���������� ������������������������������������������ ��������������������������������������"• ��������������������7E:?����PSP �����+������� ��������������������# �<2="�������� �����������'
ORG 100H ���� �������������
Wzorzec programu
Kod SEGMENTassume CS:Kod, DS:Kod, SS:KodORG 100H
Start: jmp Main������0����'����(�������������������4
Zmienna DB...
Main PROC NEAR
...ret
Main ENDPKod ENDSEND Start
Tworzenie programu wynikowego• ��������������� ������H�+�������• ����������������� ��� �����������Warning: No STACK segment! )• ������� ���������EXE2BIN ������������������,exe na .com
��������������� ������������
5������������+������������+�������������
-�� ���������������������������� ���� ,�-�����������������������#�������������������������,�-���������
�������#��� �� � �'
• nie posiada punktu startowego (nic po END)• ��������������������� ���������T���+�������������"• ������������������������������������������������������+�����"• ������������������������ �� �������������������������#�����"• ��$������$�procedury�����������$ ���"� ���������#��������������������������������������������� �����
segmentu kodu: PUBLIC <etykieta1> , <etykieta2> , ... � P��������O��������������#�������� �������������������$ ����� * ��������� �#$ �����������������!����������$���� ��� �������� ������������� ��-12>��4B<-• ��$�� ���������#����dane��������������������� ����������������������� ������������������� ' PUBLIC <zmienna1> , <zmienna2> , ... ������������ �#$ ��������������������!��������������������+����
zmienne (np. ������� �����������<?��<* � ���</-��" )
Page 12
ASSEMBLER strona 12
• ( !�"���$������������ ����� ��������������������#�����$�������� ������ ���������������������������������������=4J34BQ��������������#�PUBLIC.
• ( !�"�������������������� ���������������������������te same nazwy����+� ���������������������������� �#$ �����������������������������,
• ( !�"�����������������������������������+������������ASSUME.
-�������'�""""""""""""""""""��������������������������""""""""""""""""""
Dane SEGMENT PUBLICPUBLIC Eol, Ekran
Eol DB 0DH, 0AH, ‘$’ ��������������������������2������������emEkran DW 184FH ; y = 18H = 24D, x = 4FH = 79D
Dane ENDS
Kod SEGMENT PUBLICPUBLIC DodajDomysl, Dodaj
ASSUME CS:Kod, DS:Dane
DodajDomysl PROCmov AX, 2mov BX, 2
Dodaj: add AX, BXret
DodajDomysl ENDP
Kod ENDS
END
��(����������������+���������,������+���
• ��$������������ ����������������������$��� ����# ����#���������������������������' EXTERN <nazwa_procedury> : PROC np. EXTERN ClrScr: PROC <�#�������K��!������L�������#����������������������������������� ���$�,�8������������������������������ �� �� ����#��������� ���#�������#�������������, ( !�"�<������ ������������#��������� ������������ ����������� ��� ���� ( !�"�9�$�� ��������������������+�����$ ��� ������������������������������,• ��$�� ����������������danych����!������ ����������������������������������' EXTERN <nazwa_zmiennej> : <specyfikator_typu> , ... gdzie specyfikator typu�����$���������������������������������������������������������������������������$ ����������������� ��+��������������������� ������� ����������� ",�3���������������#��� �������$ ' BYTE, WORD, DWORD���������#�������������������!���������������������<?��<*��<<, ( !�"�J�������#����������������������KstringL����������������������� ��DUP( ) jest ona definiowana przy pomocy dyrektywy DB ������������������������������BYTE -��������������� ������������� � �����������' EXTERN Eol:BYTE, Ekran:WORD ( !�"�-������������������ ����������#����������#�specyfikatora typu�����-12> ( ! ) Deklaracja ta jest w segmencie danych
6!����������+���
Z� ��������������������������� ������������������������������.obj������������ ������+�������#������������������������������������#�����������+�������������� ������+�,
Biblioteki makr?������#���������������������������������� ����������!� ���������� ������������������+������ ���
segmentu kodu). Plik taki ma rozszerzenie .mac ,�*�� ��������������������(�K������ ��L�������������������+�����"����#����������� ������������INCLUDE ������+��������#�������������,
Przerwania ��������������/���
/�������������#�����������������#����� ������������� �������������#���� . W odpowiedniej chwili oprócz���������������������������������������������������������!���� �����������������0�kod typu,�3����� �������������+����7E:��+��� ����+�,�B����������������� �������� ��������������������������0���� �������������
���������������������� ��������������;,�<�#�������������������������� ���� ��������+��� ���������
��� ����������+�����������,�2�+ ����������� ���� � �������������������� �����������������������������
Page 13
ASSEMBLER strona 13
������������������,������������������)",�-��������������������������������������������������������������
programów...
Przerwania programowe* ������� ��K)L�����������#����������7E:���� �� ���������� ���������;����������7���������������������������7��������
��������# �"�����������+���+��� ��� ����������������������� " ��������������������(6?�183,�6����adres - wektor przerwania . Tabela ta zwana jest �������������+���������,�-��#���������������?52=��<2=����������������������$�������� ��,�* ��������������<2=�����������������������������������������T�numer przerwania)����������#��������� �������������� ����"��������� ��������������������� ����������������#����+��� ����� � ,
*���������������������#���������� ��INT <numer_przerwania> np. INT 21H. Przed skokiem do odpowiedniejprocedury (przerwania) INT wykonuje:• �����������������������$�������������� ���+���(������"• �������!���#�5D������������� ����������������������������������������������������������������������$ ������������������"������QD
• ������������������������������������>=• ���������������������������������������• �����������������������!!����������5-• ����������������$�������������������8��������������+��������������������������������������������� ��������IRET����+�������������������przeciwne do INT.( ! ) – istnieje warunkowa wersja INT – INTO���������������������������������������������������������(overflow)
Przerwania zarezerwowane-������������)����(DA�����������������������5����&�,�3������,�����#��� ��!��� ��'
)�0��������������0�����������$ ��#������������������������������)
(�0������� ��������0�����#������������������� �����������debugowanie krok po kroku2 – ����������������������0������������������������������������������������G�0�����������������0������������������������������������# �������������������
;�0��������0���������������� �#�����������������,
...-������������7)A����GDA�����������������������<2=,
7) �0������ �����������������������
7( �0�����������������<2=
22h – adres powrotu po wykonaniu programu7G �0����������$ ������Ctrl-Break7; �0��������������������#��
25h – odczyt sektorów z dysku26h – zapis sektorów na dysk7C �0������ �������������������������������#
1�2�����������������,�������+������+3���������*
-�� ��������������������������������� �������������,�<�!������#������������������ ��'<nazwa> PROC FAR
...IRET
<nazwa> ENDP
*���������� �����������������#�������������������5D���������������������������$ �!������,�����������������5BQ,
�������������!���,�������+������+3���������*
1. �����������������������#�������� ��������������$�����������������������������2. �����������������������������#����������������� �����������������������������"3. ��������������������������������������������������� �������������������+ �������������������������-���������� ���� � �����$ �����������#�������#��� � �!��� �����������21H DOS:• ustawienie wektora przerwania � funkcja AH = 25H, AL - numer przerwania, DS:DX����������� ������������• odczyt wektora przerwania � funkcja AH = 35H, AL - numer przerwania, ES:BX���������!���������� ������������-����������� �� �������������������������������������'
; w segmencie danych istnieje linia: wektor DW�����0�������������2�������(�MojePrzerw; w segmencie danych istnieje linia: adres DD MojePrzerw...�����������������/������'���� ��
Page 14
ASSEMBLER strona 14
mov AH, 35Hmov AL. 0int 21H�������(����������'���� ��
mov wektor[0], BXmov AX, ESmov wektor[1], AX;zapisanie nowego adresu�����*+�����������#4�*���0�����������'����.��6�����
mov AH, 25Hmov AL. 0int 21H...;przywrócenie pierwotnych wart.lds DX, DWORT PTR wektormov AH, 25Hmov AL. 0int 21H...
1���������+��+3�1 0
<2=������#��������E)��� ����������������#������������������21H,�* ��+���� ����������$���� �����AH oraz����������������� ���� ��������+������������$ �����������������������,
( !�"�0�D��� �����������������������������!�����>D,�J���>D�T�)�0����� �������� ������#����$�����>DT(�������������������+������������!�����8F,
( !�"�0������������� � ���������� ����������+����������� �����#��������%)&,AH Operacja 1������������ Wyniki
2�������������
2 *�$��������������������������Ctrl-Break) DL = znak kursor za znakiem5 Wydruk znaku DL = znak6 *�$���������������������������Ctrl-Break) DL = znak kursor za znakiem9 *�$����������� � ������� �������%[&
�������� ������������������������� ������ �
<='<F�T���������� � �
( !�"�������� �����%[&,������������� � ��
40 patrz � !���������"������������������� BX = 1, ...2����������������
1 >��������������������������������#��
��$�����������������������Ctrl-Break)AL = znak
6 Odczyt znaku z klawiatury (bez kontroli Ctrl-Break) DL = 0FFH 8Y�T���������$���������
= 0, gdy brak znaku7 >��������������������������������������$�������
(bez kontroli Ctrl-Break)AL = znak
8 >��������������������������������������$�������
������������Ctrl-Break)AL = znak
A * ���������� � �������������������!���
������ ����"�� ���������������#������������������
� ���$� ���� ���� ����������� ������� �$
������������� �� �� ��������������
� �������� �%&'%!
DS:DX = adres bufora,( ! ) – pierwszy bajt bufora����$����������������
����� ����� �� ������bajtu,���� ���� �7�������,
Drugi bajt bufora����$�����$�
przeczytanych znaków
B Odczyt stanu klawiatury AL = FFH - brak znaku,������T�)�0����������#��
C *� ���� �������!������������������������!��� �
����������������
8Y�T�������!��� ��������
(1, 6, 7, 8, A)* ��������$ ���
������������!��� �
Czas i data2A Pobranie daty CX = rok
<A�T�����
<Y�T�����
2B Ustawienie daty CX = rok (1980 – 2099)<A�T�����
<Y�T�����
AL = 0 – data poprawna������T�DD�0��������#���
2C Pobranie czasu CH = godzinaCL = minutyDH = sekundyDL = setne sekundy
Page 15
ASSEMBLER strona 15
2D Ustawienie czasu CH = godzinaCL = minutyDH = sekundyDL = setne sekundy
AL = 0 – czas poprawny������T�DD�0� ������#���
Komunikacja asynchroniczna3 �� ������������������$ ������ ��� ����� AL = znak4 ��������������������$ ������ ��� ��� DL = znak
2���������+�
D Zapis zmienionych buforów dyskowych z powrotem����������#
E *�����������$��������#�������� DL = numer dysku(0 = A, 1 = B, 2 = C ...)
8Y�T���$������+�
�7���������������#��"
19 -����������������$����������� AL = nr dysku (j. w.)2E .�������������H��������!�� � DL=0
8Y�T�)�0����� ����
������T�(�0���� ����
30 Pobranie numeru wersji MS-DOS AL = numer wersjiAH = numer zmianyBX, CX = 0
2����������������������
25 /����������������������� DS:DX = adres wektoraAL = numer przerwania
35 -���������������������� AL = numer przerwania ES:BX = adres wektora1�����������!��� ������������+����������+�
39 Utworzenie katalogu <='<F�T���������� � ���
��������������
3A /���# ���������� DS:DX = j. w.3B Zmiana katalogu roboczego DS:DX = adres katalogu do
��+����� ��������$�
47 -�������������������������� �����0����� ��� <=�T������#��
�)�T�����$����
1 = A, 2 = B ...)DS:DX = adres 64-bajtowego bufora
<='=5�T���������� � �
docelowego
36 Pobranie wolnego obszaru na dysku <Y�T������#�����,��," 8F�T���$��������+����
klaster, = 0FFFFH w�������#��
?F�T���$�������
klastrów>F�T���$������+����
sektor<F�T� ����������$�
klastrów3C Utworzenie pliku <='<F�T���������� � ���
�����
CX = atrybuty pliku (patrz����������"
AH = uchwyt do pliku����������������"
3D Otwarcie pliku <='<F�T���������� � ���
�����
AL =0 – otwarcie do odczytu =1 – zapisu =2 – odczyt & zapis
AH = uchwyt do pliku����������������"
3E .����# ����� BX = uchwyt pliku�������������������������"
3F 2� ��������������������" BX = uchwyt pliku�������������������������"
>F�T���$�� ������ �����+�
DS:DX = adres bufora
8F�T���$���� ������
bajtów = 0 odczyt poza plik
40 .��������������������" BX = uchwyt pliku 8F��T���$��������
Page 16
ASSEMBLER strona 16
�������������������������"
>F�T���$������+������
<='<F�T�������H�+���� ���,
bajtów
41 /���# ����� <='<F�T���������� � ���
�����
43 Nadawanie atrybutów plikowi AL = 1<='<F�T���������� � ���
�����
CX = atrybuty (patrz pod�������"
54 Pobranie znacznika sprawdzania AL = 0 – brak zapisu sprawdzania = 1 – zapis ze sprawdzaniem
56 Zmiana nazwy pliku <='<F�T���������� � ����
�����������
4='<5�T���������� � ���
����������
.������������ ����
31 .���� �������������������������������# AL = kod powrotu<F�T����������# ��
paragrafach4B .��������������������������� AL = 0
<='<F�T���������� � �
nazwy programuES:BX = adres blokuparametrów
4C .���� ������������ AL = kod powrotu dlaErrorLevel
4D -��������������#������������������������� AL = kod powrotu dla�� ���������� ���
62 Pobranie adresu bloku PSP BX = adres segmentuPSP programu
.������������# �
48 .���������������# �������������183" ?F�T���$�������������
paragrafówAX = adres segmentu z����������������# �
49 .�������������������������# ES = adres segmentu ze�����������# �
4A .����������$ �������������������������# ES = adres segmentu obszaru��#
-����������������������������#��
59 -����������������������������#�� BX = 0 AX = rozszerz. kod?A�T���������#��
BL = zalecana reakcja>A�T��������
Atrybuty pliku�����$���������������+�,�.�� ������������ ���+�'0 – read only, 1 – ������7�0���������G�0� ������������������;�0� ���������������������E�0� �����������������backup)Uchwyt pliku�0������������!���� ���������������������������5W2,�5�����������#��� ����������� ���+�')�0����������������$ ���<2=���������������������������������������"
(�0����������������$ �������$�����������)7�0����������������$ �������������#�+���niezmienialne)G�0�������������������������������������"
4 – drukarka=�������������������� �����������������������������;�� ���������<2=�����������@�� ���+�,�3��������������
��#�����,
���(�������������������2��������������1 0�%�4� 0
( !�"�>�#���������� ���������������������������� ��� �����������"�� ����+��������������?52=���� ���������� �<2="�����������#�������������������$ ����������AH
Page 17
ASSEMBLER strona 17
VIDEO (BIOS) - przerwanie 10H.• gotoxy � AH = 02H, do BH - strona karty graficznej (zwykle = 0), DL�����+���#����K\L��DH�����+���#����K�&���+���#������! ) liczone od 0
• scrolling okna/ekranu (czyszczenie okna/ekranu) � AH = 06H, CX�����+���#������������+�����������������DX -��+���#��������������������������������+���#����� ��������)������������ �����+����K�L������������ ���K\L����
AL�����$�����scrollingu, ( ! ) AL = 0 - czyszczenie ekranu.• odczyt typu karty �AH = 1AH, AL = 0 (������������� �������!���� �����8Y����� �������!�����������"
Konfiguracja (BIOS) - przerwanie 11H, zapisuje do AX������������+���������������� ���+��� ���+������ ��'0 - istnieje FDD 1 - istnieje koprocesor 2 - zainstalowana mysz G�����$��183 4,5 - tryb video :�C�����$��D<<
I�()�((�����$�����+����������� 12 - istnieje GamePort 13 - zainstalowany modem (wew.) 14,15 - il. druk.
Programy rezydentneProgram rezydentny �+����#���������������������������!��� ������������� �������������������������� ������,-��������������������������������# ������������������������������������������������������������# ����������,
*������������������������+�������$������������#��� ��������������������,�*+� �������$���������
������������$ ����������������� �������������� ������������������# ������� ���������Q=1,�-�������
�����������������+�������������������!��� �����+ ����������������������,�5 ��� ���������+� ������
� �����������������������������"����+������������������������ �,�* �����������������������������������
�,��� ����#�������������������������������������������������������������� �#������������������� ������
���������,
-�������������� ������������������������ ��������������#��� � �!��� �'
KEEP - funkcja 31H przerwania 21H,�-�������������������������������������'AH - 31HAL -��������$ ��������������������������� �������� ����,������������ERRORLEVEL)<F������������# ������������������������������������������(:�������� �������!�
D��� �����������������$ ������� �������� ����,�� ���&��<2="���������� ������������� ��������# ,�Gdyprogram otrzymuje kontrolê, funkcja EXEC (4bH) alokuje blok pamiêci zaczynajacy siê od PSP i zawieraj¹cy ca³¹ dostêpn¹pamiêæ. Pamiêæ ta przydzielana jest procesowi. Wykorzystuj¹c funkcjê 31H <2=������ �����#�������� ���������� ���������������������������������������<F�������$��<F�U�(:�?���+�",�D��� ��������������������� �������+�
��# ����+����� ������#���� ��������������������� ��!��� ��;@A,
TSR - przerwanie 27H,�B������������'<F���������������������+�����# �������������������� �#$��������������������������!!��������#����<=�
��#���������(,
D��� ����������������������������������<2=������ ��������# �������������������# ���� ��������
� ������-=-�������$ ������������<F,�-��#������������������#������������ ����,
( !�"�-���������7CA�������� ���������������������������<2=������� ��������$ �������+����������77A�7;A����� ������!��� ����������������������+����� ������ � �Critical Error lub Ctrl - Break��������������,( !�"�-���������7CA���������#�������������������������������������������+�������������PT�:;6?�� ���������!�������������������������������?���� ���(:������������������<F"
Dyrektywy zaawansowaneEVEN�0���������������������������H������������������������������� ������+���� ���������������� ���������������������������#����� ��,
<nazwa> GROUP <nazwa_segmentu1> [,<nazwa_segmentu2>, ...]�0��������������������������������P�����O����������������������������:;������������������,
5D]]�P��������O�,,,�R�4Y=4�S�,,,�4B<5D�0������������������� ������������������������������� ������ � �#$
�����������������$ ����P��������O,�8������ ��������� �������4Y=4��� �������������$ ���������������������
IF:5D4�0���������������)
5D�0������������������)
5D<4D�0�����������������������!�������������
5DB<4D����������������������������!�������������
Operatory2������+������������������������������������������������������,
Page 18
ASSEMBLER strona 18
• arytmetyczne+, -, *, /, MOD�0����������P�����$�(O�P�������O�P�����$�7O� SHL, SHR ���������P�����$�(O�P�������O�P��������O
• logiczneAND, OR, XOR�0����������P�����$�(O�P�������O�P�����$�7O� NOT�0����������B2Q�P�����$�O
• relacji�����������������������#�P��������(O�P�������O�P��������7O������ ��������#����'
EQ – a1 = a2, NE – a1 != a2, LT – a1 < a2, GT – a1 > a2, LE – a1 <= a2, GE – a1 >= a2• ����(��+!���������
$������� ������ �������$������H��������������0������$������H��������������[SEG 0����� �������$������������������������������������ �������������������OFFSET�0����� �������$���!!������������������������LENGTH 0����� ����������������� ���������� �0����������$ �������������������������������!������"
�����������!��������������� ��</-
TYPE�0����������� ������ � ����Q̂ -4����� �'�(�0�?^Q4��7�0�*21<��;�0�<*21<�,�<�������������� �'��(
–NEAR, -2 – FAR.
SIZE – zwraca iloczyn LENGTH i TYPE• atrybutu
PTR�0�����#��������������'�P��O�-Q1�P��������O�������P��O��?^Q4��*21<��,,,���B481��D81�"����� ���������������������������������������������������,
DS:, ES:, SS:, CS: - atrybuty zmiany segmentuSHORT�0��������'�93-�=A21Q�P�������O����!��������������������P�������O������������������(7C�����+����
instrukcji aktualnej.THIS�0����� ������������ ��������H�������������HIGH – zwraca starszy bajt 16-bitowej liczbyLOW 0����� �����������������WW��
Koprocesor��_�"�0�8������������������� ���������������������������#�,7@C�����������,
Budowa6��� �����������@��@)������ ��������+������ ��(��������������(����������������,�=�����������������!��� ��
������ ����������������!���,�=�������������������$�������������+������ �������������������������������������
���������������� ����$������������������$����� ���,�1������+������ �������������#������stosu koprocesora. Stos ten������������������������� ���� ������������� ������������������������������������������",
Typy danychY �������������� ������������������� '�(�0�����������(E�0���+�������������:;�0������������,�6��������� ��
��������������� ������ ���������������������� ��� � ������� ��������������� ���� ,�<���#�����
����#��� ���������� ���������#���������$ ��������� � �!�"'
• Word Integer - 16b, -32768, 32767, 5 cyfr• Short Integer - 32b, -2 * 10^9, 2 * 10^9, 9 cyfr• Long Integer - 64b , -2 * 10^18, 9 * 10^18, 18 cyfr• Short Real - 32b, 10^-37 , 10^38, 7 cyfr• Long Real - 64b, 10^-307, 10^308 , 16 cyfr• Temporary Real - 80b, 10^-4932, 10^4932, 19 cyfr• Packed <� ������@)���(@� �!������#��� ���������(@� �!�
Instrukcje koprocesoraInstrukcja Opis ����������������,
D?Y<�PH�+���O
FBSTP <przeznaczenie>D5Y<�PH�+���O
FIST <przeznaczenie>FISTP <przeznaczenie>
���������� ������������� ������������������+������ ����� �����
��������������������#���
����#�������P������ ����O��������������#����������������������
������� �������
����#�������P������ ����O� �����������_�0���������������������"
����#�������P������ ����O� ��������������������������
Page 19
ASSEMBLER strona 19
DY<�PH�+���O
FST <przeznaczenie>FSTP <przeznaczenie>FXCH <przeznaczenie>
���������� ������
����#������� ������
����#������� ���������������������
�������������������� ����������� �����������
Arytmetyczne
D8<<�RP������ ����O��PH�+���OS
D8<<-�P������ ����O��PH�+���O
D58<<�H�+���
D=/?�RP������ ����O��PH�+���OS
D=/?-�P������ ����O��PH�+���O
D5=/?�PH�+���O
D=/?1�RP������ ����O��PH�+���OS
D=/?1-�P������ ����O��PH�+���O
D5=/?1�PH�+���O
D3/Y�RP������ ����O��PH�+���OS
D3/Y-�P������ ����O��PH�+���O
D53/Y�PH�+���O
D<5M�RP������ ����O��PH�+���OS
D<5M-�P������ ����O��PH�+���O
D5<5M�PH�+���O
D<5M1�RP������ ����O��PH�+���OS
D<5M1-�P������ ����O��PH�+���O
D5<5M1�PH�+���O
FSQRTFSCALEFPREMFRNDINTXTRACT
FABSFCHS
( !�"���������������������������#������7�������� ����������������������#�H�+������������� ����������������� ����������H�+���"�
odwróconym������������#������� ��������H�+����������H�+��������przeznaczenie)
dodaje rzeczywistedodaje rzeczywiste i zdejmuje ze stosu������� �������
odejmuje rzeczywisteodejmuje rzeczywiste i zdejmuje ze stosu��������� �������
odejmuje rzeczywiste (odwrócona)odejmuje rzeczywiste i zdejmuje ze stosu (odwrócona)��������� ��������(odwrócona)
��������� ������
��������� �������������������������
������ �������
dzieli rzeczywistedzieli rzeczywiste i zdejmuje ze stosu����� �������
dzieli rzeczywiste (odwrócona)dzieli rzeczywiste i zdejmuje ze stosu (odwrócona)����� ��������(odwrócona)
pierwiastek kwadratowy�����������������#�#�7
�#$ ����������
��������������� ��������
wydzielenie cechy i mantysy
*����$���������#���
Zmiana znaku
Porównania
D>23�RPH�+���OS
D>23-�RPH�+���OS
FCOMPP
D5>23�PH�+���O
D5>23-�PH�+���O
FTSTFXAM
��+������� ��������� ������������������ ������� ��������������������
����#
porównuje rzeczywisteporównuje rzeczywiste i zdejmuje ze stosuporównuje rzeczywiste i 2 razy zdejmuje ze stosu
��+������ �������
��+������ ��������������������������
sprawdza, czy szczyt stosu jest 0bada szczyt stosu
����/���
F2XM1FYL2XFYL2XP1FPTAN
��� �����!��� �������������������� ���,
oblicza 2^X - 1oblicza Y * log_2 (X)oblicza Y * log_2 (X+ 1) �#$ �����������
Page 20
ASSEMBLER strona 20
FPATAN �#$ ����arcus tangens
0����,
FLDZFLD1FLDPIFLDL2TFLDL2EFLDLG2FLDLN2
����� ������������������� ������ �� ���������� ����������������
��������$���Temporary Real)
��������),)
��������(,)
��������-5
�����������N7��()"
�����������N7���"
�����������N()��7"
��������log_e (2)
0��+!��
DY<>* �PH�+���O
FSTCW/ FNSTCW <przeznaczenie>FSTSW / FNSTSW <przeznaczenie>FSTSW/ FNSTSW AXFSAVE/ FNSAVE <przeznaczenie>D1=Q21�PH�+���O
DY<4BM�PH�+���O
FSETPMFSTENV / FNSTENV <przeznaczenie>FWAITFINIT / FNINITFENI / FNENIFDISI / FNDISIDCLEX / FNCLEXFINCSTPFDECSTPFFREEFNOP
�����#������!���� ������������������$ ����������,�����������
����+����������������������������������,
��������������������� �
����#����������������� �
����#���������������
����#����������������8F
zachowaj stanodtwórz stan��������$��������
ustaw wirtualny tryb pracy����#����$��������
wait (zatrzymuje proc., zabezp. przed korzyst. z tych samych obszarówRAM)inicjuje (resetuje) koprocesorzezwala na przerwaniablokuje reakcje przerwania�������������
��#���������H��������
�������������H��������
zwalnia (zeruje) rejestrynic nie rób
Niebieskie karty5������ ��������������������#� �#���������� �������� �����,�.����������������������������� ���
����� ���������������#�����!������ �znaczników��������������!����� ���� �,�8������+��������#���!������� �����������#�����#��� ��symbole operandów:• r8���@���������+������������• r16 - 16-bitowy rejestr ogólnego przeznaczenia• sr - jeden z rejestrów segmentowych• m8����������+������ ���# ��� ������"• m16�����������# ���• i8 - bajt natychmiastowy• i16 ������������ �������• d8 - 8-bitowe przemieszczenie��������������������$���#����������������������������� �����������������������+��� ������� ���,�-������� ���������������������������������������������,�9�����������������#���
aktualnej instrukcji.• d16���(:�������������� ������������������������� �������� �� ������������������+�
InstrukcjeRozkazy transmisji danych( ! "���5������ �������������������!�������� ���+�,MOV <op1>, <op2> ����������������$����������7��������������� ��������������"������������(,�2�������������������������������������� ������ ���'
( !�"������������������������$ �������������,���# ����������( !�"�����������������������,�����������������������������������������
Page 21
ASSEMBLER strona 21
( !�"����������������������� ����� ������� �����������+������������ ( !�"���������������������������� �������� ��+��� ������$ �(MOV 16bitów 8bitów)( !�"����������!������������������������� ���+�
* ���������������������7����������������������������������(������������������������$�������������,
LEA <op1>, <op2> � przenosi efektywny adres operandu 2 do operandu 1 np. LEA DX, ZmiennaLDS <op1>, <op2> � przenosi daleki adres <op2> do pary rejestrów DS:<op1>LES <op1>, <op2> � przenosi daleki adres <op2> do pary rejestrów ES:<op1>LAHF � przenosi do AH�������������������������� ���+�SAHF ���������������������������������������� ���+���������$�����������8AIN <op1> , <op2> ������������P�(O��������$�����R�P�7O�S( !�"�������������������������������'�8Y�������$��@������������8F��<FOUT <op1>, <op2> ���������������R�P�(O�S��������$��P�7O( !�"�������������������������������'������$��@��������8Y������<F��8FXCHG <op1>, <op2> ����������#��������������$ ������������������������,XLAT � zapisuje w AL �������# ������������<='R?F�8YS������������ê, gdy pod DS:BX jest tablica bajtów, a do AL������������������������� ̀����������������� �
PUSHA (286) - ����������������������������������$ '�8F��>F��<F��?F��=-��?-��=5��<5,( !�"�* ����$��SP�������������������������$�����������������-/=A8�����$�� ���#����������������-2-������������������������������# ��=-����������# ��=-��#��������������������������������������������������+�"
�������+��8F��>F��<F��?F������ ������� �����#
POPA �7@:"���$ �������������������������������$ ��������������-/=A8������ ����������������=-PUSHAD i POPAD (386) - jak PUSHA i POPA, tylko dla rejestrów 32-bitowychIN <op1>, <op2> - przenosi dane z portu do akumulatora. <op1> = AL – przenoszony jest bajt, = AX – przenoszone jest�������P�7O��������������0���������� �������������������$�����������<F,
OUT <op1>, <op2>�������������������������������������P�(O��������������0���������� �������������������$�<F��P�7O�������������������� w AL lub AX.
Operacje arytmetyczne( !�"�2���������������������������� ����������� �������������!�����'�2D��=D��.D��8D��-D��>DINC <op> ����#�������(������$�������������! ) nie zmienia CF.DEC <op> ������������(������$�������������! ) nie zmienia CFNEG <op> ��������������$����������5 � -5ADD <op1> <op2> � dodaje <op2> do <op1>, dla bez i ze znakiemSUB <op1> <op2> � odejmuje <op2> od <op1>, dla bez i ze znakiemMUL <op> ������������������������������� �������8F�������$��������#��������:EEGE���������<F��8F���������bity w AX). <�O�����������@���+� ������������������������#����AL����������@������",�P�O����������P�(:O����P�(:O���+� �������������������AX�����������",( ! ) MUL modyfikuje AX i DX( ! ) <�O�B54������������������� �������IMUL <op> ���������������3/Y����������� ����������������������!�����8F���$�����������#��������G7C:CDIV <op> �������� ��#������������������� ���#���8F������Pop>, wynik trafia do AL, a do AH trafia modulo.3�������������������������(:��������������������������#���<F���8F����������!�����8F������������<F
IDIV <op> � jak DIV, tylko dla liczb ze znakiemADC <op1> <op2> � �������P�7O����P�(O������������� �������>D�SBB <op1> <op2> � ���������P�7O����P�(O����������� ������ �����>DCBW ����$������������������AL ustawiony ������������������8A������� ���������������������������CWD ����$�������������AX ustawiony ������������������<F������� ���������������������������AAA ����������������#��������� ��������������������?><�����������AX). W BCD w ramach ���������#�����������;�����������������;���������������������"������ ������������������������������ � �!��)�I,�888������
����#��� �'�����������������$��;�������� ���+��8Y������$������������ ��#�OI�� dodaje 6 do AL., zeruje 4 starsze��������������� ����>D��8D����������������$��8A�����������#������,�9�$����8Y,������� ����PT�I��>D��8D���
zerowane.AAD ����������������������������?><�����������8FAAM �������������������������?><�����������8FAAS �������������������������?><�����������8F( !�"�.����8=>55���������� �� �!��������������!�������������$���������������� ��������8=>55����������������������������� ��#�?><��+� ����������������$����������������������������,
DAA ��������������������������������� ������������� ���������������?><������������������������������7� �!������ ��#�����#�������������������#���;�������������� �!�#
DAS � korygowanie wyniku odejmowania dla liczb traktowanych jako upakowane BCD
Page 22
ASSEMBLER strona 22
Operacje logiczne( !�"�B�������� ���������������������� ����������� �������������������������$�����������seg. do innego( !�"�<��������������� ���������� AND <op1>, <op2> � dokonuje logicznego and�������������������+��� ���� � ������������P�(O��P�7O�wynik umieszcza w <op1>.
<�O������������@�����(:������,OR <op1>, <op2> � jak w AND, tylko dla logicznego or.XOR <op1>, <op2> � jak w AND, tylko dla logicznego xor.NOT <op> � neguje wszystkie bity <op>, wynik w <op>( ! ) nie modyfikuje ¿adnych znaczników (nawet ZF)Wydzielanie bitu��������� ������������+�������������������������������("�������� ��8B<��#���������������������������������"
Ustawianie bitu�����������#�����#������+�����������������������������,��K(L��������#���21��#�������������������W�����������+���� ��������������
Zerowanie bitu����������������#������+��������������������������������K(L��������B2Q������� ��������"�����+��� �����������������21��#�������������������������������������"�����������������B2Q"
Szybkie zerowanie danej������ �������� ��F21���������������������,�XOR AX, AX zeruje AX.
Instrukcje przesuwaniaSHL <op>, <licznik> � przesuwa bity <op> w lewo, uzupe³nia 0-wym bitem, <op> - pamiêæ lub rejestr, <licznik> -liczba „1” lub rejestr CL (nie CX), w CL jest iloœæ, o jaki¹ nale¿y przesun¹æ bity, ewentualnie przesuniêcie o „1”.( ! ) wysuwane bity trafiaj¹ do CF (a z niego donik¹d)( ! ) przesuniêcie 16-krotne = zerowanie s³owa�7@:"���P� ���O�����������������������$ ������ ���������,�SHL AX, 7�7@:"��������$��������# ��P� ���O������ ��������G(��bo np. 32 daje to samo co 0)SAL <op>, <licznik> ���������������������=AYSHR <op>, <licznik> ������=AY�����������������������������������������7@:",SAR <op>, <licznik> � jak SHR, ale uzupe³nia najstarszym bitem (bitem znaku)ROL <op>, <licznik> � rotuje bity <op> w lewo, wysuniêty bit trafia na koniec oraz do CF �����7@:"ROR <op>, <licznik> � jak ROL, tylko w prawo, wysuniêty bit trafia na pocz¹tek oraz do CF �����7@:"RCL <op>, <licznik> � rotuje bity <op> w lewo, wysuniêty bit trafia do CF a bit z CF na koniec�����7@:"RCR <op>, <licznik> � jak ROL, tylko w prawo, wysuniêty bit trafia do CF, a bit z CF na pocz¹tek �����7@:"Szybciej jest zapisaæ kilka razy SH? <op>, 1������������������������������>Y�� ����������#������;��������� ���"=���������������������������������� �������������������������#�#���+�����������������������������
��������� ������������������,���������3/Y������CC� ���"
( !�"������������������a���� #����� ��K���������L�������!������������$ �������������� ��� n "������������������������$ ��7���������������� �������# ��i����������������������������i * n (co szybko��������������� ��=AY"
����+(����(�(+�����/��
JMP <etykieta> � skok do <etykieta> (<etykieta> - wczeœniej zdefiniowana etykieta��������������������$��� �������segment:offset), skok jest bezwarunkowy.( !�"������������������������������������������������G7���������������"J? <etykieta> ����������P�������O����������$ ����%]&����������� ���+�����������������"( !�"�5������ ������������������������������������bliskie��������������������������R�(7@��(7CS��������������( !�"��������� �����������������������������������������������������������#������������������������instrukcji
�������� ��������������������������������
( !�"�<���������������� ��������������������������������� ����������� ���������������������������� �����������( !�"������������� ���������������,��#�����T��������������+���)( !�"�5��������������������������� ������� ���signed i unsigned.Liczby ze znakiem - najstarszy bit = 1, gdy liczba ujemnaRelacje��#����� ����'• ��������W��#������less / greater) �liczby ze znakiem (signed)• �����W��������above / below) � liczby bez znaku
Relacje po wykonaniu CMP:Relacja dla:
bez znaku(��������
(co testuje)dla:ze znakiem
(��������
(co testuje)
Page 23
ASSEMBLER strona 23
= JE ZF = 1 JE ZF = 1< > JNE ZF = 0 JNE ZF = 0> JA
JNBECF = 0 i ZF = 0 JG
JNLEZF = 0 lub SF = OF
< JBJNAE
CF = 1 JLJNGE
SF < > OF
>= JAEJNB
CF = 0 JGEJNL
SF = OF
<= JBEJNA
CF = 1 lub ZF = 1 JLEJNG
ZF = 1 i SF < > OF
5������ ���������������������������� �������� ���!���'
mnemonik ��� � �� co testujeJNS skok, gdy brak znaku SF = 0JS skok, gdy jest znak SF = 1JNO ������������������������� OF = 0JO ������������������������ OF = 1JP/JPE ����������������������$� PF = 1JNP/JPO �����������������������$ PF = 0JCXZ <etykieta> ����������P�������O����� �������>F�T�)������������������������ ����"( ! ) tylko skoki bliskie [-128 - 127]( ! ) nie istnieje instrukcja przeciwna JCXNZ������ �� ����+������+��>F�PO),( !�"�����������#���9>F.�������������������������Y22-�����,�B54���� ��������>F�PO�)�����������#����������� ������$ ����#��������� ���������������+������#��#������� ����>F�������),
CMP <op1>, <op2>�����+���������������������������������� ��������������$ �������� ���#�������������P��PT��T��OT��O�",�<���������������������'�wynik = <op1> - <op2>, zapomina wynik a tylko ustawia znaczniki.( !�"����� ��������������� ���������,�9]�����������$ �������� ���#�������������������������������������������>3-������ ���������� ��������������������9]�����9]���� ����������"�������������������������$ �!���,
TEST <op>, <maska>��������������� ���+����������������P�O���������� ����� ��8B<�������K���L��������ustawia znaczniki.( ! ) TEST modyfikuje ZF �����!����������������� ������������������������������ ����������������� �������������������������������B2Q�Pop>BT <op>, <nr> (386) ���������������$����������������P��O�����)"������������P�O�������������������������CF.( ! ) TEST jest szybsze, ale tylko dla sprawdzania, czy bit jest ‘1’ .LOOP <etykieta>��������� ���#��������������#��� �'
• zmniejsza CX o 1• ��$��>FPO)�� skacze do <etykieta>• ��$��>FT)�� przerywa������������#�����#��������� ������Y22-
LOOPNZ / LOOPNE <etykieta> �������� ���#�������������Y22-������������#��� �'• zmniejsza CX o 1• ��$��>FPO)����.D�T�)�� skacze do <etykieta>• ��$��>FT)������.D�T�(�� przerywa������������#�����#��������� ������Y22-
LOOPZ / LOOPE <etykieta> �������� ���#�������������Y22-������������#��� �'• zmniejsza CX o 1• ��$��>FPO)����.D�T�(�� skacze do <etykieta>• ��$��>FT)������.D�T�)�� przerywa������������#�����#��������� ������Y22-
( !�"�5������ ���Y22-]����������#��������+ �����$ ����#������������������������$ ������������������������$ ����������$����������������"��#�����+����W��+�������� ��������������������������",�*+� ��������������������
����������Y22-]������������ ���>3-���+����� ������������������������� ��,
����+(�����*�+�,���
5������ ������ � ���������������������#��� � ��������'
( !�"���� � �H�+����� wskazywany jest przez DS:SI (suorce index)( !�"���� � �docelowy wskazywany jest przez ES:DI (destination index)( ! ) �����$��������� � +������$������������CX( !�"��������� ������������������AX���#�����������!������"( !�"����������������������!�������=5��<5"�����������������!����DF, gdy DF=0 �����������������#�����������DF=1 ����������������������,
Page 24
ASSEMBLER strona 24
REP STOS{W/B} ������������ � ��� ���������4='<5���������$ �7U>F�����+�"�������������>F������������zawartym w AX (bajtem z AL). ( !�"�-������������� �� ������������# �>F�������������������(����������������������,�*+� ���������� ������ �����������������H�����4='<5�������������������������������� �"���
�������������� � ��,
( ! ) Gdy DF�T�(�������������+�������+�"��� ������#�����������4='<5������ ��������������������������<5���������������������7��("���������������������������������#����������K�����L",�B����� ��<5���������
� ��������� � �,
STOS{W/B}�����������������8F���������8Y"����4='<5��<5���#�����������������������<D�T�("��������7����modyfikuje CXREP MOVS{W/B} - odpowiednik instrukcji REP STOSW (bez REP ������=Q2=*"���+�� ���������������������������������������������<='=5�������������������������������������� ��������������8F�W�8Y"����������4='<5
LODS{W/B} ������������<='R=5S�������W�������������������8F�W�8Y,�B������ ���#�����=5���������W�����,SCAS{W/B} ����+������������������������ ���������� ���"�������W����������4='R<5S����������$ ��8F�W�8Y,B���#�����#�����<5,
CMPS{W/B} ����+������������W�����������<='R=5S������4='R<5S�����������$ ����<D���#������������������=5��<5,REP ���������������������� ������32M=��=Q2=����$��>F�PO)������������������������� �#���� � �����������������>F�����������������(��������$��5-�����������+������#��������� ����#������+��14-"
REPE / REPZ � przedrostek dla SCAS, CMPS, gdy CX<>0 �������������������������� �#���� � �����������������>F����$��.D�T�(��+� ������������#��#�����������5-���("
REPNE / REPNZ � przedrostek dla SCAS, CMPS, gdy CX<>0 �������������������������� �#���� � �����������������>F����$��.D�T�)��+� ������������#��#�����������5-���("
INS{W/B} ����<F�����������#����������������������������$������������� � �������� ����OUTS{B/W} �����<F�������������������������������������� � ��H�+�������
����+(�������,�������������/����
NOP�0��������� ����� ������ ������������������������������������+H����HLT�0����������������������������� ��������������������������������������������niemaskowalneWAIT�0������������������������������������������������������������$ ������� ������Q4=Q�0��������$�����������������������������������#������