Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Sekcje
- .data
- > Inicjalizacja danych i stałe zmienne
- > Nie można zmienić wartości podczas działania kodu
- > np: nazwy plików, wielkość buforu
- .bss
- > Deklaracja zmiennych
- .text
- > Zapisywanie kodu programu
- > label: - stworzenie deklaracji [label] do jmp
- > global _start - nawiązanie do początku deklaracji kernela, linker dla (gcc)
- > _start: - kod deklaracji kelnera
- > ; - komentarz
- > Przykład składni kodu:
- [label] mnemonic [operands] [;comment]
- Rejestry CPU
- > rejestr ogólny (Data registers, Pointer registers, Index registers)
- > rejestry kontrolne
- > rejestry segmentów
- Rejestry danych
- > rejestry 32 bitowe (EAX, EBX, ECX, EDX)
- > rejestry 16 bitowe (AX, BX, CX, DX)
- > rejestry 64 bitowe (GAX, GBX, GCX, GDX)
- > rejestry 8 bitowe (AH, AL, BH, BL, CH, CL, DH, DL)
- AX - accumulator (I/O, funkcje arytmetyczne, wielozadaniowość)
- BX - base (indeksowanie adresów)
- CX - counter (zbiór rejestrów w pętli)
- DX - data (I/O, AX-DX register, multiply-divide vars)
- Pointer registers
- 16 Bitowe
- > Instruction Pointer (IP) - rejestr (offset address), daje pełny adres, aktualnej instrukcji w kodzie segmentu [IP in association with the CS register (as CS:IP)]
- > Stack Pointer (SP) - rejestr zawierający offset wartości dla stack-u(stoku) programu, zwraca aktualną pozycję z danych lub adres dla stack-u programu
- > Base Pointer (BP) - register mainly helps in referencing the parameter variables passed to a subroutine. The address in SS register is combined with the offset in BP to get the location of the parameter. BP can also be combined with DI and SI as base register for special addressing.
- Index registers
- x16(SI, DI), x32(ESI, EDI),x64(GSI, GDI)
- > Source Index (SI) − Źródło, dla zmiennych string
- > Destination Index (DI) - Miejsce docelowe indeksu, dla zmiennych string
- Rejestry kontrolne
- x32
- > Overflow Flag (OF)
- > Direction Flag (DF)
- > Interrupt Flag (IF)
- > Trap Flag (TF)
- > Sign Flag (SF)
- > Zero Flag (ZF)
- > Auxiliary Carry Flag (AF)
- > Parity Flag (PF)
- Rejestry segmentów
- x16
- > Code Segment − It contains all the instructions to be executed. A 16-bit Code Segment register or CS register stores the starting address of the code segment.
- > Data Segment − It contains data, constants and work areas. A 16-bit Data Segment register or DS register stores the starting address of the data segment.
- > Stack Segment − It contains data and return addresses of procedures or subroutines. It is implemented as a 'stack' data structure. The Stack Segment register or SS register stores the starting address of the stack.
- Adresowanie rejestrów
- > MOV DX, TAX_RATE - rejestrowanie w 1 operatorze
- > MOV COUNT, CX - rejestrowanie w 2 operatorze
- > MOV EAX, EBX - Both the operands are in registers
- Immediate Addressing
- > BYTE_VALUE DB 150 - Definicja wartości BYTE
- > WORD_VALUE DW 300 - Definicja wartości WORD
- > ADD BYTE_VALUE, 65 - dodanie 65 do wartości BYTE_VALUE
- Direct Memory Addressing
- > ADD BYTE_VALUE, DL - Adds the register in the memory location
- > MOV BX, WORD_VALUE - Operand from the memory is added to register
- Direct-Offset Addressing
- > BYTE_TABLE DB 14, 15, 22, 45 - tablice dla wartości bytes
- > WORD_TABLE DW 134, 345, 564, 123 - Tablice dla wartości words
- > MOV CL, BYTE_TABLE[2] - Uzyskaj 3 element z BYTE_TABLE
- > MOV CL, BYTE_TABLE + 2 - Uzyskaj 3 element z BYTE_TABLE
- > MOV CL, WORD_TABLE[3] - Uzyskaj 4 element z WORD_TABLE
- > MOV CL, WORD_TABLE + 3 - Uzyskaj 4 element z WORD_TABLE
- Indirect Memory Addressing
- > MY_TABLE TIMES 10 DW 0 - Rezerwacja 10 słów (2 bajtów), inicjalizacja do 0
- > MOV EBX, [MY_TABLE] - Effective Address of MY_TABLE in EBX (Rezerwacja adresu z MY_TABLES do EBX)
- > MOV [EBX], 110 ; MY_TABLE[0] = 110
- > ADD EBX, 2 ; EBX = EBX +2
- > MOV [EBX], 123 ; MY_TABLE[1] = 123
- Instruction MOV (Move address)
- MOV destination, source
- MOV <register>, <register>
- MOV <register>, <immediate>
- MOV <memory>, <immediate>
- MOV <register>, <memory>
- MOV <memory>, <register>
- ____________________
- BYTE - 1; WORD - 2; DWORD - 4;
- QWORD - 8; TBYTE - 10;
- Zmienne
- > DB - Definicja zmiennej BYTE (1b)
- > DW - Definicja zmiennej WORD (2b)
- > DD - Definicja zmiennej Doubleword (4b)
- > DQ - Definicja zmiennej Quadword (8b)
- > DT - Definicja zmiennej 10 BYTES (10b)
- Przykłady:
- choice DB 'y'
- number DW 12345
- neg_number DW -12345
- big_number DQ 123456789
- real_number1 DD 1.234
- real_number2 DQ 123.456
- Przydzielanie miejsca, dla niezdefiniowanych danych
- > RESB - Rezerwacja wartości BYTE
- > RESW - Rezerwacja wartości WORD
- > RESD - Rezerwacja wartości DoubleWord
- > RESQ - Rezerwacja wartości QuadWord
- > REST - Rezerwacja wartości Ten BYTES
- Listy
- > MONTHS DW 12
- > MONTHS DW 0CH
- > MONTHS DW 0110B
- > NUMBERS DW 34, 45, 56, 67, 75, 89
- Procedury
- proc_name: ; Utworzenie procedury
- procedure body
- ...
- ret
- CALL proc_name - Nawiązanie do procedury
- PUSH operand
- POP address/register
- EQU Directive (Zmienna Stała)
- > CONSTANT_NAME EQU expression
- > TOTAL_STUDENTS equ 50
- > LENGTH equ 20
- WIDTH equ 10
- AREA equ length * width - AREA jest wynikiem mnożenia 20*10
- %assign
- %assign TOTAL 10 - Later in the code, you can redefine it as
- %assign TOTAL 20 - This directive is case-sensitive.
- %define
- The %define directive allows defining both numeric and string constants. This directive is similar to the #define in C. For example, you may define the constant PTR as
- %define PTR [EBP+4] - This code replaces PTR by [EBP+4].
- Instrukcje arytmetyczne
- INC - Increment
- DEC - Decrement
- ADD - Addition
- SUB - Substraction
- MUL - Multiply
- IMUL - Integer Multiply
- DIV - Divide
- IDIV - Integer Divide
- Instrukcje logiczne
- > AND (i) - AND operand1, operand2
- > OR (lub) - OR operand1, operand2
- > XOR (0,1) - XOR operand1, operand2
- > TEST(unlike AND) - TEST operand1, operand2
- > NOT (nie) - NOT operand1
- Conditions (Kondycje)
- > CMP (do conditional jump),destination, source
- > CMP DX, 00 - porównanie DX z 0
- > JMP label - skocz do [label]
- Conditional Jump
- > JE/JZ - Jump Equal or Jump Zero | ZF
- > JNE/JNZ -Jump not Equal or Jump Not Zero | ZF
- Conditional Jump (arithmetic)
- > JG/JNLE - Jump Greater or Jump Not Less/Equal | OF, SF, ZF
- > JGE/JNL - Jump Greater or Jump Not Less | OF, SF
- > JL/JNGE - Jump Less or Jump Not Greater/Equal | OF, SF
- > JLE/JNG - Jump Less/Equal or Jump Not Greater | OF, SF, ZF
- Conditional Jump (unsigned data & logical)
- > JA/JNBE - Jump Above or Jump Not Below/Equal | CF, ZF
- > JAE/JNB - Jump Above/Equal or Jump Not Below | CF
- > JB/JNAE - Jump Below or Jump Not Above/Equal | CF
- > JBE/JNA - Jump Below/Equal or Jump Not Above | AF, CF
- Pętle
- > LOOP [label]
- Przykład:
- mov ECX,10
- l1:
- <loop body>
- loop l1
- Wyświetlanie tekstu
- • Przykład 1
- > msg db 'Hello, world!',0xa ;our dear string
- > len equ $ - msg ;length of our dear string
- • Przykład 2
- > msg db 'Hello, world!',0xa ;our dear string
- > len equ 13 ;length of our dear string
- Makra
- > %macro nazwa [ilosc_argumentow]
- > nazwa, arg[numer]
- > %macro write_string 2 - Definicja makra z 2 argumentami
- > %endmacro - koniec makra
- > write_string msg1, len1 - użycie makra, jako funkcji z argumentem msg1 i len
- Zarządzanie plikami
- %eax | Name
- > 2 | sys_fork
- > 3 | sys_read
- > 4 | sys_write
- > 5 | sys_open
- > 6 | sys_close
- > 8 | sys_creat
- > 19 | sys_lseek
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement