Professional Documents
Culture Documents
Autor:
Miodrag Milanovi
1. Uvod
Za razvoj asemblerskih programa potrebne
alatke su asembler, linker i dibager. U ovom
poglavlju su navedene osnovne informacije
potrebne za korienje turbo asemblera, turbo
linkera i turbo dibagera (proizvodi firme
Borland).
1.1.1. Asembler
Turbo Assembler se poziva iz komandne
linije operativnog sistema komandom: TASM
ime_datoteke. Podrazumevana ekstenzija
datoteke je asm. Na ovaj nain smo startovali
prevodilac, koji je generisao datoteku sa
imenom ime_datoteke.obj. Ovako kreirane
objektne datoteke ne sadre informacije
neophodne za rad sa dibagerom. Da bi se takve
datoteke dobile potrebno je prevodilac pozvati
komandom TASM /zi ime_datoteke.
1.1.2. Linker
Turbo Linker se poziva komandom: TLINK
/v ime_datoteke. U komandi se moe navesti i
vei broj objektnih datoteka. Podrazumevana
ekstenzija je obj. Opcija koja je navedena uz
ime programa, slui da se u generisanoj
izvrnoj datoteci nalaze i infomacije potrebne
za rad dibagera. Generisana izvrna datoteka
e dobiti ime po prvoj navedenoj objektnoj
datoteci i imae ekstenziju EXE. Kao rezultat
se formira jo jedna datoteka, sa ekstenzijom
MAP, u kojoj se nalaze informacije o veliini
pojedinih segmenata.
1.1.3. Dibager
Startovanje Turbo Debugger-a se izvodi
naredbom TD, a uz nju se moe i navesti naziv
izvrne datoteke koju elimo analizirati.
2. Procesor 8086
2.1. Uvod
Familiju procesora Intel 80x86 sainjavaju
procesori 8086, 80286, 80386, 80486 i
Pentium. Prisutna je kompatibilnost u nazad, te
procesori 80286, 80386, 80486, kao i
procesori iz Pentium serije, imaju kao
zajedniki podskup instrukcije koje ine
repertoar instrukcija procesora Intel 8086. U
ovom materijalu e biti opisan upravo taj
osnovni podskup.
2.2. Registri
Procesor Intel 8086 poseduje 14 registara.
Od toga su 4 opte namene, 2 pointera, 2
indeksna registra, programski broja, 4
segmentna registra i jedan status registar.
Treba rei da je ovaj set registara takoe
prisutan i u svim sledeim generacijama ove
Intel-ove familije procesora.
2.2.1. Registri opte namene
Registri opte namene imaju najiri dijapazoj
upotrebe, ali svaki od njih ima i neke
specifinosti. Jedna stvar koja je specifina
samo za njih je da se mogu posmatrati ili kao
16-bitni ili kao par 8-bitnih registara.
15
8
AH
BH
CH
DH
0
AL
BL
CL
DL
AX
BX
CX
DX
Stack Pointer
Base Poitner
Source Index
Destination I.
Instr. Pointer
Code Seg.
Data Seg.
Stack Seg.
Extra Seg.
O D I
ah,34h
ax,4563h
ax,bx
si,dx
al,dl
ds,ax
ax,cs
al,cs:[bx]
al,ds:[bp]
al,es:[si]
al,ss:[di]
al,[0234h]
[0045h],ax
al,es:[0234h]
ax,cs:[3452h]
mov
mov
bh,es:[si+340]
cl,ss:[di+120]
al,[bx]
al,[bp]
al,[si]
al,[di]
al,[si+20h]
dl,[di+78]
al,[bx+20h]
dl,[bp+120]
bh,es:[bx+340]
cl,cs:[bp+120]
2.3.8.
Bazno
adresiranje
al,ds:[bp+si]
dl,es:[bx+di]
indeksirano
relativno
al,ds:25h[bp][si] ili
al,ds:[bp+si+25h]
mov
mov
dl,es:120[bx][di] ili
dl,es:[bx+di+120]
2.4. Instrukcije
Sada emo se upoznati sa repertoarom
instrukcija procesora Intel 8086. Instrukcije
emo podeliti u vie logikih grupa, i to po
za
rukovanje
10
za
rukovanje
Pozivanje
podprograma
omoguuje
instrukcija CALL, iji operand sadri adresu
potprograma. Ova instrukcija implicitno koristi
stek za smetanje povratne adrese
Povratak iz potprograma omoguuje
instrukcija RET.
2.4.4.4.
Instrukcije
programskih petlji
za
obrazovanje
za
rukovanje
status
11
12
3. Asemblerski jezik
su
small
mov
mov
ax,@data
ds,ax
13
3.3.2. Pokazivai
Zauzeta memorijska lokacija moe da sadri
pokaziva. To se opisuje oznakom PTR iza
koje sledi opis pokazivane lokacije. Tako : x
dw
ptr
word
oznaava zauzimanje
memorijske lokacije od dva bajta koja sadri
adresu lokacije od dva bajta.
3.3.3. Nizovi
Do zauzimanja niza lokacija dolazi ako se
iza direktive za zauzimanje jedne navede broj
elemenata niza, a zatim re DUP iza koje u
zagradi sledi vrednost na koju se inicijalizuju
elementi niza :
....
.data
niz
....
db 100 dup(?)
14
ax,x
ax,y
z,ax
makroa pauza
asembliranju.
neizazivaju
probleme
3.6. Potprogrami
Definicija prtprograma otpoinje direktivom
PROC pre koje sledi njeno ime. Nakon ove
direktive moe da sledi lista parametara.
Potprogrami se pozivaju instrukcijom
CALL.
Listu parametara najavljuje direktiva ARG.
Nakon nje slede imena parametara. Za njih se
podrazumeva da zauzimaju dva bajta. Iza
parametra se moe navesti njegov opis, koga
najavljuje dvotaka.
Definicija
potprograma
se
zavrava
direktivom ENDP, kojoj predhodi naziv
potprograma iji kraj oznaava ova direktiva.
U
nastavku
sledi
potpun
primer
asemblerskog programa sa definicijom i
pozivom potprograma saberi:
.model small
.stack
.data
x dw 2
y dw 3
z dw ?
.code
saberi PROC NEAR
ARG a,b,c : NEAR PTR WORD = ARGLEN
push bp
mov bp,sp
mov ax,a
add ax,b
mov bx,c
mov [bx],ax
pop bp
ret ARGLEN
saberi ENDP
start:
mov ax,@data
mov ds,ax
lea ax,z
push ax
mov ax,y
push ax
mov ax,x
push ax
call saberi
mov ax,4c00h
int 21h
end start
15
16
4. Primeri programa
4.1. Dodela vrednosti
Prilikom raunanja matematikih izraza za
privremeno
uvanje
vrednosti
obino
koristimo neki od registara opte namene, a
najee akumulator. Da bi se vrednost registra
inicijalizovala, odnosno postavila na nulu,
koristi se sledei izraz, konkretno za
akumulator.
mov
ax,0
ax,ax
ime_promenljive, vrednost
ime_niza[indeks], vrednost
mov ds,ax
mov al,5
xor bx,bx
sledeci:
mov niz[bx],al
inc bx
cmp bx,LENGTH niz
jne sledeci
mov ax,4c00h
int 21h
end start
17
ili
al,a
b,ax
c_nizi,ax
c_visi,dx
mov ax,4c00h
int 21h
end start
mov b,ax
xor dx,dx
mov c_nizi,ax
mov c_visi,dx
mov
mov
xor ax,ax
mov al,a
mov ax,4c00h
int 21h
end start
18
add
adc
ax, nizi_deo
dx, vii_deo
ax, 1
dx, 0
ax, nizi_deo
dx, visi_deo
ax, 1
dx, 0
ax
dx
ax, 1
dx, 0
dx
ax
dx, 0
19
cmp ax,1
je jedan
cmp ax,2
je dva
cmp ax,3
je tri
jmp short inace
jedan:
dva: mov z,ax
jmp short kraj
tri: shl ax,1
mov z,ax
jmp short kraj
inace:
mov z,0
kraj:
mov ax,4c00h
int 21h
end start
x
dw 3
.code
start:
mov ax,@data
mov ds,ax
mov cx,10
telo:
inc x
loop telo
mov ax,4c00h
int 21h
end start
20
mov ax,x
cmp ax,z
jge kraj
telo: inc x
jmp short provera
kraj:
mov ax,4c00h
int 21h
end start
end start
4.10. Vraanje
preko registara
rezultata
potprograma
21
22
5. Sistemski
izuzetaka
pozivi
obrada
23
7,6
8
11,10,9
12
13
15,14
znaenje
postoje disketne jedinice
koprocesor instaliran
broj 64K mem. blokova (samo XT)
video mod
00 - EGA,VGA ili PGA
01 - 40x25 color
10 - 80x25 color
11 - 80x25 mono
broj disketnih jednica - 1
rezervisano
broj serijskih portova
port za palicu instaliran
rezervisano
broj paralelnih portova
funkcija
koje
rezolucija
40x25
40x25
80x25
80x25
320x200
320x200
640x200
80x25
320x200
boja
2
16
16 sivih
16
4
4 sive
2
mono
16
vrsta
tekst
tekst
tekst
tekst
grafika
grafika
grafika
tekst
grafika
640x200
640x350
640x350
640x480
640x480
320x200
16
mono
16
2
16
256
grafika
grafika
grafika
grafika
grafika
grafika
24
nocursor PROC
mov ah,1
mov ch,20h
mov cl,00h
int 10h
ret
nocursor ENDP
gety PROC
mov ah,3
int 10h
xor ax,ax
mov al,dh
ret
gety ENDP
normalcur PROC
mov ah,1
mov ch,06h
mov cl,07h
int 10h
ret
normalcur ENDP
solidcur PROC
mov ah,1
mov ch,00h
mov cl,07h
int 10h
ret
solidcur ENDP
25
int 10h
ret
clrscr ENDP
Navedena
procedura
brie
sadraj
tekstualnog ekrana u standardnoj rezoluciji
80x25.
Boja
crna
plava
zelena
plavo-zelena
crvena
ljubiasta
braon
svetlo siva
tamno siva
svetlo plava
svetlo zelena
svetlo plavo-zelena
svetlo crvena
svetlo ljubiasta
uta
bela
26
mov ax,4c00h
int 21h
end start
i primetili, telo
poziva predhodno
moete slobodno
svojim narednim
Bit
7
6
5
4
3
2
1
0
AL
Opis
Insert aktivan
CapsLock aktivan
NumLock aktivan
ScrollLock aktivan
Alt pritisnut
Ctrl pritisnut
levi Shift pritisnut
desni Shift pritisnut
AH
Bit
Opis
27
7
6
5
4
3
2
1
0
SysReq pritisnut
CapsLock aktivan
NumLock aktivan
ScrollLock aktivan
desni Alt pritisnut
desni Ctrl pritisnut
levi Alt pritisnut
levi Ctrl pritisnut
28
29
30
mov ax,1
int 33h
mov ax,7
mov cx,10*8
mov dx,70*8
int 33h
mov ax,8
mov cx,5*8
mov dx,20*8
int 33h
ponovo:
mov ax,3
int 33h
cmp bx,3
jne ponovo
kraj:
mov ax,2
int 33h
mov ax,4c00h
int 21h
end start
31
A. Spisak instrukcija
Pre nego to ponemo sa predstavljanjem
pojedinanih instrukcija procesora 8086/8088
definisaemo format njihovog opisa radi
lakeg tumaenja.
Opis svake instrukcije otpoinje njenim
imenom i punim nazivom, na engleskom,
zatim se navodi tabela sa nainima njenog
korienja. Ovde postoji vie vrsta operanada
koji se mogu navesti uz instrukciju.
konstanta
konstanta_8
konstanta_16
registar
registar_8
registar_16
seg_registar
akumulator
memorija
memorija_8
memorija_16
near_proc
far_proc
mem_pointer_16
mem_pointer_32
reg_pointer_16
string
string_dest
string_src
pomeraj
short_labela
near_labela
far_labela
X
?
0
1
r
Korienje
O
?
S
?
Z
?
A
X
P
?
C
X
AAD
T
S
X
Z
X
A
?
P
X
C
?
P
X
C
?
AL <- AH * 10 + AL
AH <- 0
AAM
T
S
X
Z
X
A
?
AH <- AL / 10
AL <- AL MOD 10
32
O
?
AAS
Korienje
I
S
?
Z
?
A
X
P
?
C
X
O
0
O
X
S
X
Z
X
A
X
P
X
O
C
X
ADD Addition
O
X
ADD registar,registar
ADD registar,konstanta
ADD akumulator,konstanta
ADD registar,memorija
ADD memorija,registar
ADD memorija,konstanta
T
S
X
S
X
Z
X
A
?
P
X
C
0
Z
X
A
X
P
X
CALL near_proc
CALL far_proc
CALL mem_pointer_16
CALL reg_pointer_16
CALL mem_pointer_32
Korienje
Korienje
ADC registar,registar
ADC registar,konstanta
ADC akumulator,konstanta
ADC registar,memorija
ADC memorija,registar
ADC memorija,konstanta
T
AND registar,registar
AND registar,konstanta
AND akumulator,konstanta
AND registar,memorija
AND memorija,registar
AND memorija,konstanta
Korienje
C
0
IF FAR_pointer THEN
PUSH CS
CS <- dest_segment
ENDIF
PUSH IP
IP <- dest_offset
Korienje
O
C
X
Korienje
O
CF <- 0
CMPSW
Korienje
CLD
Korienje
O
D
0
CLI
I
0
S
X
Z
X
A
X
P
X
C
X
CMP (DS:SI),(ES:DI)
IF (DF = 0)
SI <- SI + 2
DI <- DI + 2
ELSE
SI <- SI - 2
DI <- DI - 2
ENDIF
DF <- 0
Korienje
O
X
C
CWD Convert Word to Doubleword
IF <- 0
CMC
Korienje
I
CWD
Korienje
C
X
CF <- -CF
CMP Compare
Korienje
O
X
CMP registar,registar
CMP registar,konstanta
CMP akumulator,konstanta
CMP registar,memorija
CMP memorija,registar
CMP memorija,konstanta
T
S
X
Z
X
A
X
P
X
SET_FLAGS_FROM_RESULT(dest - source)
CMPSB
T
S
X
Z
X
A
X
P
X
C
X
DAA
T
S
X
Z
X
A
X
P
X
C
X
CMP (DS:SI),(ES:DI)
IF (DF = 0)
SI <- SI + 1
DI <- DI + 1
ELSE
SI <- SI - 1
DI <- DI - 1
ENDIF
34
Korienje
O
?
IDIV registar_8
IDIV registar_16
IDIV memorija_8
IDIV memorija_16
Korienje
S
X
Z
X
A
X
P
X
C
X
O
?
DEC Decrement
O
X
S
X
Z
X
A
X
P
X
O
X
S
?
Z
?
A
?
P
?
C
?
P
?
C
?
S
?
Z
?
A
?
P
?
C
X
IN akumulator, konstanta_8
IN akumulator, DX
Korienje
IF BYTE_SIZE THEN
AL <- (port) ; port = konstanta_8 ili port =
DX
ELSE
AX <- (port)
ENDIF
Korienje
D
A
?
IF BYTE_SIZE THEN
AL <- AX / source
AH <- AX mod source
ELSE
AX <- DX:AX / source
DX <- DX:AX mod source
ENDIF
Z
?
IF BYTE_SIZE THEN
AX <- AL * source
ELSE
DX:AX <- AX * source
ENDIF
DIV registar_8
DIV registar_16
DIV memorija_8
DIV memorija_16
I
S
?
O
?
IMUL registar_8
IMUL registar_16
IMUL memorija_8
IMUL memorija_16
Korienje
Korienje
IF BYTE_SIZE THEN
AL <- AX / source
AH <- AX mod source
ELSE
AX <- DX:AX / source
DX <- DX:AX mod source
ENDIF
DEC registar_8
DEC registar_16
DEC memorija
Korienje
35
INC Increment
INC registar_8
INC registar_16
INC memorija
Korienje
O
X
JA Jump if Above
S
X
Z
X
Korienje
A
X
P
X
C
O
INT Interrupt
INT konstanta_8
Korienje
O
I
0
T
0
PUSHF
IF <- 0
TF <- 0
CALL FAR (INT*4)
JAE pomeraj
JNB pomeraj
JNC pomeraj
Korienje
INTO
Korienje
O
I
0
T
0
IF (OF = 1) THEN
PUSHF
IF <- 0
TF <- 0
CALL FAR (10h)
ENDIF
IF (CF = 0) THEN
JMP SHORT pomeraj
ENDIF
JB Jump if Below
JNAE Jump if Not Above or Equal
JC Jump if Carry
Korienje
O
r
D
r
POP IP
POP CS
POPF
JB pomeraj
JNAE pomeraj
JC pomeraj
Korienje
I
r
T
r
S
r
Z
r
A
r
P
r
C
r
IF (CF = 1) THEN
JMP SHORT pomeraj
ENDIF
36
JBE pomeraj
JNA pomeraj
Korienje
JGE pomeraj
JNL pomeraj
Korienje
JL Jump if Less
JCXZ pomeraj
Korienje
O
IF (CX = 0) THEN
JMP SHORT pomeraj
ENDIF
JL pomeraj
JNGE pomeraj
Korienje
JE Jump if Equal
JZ Jump if Zero
Korienje
IF (ZF = 1) THEN
JMP SHORT pomeraj
ENDIF
JLE pomeraj
JNG pomeraj
Korienje
JG Jump if Greater
JNLE Jump if Not Less or Equal
Korienje
JE pomeraj
JZ pomeraj
Korienje
IF (ZF = 0) THEN
JMP SHORT pomeraj
ENDIF
37
Korienje
C
JP pomeraj
JPE pomeraj
Korienje
IF (OF = 0) THEN
JMP SHORT pomeraj
ENDIF
IF (PF = 1) THEN
JMP SHORT pomeraj
ENDIF
JS Jump if Sign
JNP pomeraj
JPO pomeraj
Korienje
JS pomeraj
Korienje
A
IF (PF=0) THEN
JMP SHORT pomeraj
ENDIF
IF (SF = 1) THEN
JMP SHORT pomeraj
ENDIF
Korienje
JNS pomeraj
Korienje
O
IF (SF = 0) THEN
JMP SHORT pomeraj
ENDIF
IF (OF = 0) THEN
JMP SHORT pomeraj
ENDIF
LAHF
Korienje
JO pomeraj
I
JO Jump if Overflow
Korienje
O
AH0
AH2
AH4
AH6
AH7
D
<<<<<-
CF
PF
AF
ZF
SF
38
Korienje
O
CX <- CX - 1
IF (CX <> 0) THEN
JMP short_label
ENDIF
LOOP pomeraj
Korienje
Korienje
Korienje
O
CX <- CX - 1
IF (CX <> 0) AND (ZF =1) THEN
JMP short_label
ENDIF
Korienje
LOOPNE pomeraj
LOOPNZ pomeraj
Korienje
O
C
O
AL <- (DS:SI)
IF (DF = 0) THEN
SI <- SI + 1
ELSE
SI <- SI - 1
ENDIF
CX <- CX - 1
IF (CX <> 0) AND (ZF =0) THEN
JMP short_label
ENDIF
Korienje
O
AL <- (DS:SI)
IF (DF = 0) THEN
SI <- SI + 2
ELSE
SI <- SI - 2
ENDIF
39
MOV Move
MOV registar, registar
MOV memorija, akumulator
MOV akumulator, memorija
MOV memorija, registar
MOV registar, memorija
MOV registar, konstanta
MOV memorija, konstanta
MOV seg_registar, registar_16
MOV seg_registar, memorija
MOV registar_16, seg_registar
MOV memorija, seg_registar
Korienje
MUL registar_8
MUL registar_16
MUL memorija_8
MUL memorija_16
Korienje
O
X
S
?
Z
?
A
?
P
?
C
X
Z
X
A
X
P
X
C
X
IF BYTE_SIZE THEN
AX <- AL * source
ELSE
DX:AX <- AX * source
ENDIF
NEG Negate
dest <- source
NEG registar
NEG memorija
Korienje
MOVSB Move String by Byte
O
X
MOVSB
Korienje
I
S
X
NOP
XCHG ax,ax
MOVSW
I
Korienje
NOP No Operation
Korienje
NOT registar
NOT memorija
Korienje
40
OR Logical OR
O
0
S
X
Z
X
A
?
P
X
POPF
Korienje
OR registar,registar
OR registar,konstanta
OR akumulator,konstanta
OR registar,memorija
OR memorija,registar
OR memorija,konstanta
Korienje
O
r
C
0
D
r
I
r
T
r
S
r
Z
r
A
r
P
r
C
r
C
X
CF <- (SS:SP)0
PF <- (SS:SP)2
AF <- (SS:SP)4
ZF <- (SS:SP)6
SF <- (SS:SP)7
TF <- (SS:SP)8
IF <- (SS:SP)9
DF <- (SS:SP)10
OF <- (SS:SP)11
SP <- SP + 2
Korienje
OUT konstanta_8, akumulator
OUT DX, akumulator
Korienje
POP registar_16
POP seg_registar
POP memorija
I
Korienje
SP
<- SP - 2
(SS:SP) <- source
IF BYTE_SIZE THEN
(port) <- AL
ELSE
(port) <- AX
ENDIF
Korienje
SP
<- SP - 2
(SS:SP)0 <- CF
(SS:SP)2 <- PF
(SS:SP)4 <- AF
(SS:SP)6 <- ZF
(SS:SP)7 <- SF
(SS:SP)8 <- TF
(SS:SP)9 <- IF
(SS:SP)10 <- DF
(SS:SP)11 <- OF
Korienje
O
X
CF
Sadraj
41
Korienje
O
X
Sadraj
RET
RET konstanta_16
Korienje
O
P
C
X
CF
Korienje
O
X
S
C
X
C
X
ROR registar, 1
ROR registar, CL
ROR memorija, 1
ROR memorija, CL
O
X
Sadraj
Z
Sadraj
REPNE
REPNZ
I
CF
Korienje
Korienje
ROL registar, 1
ROL registar, CL
ROL memorija, 1
ROL memorija, CL
POP IP
IF FAR RETURN
POP CS
ENDIF
IF (konstanta_16<>0)
SP <- SP + konstanta_16
ENDIF
REP Repeat
Korienje
CF
SAHF
T
S
X
Z
X
A
X
P
X
C
X
CF <- AH0
PF <- AH2
AF <- AH4
ZF <- AH6
SF <- AH7
42
O
X
S
X
Z
X
A
?
Sadraj
CF
P
X
C
X
O
X
S
X
Z
X
Sadraj
SF
P
X
C
X
CMP AL,(ES:DI)
IF (DF = 0) THEN
DI <- DI + 2
ELSE
DI <- DI - 2
ENDIF
SAR registar, 1
SAR registar, CL
SAR memorija, 1
SAR memorija, CL
Korienje
SCASW
Korienje
SAL registar, 1
SAL registar, CL
SAL memorija, 1
SAL memorija, CL
Korienje
A
?
SHL registar, 1
SHL registar, CL
SHL memorija, 1
SHL memorija, CL
Korienje
P
X
C
X
O
X
CF
S
X
Z
X
A
?
Sadraj
CF
O
X
Korienje
S
X
Z
X
A
X
P
X
SHR registar, 1
SHR registar, CL
SHR memorija, 1
SHR memorija, CL
Korienje
C
X
O
X
Z
X
A
?
Sadraj
S
X
P
X
C
X
CF
SCASB
Korienje
I
O
CMP AL,(ES:DI)
IF (DF = 0) THEN
DI <- DI + 1
ELSE
DI <- DI - 1
ENDIF
STC
Korienje
D
C
1
CF <- 1
43
Korienje
O
D
1
SUB Substract
Korienje
S
DF <- 1
O
X
I
1
O
0
STOSB
I
Z
X
A
X
P
X
C
X
Korienje
S
X
TEST Test
IF <- 1
Korienje
STI
Korienje
(ES:DI) <- AL
IF (DF = 0) THEN
DI <- DI + 1
ELSE
DI <- DI - 1
ENDIF
S
X
Z
X
A
?
P
X
C
0
WAIT Wait
WAIT
Korienje
O
STOSW
Korienje
I
(ES:DI) <- AL
IF (DF = 0) THEN
DI <- DI + 2
ELSE
DI <- DI - 2
ENDIF
Korienje
44
XLAT Translate
XLAT
Korienje
O
O
0
XOR registar,registar
XOR registar,konstanta
XOR akumulator,konstanta
XOR registar,memorija
XOR memorija,registar
XOR memorija,konstanta
S
X
Z
X
A
?
P
X
C
0
45
B. ASCII tabela
Ovde je data ASCII tabela, u kojoj se nalaze
paralelno ispisane vrednosti u decimalnom,
oktalnom, heksadecimalnom formatu, kao i
sam prikaz ASCII karaktera, odnosno njegov
naziv, ukoliko se radi o kontrolnom karakteru.
Dec
Octal
Hex
ASCII
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
000
001
002
003
004
005
006
007
010
011
012
013
014
015
016
017
020
021
022
023
024
025
026
027
030
031
032
033
034
035
036
037
040
041
042
043
044
045
046
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
SP
!
"
#
$
%
&
Dec
Octal
Hex
ASCII
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
047
050
051
052
053
054
055
056
057
060
061
062
063
064
065
066
067
070
071
072
073
074
075
076
077
100
101
102
103
104
105
106
107
110
111
112
113
114
115
116
117
120
121
122
123
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
'
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
46
Dec
Octal
Hex
ASCII
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
124
125
126
127
130
131
132
133
134
135
136
137
140
141
142
143
144
145
146
147
150
151
152
153
154
155
156
157
160
161
162
163
164
165
166
167
170
171
172
173
174
175
176
177
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
47
C. Scan kodovi
Ovi kodovi se koriste u radu sa INT 16,
BIOS podrkom za tastaturu. Podeliemo ih u
vie grupa radi lakeg korienja.
C.1. Abeceda
Key
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
Norm.
1E61
3062
2E63
2064
1265
2166
2267
2368
1769
246A
256B
266C
326D
316E
186F
1970
1071
1372
1F73
1474
1675
2F76
1177
2D78
1579
2C7A
+ Shift
1E41
3042
2E42
2044
1245
2146
2247
2348
1749
244A
254B
264C
324D
314E
184F
1950
1051
1352
1F53
1454
1655
2F56
1157
2D58
1559
2C5A
+ Ctrl
1E01
3002
2E03
2004
1205
2106
2207
2308
1709
240A
250B
260C
320D
310E
180F
1910
1011
1312
1F13
1414
1615
2F16
1117
2D18
1519
2C1A
+ Alt
1E00
3000
2E00
2000
1200
2100
2200
2300
1700
2400
2500
2600
3200
3100
1800
1900
1000
1300
1F00
1400
1600
2F00
1100
2D00
1500
2C00
+ Shift
0C5F
0D2B
1A7B
1B7D
273A
2822
297E
2B7C
333C
343E
353F
+ Ctrl
0C1F
+ Alt
8200
8300
1A00
1B00
2700
C.2. Simboli
Key
=
[
]
;
'
`
\
,
.
/
Norm.
0C2D
0D3D
1A5B
1B5D
273B
2827
2960
2B5C
332C
342E
352F
1A1B
1B1D
2B1C
2600
Key
1
2
3
4
5
6
7
8
9
0
Norm.
0231
0332
0433
0534
0635
0736
0837
0938
0A39
0B30
+ Shift
0221
0340
0423
0524
0625
075E
0826
092A
0A28
0B29
+ Ctrl
0300
071E
+ Alt
7800
7900
7A00
7B00
7C00
7D00
7E00
7F00
8000
8100
Norm.
3B00
3C00
3D00
3E00
3F00
4000
4100
4200
4300
4400
8500
8600
+ Shift
5400
5500
5600
5700
5800
5900
5A00
5B00
5C00
5D00
8700
8800
+ Ctrl
5E00
5F00
6000
6100
6200
6300
6400
6500
6600
6700
8900
8A00
+ Alt
6800
6900
6A00
6B00
6C00
6D00
6E00
6F00
7000
7100
8B00
8C00
Norm
0E08
+Shift
0E08
+Ctrl
0E7F
+Alt
0E00
5300
5000
4F00
1C0D
011B
4700
5200
532E
5032
4F31
1C0D
011B
4737
5230
4C35
9300
9100
7500
1C0A
011B
7700
9200
8F00
9600
8E00
A300
A000
9F00
A600
0100
9700
A200
372A
4A2D
4E2B
352F
4B00
5100
4900
4A2D
4E2B
352F
4B34
5133
4939
4D00
3920
0F09
4800
4D36
3920
0F00
4838
9500
7300
7600
8400
7200
7400
3920
9400
8D00
3700
4A00
4E00
A400
9B00
A100
9900
9D00
3920
A500
9800
C.3. Brojevi
48
Literatura
49