PODSTAWOWE ELEMENTY ASEMBLERA. TRYBY …aragorn.pb.bialystok.pl/~teodora/AK/W2.pdf · PODSTAWOWE...
-
Upload
nguyenthuan -
Category
Documents
-
view
222 -
download
0
Transcript of PODSTAWOWE ELEMENTY ASEMBLERA. TRYBY …aragorn.pb.bialystok.pl/~teodora/AK/W2.pdf · PODSTAWOWE...
PODSTAWOWE ELEMENTY ASEMBLERA
TRYBY ADRESOWANIA.
OPERATORY ASEMBLERA
PODSTAWOWE ELEMENTY ASEMBLERA
Składnia języka
Postać wiersza programu
Dyrektywy i pseudoinstrukcje
Deklaracja zmiennych
Zmienne łańcuchowe
Odwrotne przechowywanie danych o rozmiarze powyżej jednego bajta
Podstawowa instrukcja przeniesienia: instrukcja MOV
Modele pamięci
Pliki *.COM i *.EXE
Pobranie adresu efektywnego
Zbiór znaków alfabetu A-Z; a-z; 0-9;
Znaki specjalne: + - _ * / = ( ) [ ] < > , . ‘ „ : ? @ $ %
Spacje (20H), CR (0DH), NL (0AH)
Stałe liczba dwójkowa b, B: 10101b, 10101B
liczba ósemkowa q, Q: 1234q, 1234Q
liczba dziesiętna d, D:123, 123d, 123D
liczba szesnastkowa h, H; pierwszy znak nie może być litery: dopisujemy:12h, 12H, 0AH
stałe alfanumeryczne ASCII kody, albo ciągi liter w ‘/”: ‘qwer’, „qwer”, 10, 13
Słowa kluczowe
Nazwy symboliczne pierwszy znak ma być litera (a..z, A...Z), ‘@’, ‘_ ‘lub ‘?’: test_1, @asdf,?qwer,a.
rozróżniane są tylko pierwsze 31 znaki, nazwa może być 1 znak, ale nie ‘?’
SKŁADNIA JĘZYKA
POSTAĆ WIERSZA PROGRAMU
Z instrukcją właściwą lub wywołania makroinstrukcji:
[etykieta:] [przedrostek] [instrukcja] [argument(y)] [;komentarz]
Z dyrektywą lub (pseudo) instrukcją: [nazwa] dyrektywa/instrukcja [argument(y)]
[;komentarz]
Format rozkazów: kod_mnemoniczny [argument_1], [argument_2],
[argument_3]
DEREKTYWY I PSEUDOINSTRUKCJE
Deklaracja segmentu:SEGMENT/ENDS nazwa SEGMENT [typ] [połączenie] [‘nazwa_klasy’]
;............. wszystkie instrukcje i dane, należące temu segmentowi.............
nazwa ENDS
Deklaracja zawartości rejestrów segmentowych: ASSUME reg_seg: nazwa[,reg_seg: nazwa....]
Np. ASSUME DS:DANE
Inne dyrektywy: EQU - deklaracja stałych Np. ROZMIAR EQU 5000
PUBLIC
EXTERN
INCLUDE
DEKLARACJA ZMIENNYCH
DB - dla zmiennych bajtowych ( np. byte, unsigned char),
DW - dla zmiennych słowowych (np. integer, short int),
DD - dla zmiennych dwusłowowych (np. long int),
DF - dla zmiennych trzysłowowych (np. real),
DQ - dla zmiennych czterosłowowych (np. double),
DT - dla zmiennych pięciosłowowych (np. extended).
ZMIENNE ŁAŃCUCHOWE
Deklaracja bezpośrednia
CIĄG_LICZB db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
TEKST db 'Cześć!'
Znaki db ‘abcdef’, 20, 30, ‘xyz’
Deklaracja poprzez dyrektywy dup (duplicate)
TABLICA db 1000 dup (0)
TABLICA_2 db 200 dup (1,2,3,4)
TABLICA_3 db 100 dup ('stosik')
;==============================================================
; DEMO RÓŻNYCH ZMIENNYCH - DEKLARACJA I STOSOWANIE |
; 02.03.2012 T.D-Grekow |
;==============================================================
.MODEL SMALL
.386
.DATA
char db 10
integer dw 10000010b
long dd 1234h
real df 0abbacdh
double dq 1234abcdh
ext dt 0f0f0f0f0fh
tab1 db 1000 dup (0)
tab2 db 10 DUP (10 dup (5))
tab3 dd 10 dup (32 dup (8 dup ('$')))
temp1 db ?
temp2 dd ?
.CODE
MOV ax, @data
MOV ds, ax
MOV ax, integer
MOV al, tab2
MOV eax, tab3
MOV ah, 4ch
int 21h
END
Odwrotne przechowywanie danych o rozmiarze powyżej jednego bajta
Liczby dw 0C83Ah, 700H, 419Dh, 9238h
Liczba dd 1256ABEFh
Adres 00000
Adres FFFFFh
EF
AB
56
12
➔Adres X
➔Adres X+1
➔Adres X+2
➔Adres X+3
Modele pamięci Tiny
Small
Medium
Compact
Large
Huge
Pliki *.COM i *.EXE Pliki typu .exe
Pliki typu .com:
Model tiny
Przy kompilacja: klucz /t
POBRANIA ADRESU EFEKTYWNEGO
Instrukcja LEA Przykład_2.3:
.............................
NAPIS DB ‘ALA MA KOTA$’
.............................
LEA DX, NAPIS
Dyrektywa offset: ........
.data
text1 db „TEKST1”
text2 db „TEKST2”
..............
mov dx, offset text1
.........
mov si, offset text2
………
TRYBY ADRESOWANIA. OPERATORY ASEMBLERA Adresowanie domyślne (cbw, mul bx)
Adresowanie natychmiastowe (ang. immidiate, imm):
mov ax, 123h mov al, 123
??? mov cl, 123h???
Adresowanie rejestrowe: MOV BX, SI ; przepisz wartość si do bx
MOV DX, BX ; przepisz zawartość bx do dx
MOV AL, BX ; ŹLE! MOV CS, CX ; ŹLE! MOV DS, CS ; ŹLE!
Adresowanie bezpośrednie
Proste: MOV AX, LICZBA
MOV AX, [LICZBA]
Z przesunięciem: LICZBA DB 15, 03AH, 23, 633, 0A9H, 0EH,
176
MOV AX, [LICZBA+3]
Przykład (demo?)
.model small
.stack
.data
a db 3ah
b db 19
c db ?
.code
start:
mov ax, @data
mov ds, ax
mov al, a
mov ah, b
add ah, al
mov c, ah
end
Indirektane adresowanie rejestrowe (SI, DI, BX, BP) NORMALNE
mov al, [si]
mov al, [di]
mov al, [bx]
mov al, [bp] ;UWAGA!!!
PREDEFINIOWANE
mov al, cs:[bx]
mov al, ds:[bp]
mov al, ss:[si]
mov al, es:[di]
DS JEST DOMYŚLNY DLA BX, SI
i DI
• DLA BP – DOMYŚNY JEST SS!!!
ADRESACJA BAZOWO INDEKSOWA
Normalna
• Z przesunięciem
Reguły główne
BP -> SS
R32: Baza Indeks
Skalowany rejestr jest rejestrem Indeksowym
Bazowy indeksowany ze skalowaniem
Sposoby zapisu adresu:
disp [index*n]
[base] [index*n]
disp [base] [index*n]
Przykład
Tablica DW 5, 10, 15, 20, 25
.............
mov ax, [Tablica][esi*2]
mov ax, [ebx*2+Table]
mov eax, [ebx+ecx*4]
mov ax, [ebx*8+ecx+4]
mov ax, 4 [ecx] [ebx*4]
Operatory Asemblera Operatory arytmetyczne (+, -, *, /, MOD)
dodawanie/odejmowanie: mov ax, licz1+licz2-licz3
mnożenie/dzielenie: mov cx, TabSize / ElemSize
MOD: reszta z dzielenia całkowitego:
mov ah, 14d MOD 3 ; =2
Operatory przesunięcia (SHL, SHR):mov ah, 3 SHL 3
Operatory logiczne: mov ax, konst OR 5
Operatory relacji:
mov cx, ((Var LT 100) AND 100) OR (Var GE 100) AND 200)