Introduction to 8086 Assembly

Hasonló dokumentumok
Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

Assembly. Iványi Péter

Assembly Rekurzív függvények, EXE, C programok. Iványi Péter

Paraméter átadás regisztereken keresztül

Mi az assembly? Gyakorlatias assembly bevezető. Sokféle assembly van... Mit fogunk mi használni? A NASM fordítóprogramja. Assembly programok fordítása

Computer Architecture

Stack Vezérlés szerkezet Adat 2.

Assembly utasítások listája

assume CS:Code, DS:Data, SS:Stack Start mov dl, 100 mov dh, 100 push dx Rajz

[cimke:] [feltétel] utasítás paraméterek [; megjegyzés]

PE/COFF fájl formátum

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

Bevezetés Alapfogalmak Jog

Számítógép Architektúrák

Intel x86 utasításkészlet + disassembler működése

Miskolci Egyetem Gazdaságtudományi Kar Üzleti Információgazdálkodási és Módszertani Intézet Nonparametric Tests





Digitális rendszerek. Utasításarchitektúra szintje

Miskolci Egyetem Gazdaságtudományi Kar Üzleti Információgazdálkodási és Módszertani Intézet. Nonparametric Tests. Petra Petrovics.

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

A 32 bites x86-os architektúra regiszterei

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék

Adatelérés és memóriakezelés

Intel x86 utasításkészlet

Programfejlesztés. Programozás alapjai II. (3. ea) C++ Néhány programozási módszer. Korai szoftverkészítés jellemzői. Gépi nyelv? Strukturált tervezés

A Számítógépek felépítése, mőködési módjai

Programozás alapjai II. (3. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

HARDVERKÖZELI PROGRAMOZÁS1

Dense Matrix Algorithms (Chapter 8) Alexandre David B2-206

Programozás alapjai II. (2. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

Programozás alapjai II. (2. ea) C++

Bevezetés a számítástechnikába

Programozás alapjai II. (2. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

Balaton Marcell Balázs. Assembly jegyzet. Az Assembly egy alacsony szintű nyelv, mely a gépi kódú programozás egyszerűsítésére született.

R alapok, Rejtett Markov modell gyakorlat

Archi2 Gyak. (Processzorok Utasításszintű Kezelése) 2014 ősz

A hibát az alábbi Python program segítségével tudjuk előidézni:

assume CS:Code, DS:Data, SS:Stack Start: xor di, di mov si, 1 Torles int 10h mov dl, 40 xor bh, bh mov ah, 02h Kesleltet int 16h

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Kitlei Róbert kitlei.web.elte.hu. Karunkról Kari digitális könyvtár

1. ábra: Perifériára való írás idődiagramja

GÁBOR DÉNES FŐISKOLA PREZENTÁCIÓ. Vezetőtanár: Ágoston György 2002/ szemeszter. 222 lap

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

Biztonságos programozás Puffer túlcsordulásos támadások

Hírközlő rendszerek biztonsága laboratórium Számítógépes rendszerek sebezhetőségének vizsgálata

1. Az utasítás beolvasása a processzorba

Biztonságos programozás Puffer túlcsordulásos támadások

Gyártórendszerek modellezése: MILP modell PNS feladatokhoz

Assembly Utasítások, programok. Iványi Péter

Bevezetés a számítógépes rendszerekbe programozóknak

Lexington Public Schools 146 Maple Street Lexington, Massachusetts 02420

Programfejlesztés. Programozás alapjai II. (3. ea) C++ Néhány programozási módszer. Korai szoftverkészítés jellemzői. Gépi nyelv? Strukturált tervezés

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Programozás alapjai II. (3. ea) C++

Processzorok Utasításszintű Kezelése tavasz

Color profile: Disabled Composite Default screen

Karunkról Kari digitális könyvtár

Fordítóprogramok szerkesztése Flex és Bison segítségével

Máté: Számítógép architektúrák

Rootkitek. Előadó: Barta Csaba

Biztonságos programozás Puffer túlcsordulásos támadások

Basic Arrays. Contents. Chris Wild & Steven Zeil. May 28, Description 3

Assembly Címzési módok. Iványi Péter

Klaszterezés, 2. rész

Léptetőmotorok. Előnyök: Hátrányok:

Programozás 5. Dr. Iványi Péter

Statistical Inference

Phenotype. Genotype. It is like any other experiment! What is a bioinformatics experiment? Remember the Goal. Infectious Disease Paradigm

Create & validate a signature

2010. évi I. mód. mód.

Irvine eljárások. ClrScr - Törli a képernyő tartalmát és a kurzort a képernyő bal felső sarkába helyezi (Clear Screen).

Előszó avagy Murphy és az optimizmus. Tartalomjegyzék

code segment para public 'code' assume cs:code, ds:code, es:nothing, ss:nothing

discosnp demo - Peterlongo Pierre 1 DISCOSNP++: Live demo

Computer Architectures

Régi programozási nyelvek. Készítette: Hudasi Luca Flóra

USER MANUAL Guest user


Programok működése dióhéjban

Miskolci Egyetem Gazdaságtudományi Kar Üzleti Információgazdálkodási és Módszertani Intézet Introduction to Multiple Correlation

2007. február 25. TARTALOM

Magasszintű programozási felület idősorok nemlineáris analízisére

Computer controlled systems


ADATBÁZIS HASZNÁLAT I. 4. gyakorlat

A memória működése szoftverfejlesztői szemmel. Smidla József Operációkutatási Laboratórium november 20.

2. sz. melléklet. e Ft-ban. 2.Gazdasági Intézmény és önálló mőködı intézményei. 1. Karinthy Frigyes Ált. Mőv. Központ. Sorszám Elıirányzat megnevezése

Közlekedési események képi feldolgozása

Dr. Oniga István. DIGITÁLIS TECHNIKA 10 Memóriák


Programozás C és C++ -ban

Bevezetés az informatikába

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Assebly feladatok SHR SHL NOT NEG AND XOR. Ezt követően ismertetni kell a szoftver megszakítás fogalmát és szükségességét.

VENTS ifan Eladva (eladó neve, bélyegzõje)

On The Number Of Slim Semimodular Lattices

Dr. Szőke Szilvia Dr. Balogh Péter: Nemparaméteres eljárások

Átírás:

Introduction to 886 Assembly Lecture 7 D and N-D Arrays

D Arrays 4 5 tabular data rows and columns 4 6 8 6 9 5 4 8 6

D Arrays 4 5 4 6 8 6 9 5 https://advancedmathclubsk.weebly.com/matrices.html 4 8 6 5 5 5

D Arrays https://hiveminer.com/tags/desert,isfahan/recent

D Arrays https://hiveminer.com/tags/desert,isfahan/recent

D Arrays

D Arrays int a[][4] = {{,, 5, 7}, {, 4, 6, 8}, {4,,-,7}}; printf("%d\n", a[][]); 5 7 4 6 8 4-7

D Arrays int a[][4] = {{,, 5, 7}, {, 4, 6, 8}, {4,,-,7}}; printf("%d\n", a[i][j]); a[][] a[][] a[][] a[][] a[][] a[][] a[][] a[][] a[][] a[][] a[][] a[][]

How to implement D arrays?

Memory Memory 88 9 96 88 9 96 row by row column by column

Memory Memory 88 9 96 88 9 96 Row Major Column Major

Memory Memory 88 9 96 88 9 96 Row Major (C,C++,Pascal, Python-numpy) Column Major (Fortran, Matlab, R, )

Memory Memory 88 9 96 Assembly? 88 9 96 Row Major (C,C++,Pascal, Python-numpy) Column Major (Fortran, Matlab, R, )

Memory 88 9 96 Row Major (C,C++,Pascal, numpy)

Memory 88 9 96 a[i][] :? Row Major (C,C++,Pascal, numpy)

Memory 88 9 96 a[i][] : 4*i Row Major (C,C++,Pascal, numpy)

Memory 88 9 96 a[i][] : 4*i a[i][] :? Row Major (C,C++,Pascal, numpy)

Memory 88 9 96 a[i][] : 4*i a[i][] : 4*i+ Row Major (C,C++,Pascal, numpy)

Memory 88 9 96 a[i][] : 4*i a[i][j] :? Row Major (C,C++,Pascal, numpy)

Memory 88 9 96 a[i][] : 4*i a[i][j] : 4*i+j Row Major (C,C++,Pascal, numpy)

Memory 88 9 96 int a[m][n]; n-... 9 a[i][j] : n*i + j... 9 : : : : : : m- 8 8... 8 Row Major (C,C++,Pascal, numpy)

Memory 88 9 96 int a[m][n]; n-... 9... 9 a[i][j] offset = (n*i+j)*sizeof(int) : : : : : : m- 8 8... 8 Row Major (C,C++,Pascal, numpy)

Memory 88 9 96 int a[m][n]; m- n-... 9... 9 : : : : 8 8... 8 : : a[i][j] : n*i + j to find a[i][j] we need to know element size? m (no. of rows of a)? n (no. of columns of a)? Row Major (C,C++,Pascal, numpy)

Other standards? Column major? a[i][j] :? 4

Other standards? Column major? a[i][j] : 4*i+j 4

Other standards? Column major? a[i][j] : 4*i+j Index starting at a[i][j] :? 4

Other standards? Column major? a[i][j] : 4*i+j Index starting at a[i][j] : 4*i+j+ 4

Example: Print a D Array

Example: Print a D Array

Example: Print a D Array

Example: Print a D Array segment.data printdarray.asm array : dd,,, 4, 5, 6 dd,,, 4, 5, 6 dd,,, 4, 5, 6 dd 4, 4, 4, 44, 54, 64 segment.text ; printdarray (array, m, n) push 6 ; no of columns push 4 ; no of rows push array ; address of array call printdarray add esp,

Example: Print a D Array segment.data printdarray.asm array : dd,,, 4, 5, 6 dd,,, 4, 5, 6 dd,,, 4, 5, 6 dd 4, 4, 4, 44, 54, 64 segment.text ; printdarray (array, m, n) push 6 ; no of columns push 4 ; no of rows push array ; address of array call printdarray add esp,

Example: Print a D Array int printdarray(int a[][6], int m, int n) { for (int i = ; i < m; i++) { for (int j = ; j < n; j++) printf("%d,", a[i][j]); } putchar('\n'); } delim: db ", ", %define ARRAY [ebp+8] %define M [ebp+] %define N [ebp+6] ; printdarray(array, M, N) printdarray: push ebp mov ebp, esp mov ebx, ARRAY mov esi, loop: cmp esi, M jge endloop mov edi, loop: cmp edi, N jge endloop ; index = esi*n+edi mov eax, N mul esi add eax, edi mov eax, [ebx+4*eax] call print_int mov eax, delim call print_string inc edi jmp loop endloop: mov al, call print_char inc esi jmp loop endloop: mov esp, ebp pop ebp ret printdarray.asm

Example: Print a D Array int printdarray(int a[][6], int m, int n) { for (int i = ; i < m; i++) { for (int j = ; j < n; j++) printf("%d,", a[i][j]); } putchar('\n'); } delim: db ", ", %define ARRAY [ebp+8] %define M [ebp+] %define N [ebp+6] ; printdarray(array, M, N) printdarray: push ebp mov ebp, esp mov ebx, ARRAY mov esi, loop: cmp esi, M jge endloop mov edi, loop: cmp edi, N jge endloop ; index = esi*n+edi mov eax, N mul esi add eax, edi mov eax, [ebx+4*eax] call print_int mov eax, delim call print_string inc edi jmp loop endloop: mov al, call print_char inc esi jmp loop endloop: mov esp, ebp pop ebp ret printdarray.asm

Example: Print a D Array int printdarray(int a[][6], int m, int n) { for (int i = ; i < m; i++) { for (int j = ; j < n; j++) printf("%d,", a[i][j]); } putchar('\n'); } delim: db ", ", %define ARRAY [ebp+8] %define M [ebp+] %define N [ebp+6] ; printdarray(array, M, N) printdarray: push ebp mov ebp, esp mov ebx, ARRAY mov esi, loop: cmp esi, M jge endloop mov edi, loop: cmp edi, N jge endloop ; index = esi*n+edi mov eax, N mul esi add eax, edi mov eax, [ebx+4*eax] call print_int mov eax, delim call print_string inc edi jmp loop endloop: mov al, call print_char inc esi jmp loop endloop: mov esp, ebp pop ebp ret printdarray.asm

Example: Print a D Array int printdarray(int a[][6], int m, int n) { for (int i = ; i < m; i++) { for (int j = ; j < n; j++) printf("%d,", a[i][j]); } putchar('\n'); } delim: db ", ", %define ARRAY [ebp+8] %define M [ebp+] %define N [ebp+6] ; printdarray(array, M, N) printdarray: push ebp mov ebp, esp Make it faster? mov ebx, ARRAY mov esi, loop: cmp esi, M jge endloop mov edi, loop: cmp edi, N jge endloop ; index = esi*n+edi mov eax, N mul esi add eax, edi mov eax, [ebx+4*eax] call print_int mov eax, delim call print_string inc edi jmp loop endloop: mov al, call print_char inc esi jmp loop endloop: mov esp, ebp pop ebp ret printdarray.asm

Example: Print a D Array printdarray.asm mov ebx, ARRAY mov esi, loop: cmp esi, M jge endloop mov edi, loop: cmp edi, N jge endloop ; index = esi*n+edi mov eax, N mul esi add eax, edi mov eax, [ebx+4*eax] call print_int mov eax, delim call print_string printdarray4.asm mov ebx, ARRAY mov esi, loop: cmp esi, M jge endloop mov edi, loop: cmp edi, N jge endloop mov eax, [ebx] call print_int mov eax, delim call print_string add ebx, 4

D Arrays N D array M N M D arrays (rows) of size N Array[i, j] = Array[N*i + j] D array M N P M D arrays of dimension N P Array[i, j, k] = Array[ i, j*p + k] = Array[ i *N*P + j * P + k ] M P M N

D Arrays N D array M N M D arrays (rows) of size N Array[i, j] = Array[N*i + j] D array M N P M D arrays of dimension N P Array[i, j, k] = Array[ i, j*p + k] = Array[ i *N*P + j * P + k ] An M N D array of D arrays of size P Array[i, j, k] = Array[ i*n + j, k] = Array[ (i * N + j) P + k ] M M P N

D Arrays N D array M N M D arrays (rows) of size N Array[i, j] = Array[N*i + j] D array M N P M D arrays of dimension N P Array[i, j, k] = Array[ i, j*p + k] = Array[ i *N*P + j * P + k ] An M N D array of D arrays of size P Array[i, j, k] = Array[ i*n + j, k] = Array[ (i * N + j) P + k ] M M P number of + and * operations? N

ND Arrays D array M N M D arrays (rows) of size N Array[i, j] = Array[N*i + j] D array ND array M N P M D arrays of dimension N P Array[i, j, k] = Array[ i, j*p + k] = Array[ i *N*P + j * P + k ] An M N D array of D arrays of size P Array[i, j, k] = Array[ i*n + j, k] = Array[ (i * N + j) P + k ] M M M n Array[ i, i,, i n ] = Array[ M * * M n * i + M * * M n * i + + M n * i n- + i n ]

ND Arrays ND array M M M n Array[i, i,, i n ] = Array[ M * * M n * i + M * * M n * i + + M n * i n- + i n ] j = i j = M * j + i j = M * j + i : number of + and * operations? j n = M n * j n- + i n Array[i, i,, i n ] = Array[j n ]

ND Arrays: Row-major vs. Column-major What does row-major and column-major mean? Matlab vs Numpy ND-arrays