I8086 - zoradenie čísel – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

I8086 - zoradenie čísel – Assembler – Fórum – Programujte.comI8086 - zoradenie čísel – Assembler – Fórum – Programujte.com

 

Peter
~ Anonymní uživatel
4014 příspěvků
4. 4. 2018   #1
-
0
-

Ahoj, mám za úlohu do školy zoradiť čísla od najmenšieho po najväčšie. No nemám ani potuchy ako to v i8086 zoraďovať. Rovnako by som sa chcel spýtať aj na prevod desiatkového čísla do osmičkového tvaru. Ďakujem.

Nahlásit jako SPAM
IP: 147.232.178.–
MilanL+1
Grafoman
5. 4. 2018   #2
-
0
-

#1 Peter

https://www.fi.muni.cz/usr/brandejs/Brandejs_Mikroprocesory_Intel_8086_80486_2010.pdf

základy jsou v kapitole 2.x str.15-74 hlavní principy fungování jsou v

2.1-2.4 - data, paměť , registry

2.7 - způsoby adresace paměti

2.8 - základní instrukční set 

u obou úloh je důležité vědět typ dat, protože podle toho se s tím pak pracuje: 

8 bitů=1 Byte -> rozsah 0-255
16 bitů = 2 Byte -> rozsah 0-65 535
32 bitů = 4 Byte -> rozsah 0-4 294 967 295

také nepíšeš zda se bude překládat na 16 / 32 / 64 bit program

8 a 16 bit je jednoduchý lze s tím pracovat přímo
32 bit ve 32/64 bit programu přímo, ale u 16 bit programu je komplikovanější musí se porovnávat na 2x po 16bitech

řazení principiálně:

1) potřebuješ min 2 základní parametry adresu začátku pole a počet prvků 
    případné další 2 parametry volitelně pro funkci směr řazení (<>) a typ dat (8/16/32 bit)

2) pro adresování v poli použiješ dle 2.8 
    - kombinovanou adresu (Baze+Index) - dynamické umístění pole (pro funkci nebo při objektovém programování)
    - indexovanou (Adresa + index)  - pevné umístění pole
    - báze nebo adresa bude ukazovat na začátek pole
    - jako bázi použít ideálně segmentový registr DS, na procházení pak indeové registry SI a DI

3) pro základní řazení budou třeba 2 smyčky ideálně použít SI a DI sestupně
    - SI = počet prvků -1, vnější smyčka - upravit podle typu dat (při 16b násobit 2, při 32b násobit 4)
    - DI = SI - (1 * typ dat) , typy 1/2/4, vnořená smyčka

4) do základních registrů CL/CX/ECX a DL/DX/EDX (8/16/32 bit) načíst z adresy dle 1 hodnoty do jednoho z DS nebo adresa + SI do druhého DS nebo adresa +DI

5) porovnání  C.. a D.. (nezmění se) na základě výsledku prohodit hodnoty na daných adresách nebo rovnou pokračovat na 6)

6)  vnořená smyčka: DI - velikost typu dat
     pokud není příznak záporné hodnoty opakuj smyčku

7) vnější smyčka: SI - velikost typu dat
     pokud není příznak záporné hodnoty opakuj smyčku

- konec mělo by být seřazeno

Nahlásit jako SPAM
IP: 91.139.9.–
peter
~ Anonymní uživatel
4014 příspěvků
5. 4. 2018   #3
-
0
-

Razeni, treba v js vypada takto 

function cmp(a,b) {return a-b;}
sort(arr);
// if (cmp(arr[i],arr[j])>0) {neco proved}

sort je nejaky serazovaci algoritmus, ktery porovnava 2 hodnoty a pak s nimi neco provede. K porovnani si vola funkci cmp.
Serazovaci alg. muze vypadat treba nejak takhle 

// pro 4 cisla
if (cmp(arr[n][i+0],arr[n][i+1])>0) {swap(n,i+0,i+1);}
if (cmp(arr[n][i+2],arr[n][i+3])>0) {swap(n,i+2,i+3);}
if (cmp(arr[n][i+0],arr[n][i+2])>0) {swap(n,i+0,i+2);}
if (cmp(arr[n][i+1],arr[n][i+3])>0) {swap(n,i+1,i+3);}
if (cmp(arr[n][i+1],arr[n][i+2])>0) {swap(n,i+1,i+2);}

// pro n cisel - kod z wiki
insertionSort(A)
   pro i od 1 do počtu prvků opakuj:
       hodnota = A[i];
       j = i-1;
       pokud j >= 0 a zároveň A[j] > hodnota opakuj:
           A[j+1] = A[j];
           A[j] = hodnota;
           j--;
Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:38...–
MilanL+1
Grafoman
5. 4. 2018   #4
-
0
-

#3 peter
tj on ale potřebuje assembler takže krok za krokem co a jak použít, napsal bych mu i program bylo by to skoro jednodušší/rychlejší než ty postupy.


Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
5. 4. 2018   #5
-
0
-

#2 MilanL
převod čísla v asm je jednoduchý, opět je třeba vědět jen velikost typu podle toho je třeba nastavit počet kroků - jde o rozklad binárního vyjádření po 3bitech

- potřebuješ místo pro ukládání výsledku 3-11 Bytů - a vyprázdnit (naplnit 0), v případě že půjde o string, tak +1 místo na ukončovací znak

- nastavit čítač podle velikosti 8bit =2, 16bit=5, 32bit=10 - asi registr BX pro použití při ukládání výsledku

1) - číslo do pracovního registru

- pracovní registr and 7

- výsledek ulož na adresa ukládání + BX (případně pro string přidat 30Hex pomocí OR vytvoří znak)

- registr s číslem 3x posun doprava (SHR

- BX-1 (čítač)

- pokud není příznak záporu opakuj od 1)

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 85 hostů

Podobná vlákna

Zoradenie cisel — založil Navi

Zoradenie hodnôt čísel — založil otazka

Zoradenie Nodes — založil Trebor

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý