0% found this document useful (0 votes)
8 views31 pages

Lectures Binary College

Uploaded by

Eldin Morina
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views31 pages

Lectures Binary College

Uploaded by

Eldin Morina
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 31

Ushtrime 7 – Manipulimi i te

dhenave
Hyrje ne Informatike

PhD.C.Ass. Endrit Fetahu


Gjeneratat e gjuhës programuese

• Gjenerata e parë e gjuhës programuese, ose 1GL, është gjuha e


makinës. Gjuha e makinës është një grup udhëzimesh dhe të
dhënash që njësia qendrore e përpunimit të një kompjuteri mund të
ekzekutojë drejtpërdrejt. Deklaratat e gjuhës së makinës shkruhen në
kod binar, dhe secila deklaratë i përgjigjet një veprimi të makinës.
Gjuha e makinës

• Kjo është shumë e vështirë për tu kuptuar nga një njeri. është një seri
numrash, fillimisht binar, por heksadecimal është më i zakonshëm
sot. Kjo filloi që nga ditët e para të llogaritjes, ku kishte mekanizma të
kufizuar të inputeve
Çdo lloj procesori ka grupin e vet të udhëzimeve specifike të makinës.
• Një udhëzim makine përbëhet nga disa bajt në memorje që i thotë
procesorit të kryejë një operacion të makinës.
• Procesori shikon udhëzimet e makinës në memorien kryesore njëra
pas tjetrës dhe kryen një funksionim të makinës për secilin udhëzim
të makinës.
• Mbledhja e udhëzimeve të makinës në memorien kryesore quhet
gjuhë programuese e makinës
Instruksionet
Advantazhet

• Gjuha e makinës bën përdorimin e shpejtë dhe efikas të kompjuterit.


• Nuk kërkon asnjë përkthyes për të përkthyer kodin. Kuptohet
drejtpërdrejt nga kompjuteri.
• Programuesit mund të përdorin procesorin dhe memorien në një
mënyrë më të mirë duke përdorur një gjuhë të nivelit të ulët.
• Mund të komunikojë drejtpërdrejt me pajisjet harduerike.
Dizadvantazhet

• Të gjitha kodet e funksionimit dhe adresat e memories duhet të


mbahen mend.
• Eshte e vështirë të ndryshosh ose të gjesh gabime në një program të
shkruar në gjuhën e makinës.
• Kjo gjuhë programimi nuk është e lëvizshme.
• Gjuhët e makinës janë më të prirura për gabime.
Pse njerëzit nuk përdorin gjuhën e makinës

• Ndërsa kuptohen lehtësisht nga kompjuterët, gjuhët e makinës janë


pothuajse të pamundura për njerëzit për t'u përdorur sepse ato
përbëhen tërësisht nga numra. Programuesit, pra, përdorin ose një
gjuhë programimi të nivelit të lartë ose një gjuhë asamble. Një gjuhë
montimi përmban të njëjtat udhëzime si një gjuhë makine, por
udhëzimet dhe ndryshoret kanë emra në vend që të jenë thjesht
numra.
Dizajnimi abstrakt
Human Abstract design Software
abstract interface
Thought hierarchy
H.L. Language Compiler
& abstract interface
Operating Sys.
Virtual VM Translator
abstract interface
Machine
Assembly
Language

Assembler

abstract interface
Computer
Machine Architecture
abstract interface
Language
Hardware Gate Logic
abstract interface
Platform
Electrical
Chips & Engineering
Hardware Physics
Logic Gates
hierarchy
Gjuha e makinës

Abstraksioni - dualiteti i zbatimit:

• Gjuha e makinës (= grup udhëzimesh) mund të shihet si një


abstraksion i orientuar drejt programuesit te platformës
harduerike

• Platforma harduerike mund të shihet si një mjet fizik për të


realizuar abstraksionin e gjuhës së makinës
Gjuha e makinës

Abstraksioni - dualiteti i zbatimit:

• Gjuha e makinës (= grup udhëzimesh) mund të shihet si një


abstraksion i orientuar drejt programuesit i platformës
harduerike

• Platforma harduerike mund të shihet si një mjet fizik për të


realizuar abstraksionin e gjuhës së makinës

Dualitet tjetër

◼ Versioni binar: 0001 0001 0010 0011 (kodi makinës)

◼ Versioni simbolik: ADD R1, R2, R3 (assembly)


Komandat tipike të gjuhës së makinës (3 lloje)

• ALU operacionet
• Memory access operacionet
(addressing mode: si specifikohen operandët)
• Adresimi i menjëhershëm, LDA R1, 67 // R1=67
• Adresimi Direkt, LD R1, 67 // R1=M[67]
• Adresikimi Indirekt, LDI R1, R2 // R1=M[R2]
• Operacionet e kontrollit të rrjedhës
Shembulli 1:
// Mëposhtë R1,R2,R3 janë rregjistra, PC është program counter,
// dhe addr është ndonjë vlerë.

ADD R1,R2,R3 // R1  R2 + R3

ADDI R1,R2,47 // R1  R2 + 47

AND R1,R1,R2 // R1  R1 and (bit-wise)

JMP addr // PC  addr

JEQ R1,R2,addr // IF R1 == R2 THEN PC  addr ELSE PC++

LOAD R1, addr // R1  RAM[addr]

STORE R1, addr // RAM[addr]  R1

NOP // Do nothing

//
Makina

• Një 16-bit makinë përmban këto elemente:

reset Screen
Computer

Keyboard
Makina
• Një 16-bit makinë përmban këto elemente:

inM

writeM
Instruction outM Data
instruction

CPU
Memory Memory
addressM
(ROM32K) (Memory)
pc

reset

Të dy çipat e memories janë 16-bit të gjerë dhe kanë hapësirë adresash 15-bit.
Makina
• Një 16-bit makinë përmban këto elemente:

Data memory: RAM – një sekuencë e adresueshme e regjistrave

Instruction memory: ROM – një sekuencë e adresueshme e regjistrave

Registers: D, A, M, ku M është për RAM[A]

Processing: ALU, i aftë për të llogaritur funksione të ndryshme

Program counter: PC, përmban një adresë

Control: ROM është i ngarkuar me një sekuencë udhëzimesh 16-bitëshe, një për vendndodhjen
e memories, duke filluar nga adresa 0.

Instruction set: Dy udhëzime: A-udhëzim, C-udhëzim.


A Instruksioni
@value // A  value

Ku vlera është ose një numër ose një simbol që i referohet një numri.
Pse A Instruksioni?
Ne kemi udhëzimin A për caktimin e adresave nëse është e nevojshme.

Shembull: @21

Efekti:

◼ Vendos regjistrin A në 21

◼ RAM [21] bëhet regjistri RAM i përzgjedhur M


A Instruksioni
@value // A  value

Përdoret për Shembull:


• Insertimin e një vlere
konstante @17 // A = 17
( A = value) D = A // D = 17

◼ Selektimi i një lokacinoni @17 // A = 17


në RAM D = M // D = RAM[17]
( register = RAM[A]) M = -1 // RAM[17]=-1

◼ Selektimi i një lokacioni ROM @17 // A = 17


( PC = A ) JMP // fetch the instruction
// stored in ROM[17]
C Instruksioni
dest = comp ; jump

Të dy dest dhe jump janë opsionale.


Së pari, ne llogarisim diçka.
Tjetra, opsionalisht, ne mund ta ruajmë rezultatin, ose ta përdorim atë për të
kërcyer diku për të vazhduar ekzekutimin e programit.

comp:

0, 1, -1, D, A, !D, !A, -D, -A, D+1, A+1, D-1, A-1, D+A, D-A, A-D, D&A, D|A
M, !M, -M, M+1, M-1, D+M, D-M, M-D, D&M, D|M

dest: null, A, D, M, MD, AM, AD, AMD

Krahasoni me zero. Nëse


jump: null, JGT, JEQ, JLT, JGE, JNE, JLE, JMP gjendja qëndron, hidhu
tek ROM [A]
C Instruksioni

dest = comp ; jump

◼ Llogarit vlerën e komp


◼ Ruan rezultatin në dest
◼ Nëse (kërcimi i kushteve krahasohet me zero është i vërtetë), shkoni në
udhëzimin në ROM [A].
C Instruksioni
dest = comp ; jump
comp:
0, 1, -1, D, A, !D, !A, -D, -A, D+1, A+1, D-1, A-1, D+A, D-A, A-D, D&A, D|A
M, !M, -M, M+1, M-1, D+M, D-M, M-D, D&M, D|M

dest: null, A, D, M, MD, AM, AD, AMD


jump: null, JGT, JEQ, JLT, JGE, JNE, JLE, JMP

Shembull: Vendosni rregjistrin D në -1


D = -1
Shembull: vendos RAM[300] në vlerën e rregjistrit D minus 1
@300
M = D-1
Shembill: if ((D-1) == 0) goto ROM[56]
@56
D-1; JEQ
Gjuha e makinës

Dy mënyra për të shprehur të njëjtën semantikë:


• Kodi binar (gjuha e makinës)
• Gjuha simbolike (assembly)

simbolike binare
@17 0000 0000 0001 0001
translate
D+1; JLE 1110 0111 1100 0110

execute

hardëare
Gjuha e makinës
Kod (shembull) Ekzekutimi
// Computes 1+...+RAM[0] 0000000000010000
// And stored the sum in RAM[1] 1110111111001000
@i 0000000000010001
M=1 // i = 1 1110101010001000
@sum 0000000000010000
M=0 // sum = 0 1111110000010000
(LOOP) 0000000000000000
@i // if i>RAM[0] goto WRITE 1111010011010000
D=M 0000000000010010
@R0 1110001100000001
D=D-M 0000000000010000
@WRITE 1111110000010000
D;JGT assemble 0000000000010001
@i // sum += i 1111000010001000
D=M 0000000000010000
@sum 1111110111001000
M=D+M 0000000000000100
@i // i++ 1110101010000111
M=M+1 0000000000010001
@LOOP // goto LOOP 1111110000010000
0;JMP 0000000000000001
(WRITE) 1110001100001000
@sum 0000000000010110
D=M 1110101010000111
@R1
M=D // RAM[1] = the sum
(END)
@END Ne fokusohemi në shkrimin e kodit assembler
0;JMP
Regjistrat dhe memorja
• D: data register
• A: address/data register
• M: memoria momentalisht e selektuar, M=RAM[12]
Simbolet
symbol value symbol value
R0 0 SP 0
R1 1 LCL 1
R2 2 ARG 2
… … THIS 3
R15 15 THAT 4
SCREEN 16384
KBD 24576

• R0, R1,…, R15: regjistrat virtual


• SCREEN dhe KBD: adresa bazë e hartave të I / O
• Të tjerët: përdoret në zbatimin e Makinës memories Virtuale
• Vini re se makina është indjeshëm në shkronja të vogla, R5! = R5
Detyra 1.
Implementoni hapat e mëtejshme

1. Vendosni D në A-1

2. Vendosni A dhe D në A + 1

3. Vendos D në 19

4. D++

5. Vendos D - RAM[17]

6. Vendos RAM[5034] në D - 1

7. Vendos RAM[53] ne 171

8. Vendos 1 ne RAM[7],
dhe ruaj rezultatin në D
Detyra 1. 1. D = A-1
Implementoni hapat e mëtejshme
2. AD=A+1
3. @19
1. Vendosni D në A-1 D=A
2. Vendosi A dhe D në A + 1 4. D=D+1
5. @17
3. Vendos D në 19 D=M
4. D++ 6. @5034
M=D-1
5. D=RAM[17]
7. @171
6. Vendos RAM[5034] në D - 1 D=A
@53
7. Vendos RAM[53] to 171
M=D
8. Vendos 1 ne RAM[7], 8. @7
dhe ruaj rezultatin në D
D=M+1
Detyra 2.

• Mbledhja e dy numrave RAM[0] + RAM[1], ta ruajme tek RAM[2]


Detyra 2.

• Mbledhja e dy numrave
Përfundoni siç duhet

• Për të shmangur kodin keqdashës, mund të përfundoni programin


tuaj me një loop të pafund, siç është

@6
0; JMP
Detyra 3.
// Detyra: të bëhet swap.
// temp = R1
// R1 = R0
// R0 = temp
Detyra 3.
// Detyra: të bëhet swap.
// temp = R1
// R1 = R0
// R0 = temp

@R1
D=M
@temp
M=D // temp = R1

@R0
D=M
@R1
M=D // R1 = temp

@temp
D=M
@R0
M=D // R0 = temp
(END)
@END
0;JMP

You might also like