Asembler i86 - kalkulačka – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Asembler i86 - kalkulačka – Assembler – Fórum – Programujte.comAsembler i86 - kalkulačka – Assembler – Fórum – Programujte.com

 

Alfa75
~ Anonymní uživatel
1 příspěvek
10. 4. 2021   #1
-
0
-

Dobrý deň,

potreboval by som pomoc...

Mám naprogramovať zadanie v i86 nasm.

Znenie zadania:

Vytvor program, ktorý bude realizovať kalkulačku pre operácie +, -, *, / v pevnej rádovej čiarke. Operandy a operátory vstupujú z klávesnice, výstup smeruje na obrazovku. Kalkulačka pracuje v osmičkovom režime.

Testovací vstup pre toto zadanie môže vyzerať nasledovne:
005o+077o

Na vstupe sú čísla v tvare 000o - 377o. Rovnako výstup má byť v tomto tvare. Nie je tiež potrebné implementovať zátvorky. Medi číslami sa môže vyskytovať aj medzera. Riešenie stačí realizovať pre 2 čísla a tieto čísla sú kladné. Výsledok môže byt aj záporný. Na vstupe je vždy korektný vzorec a tak nie je potrebné ošetrovať vstup na neplatné znaky ako sú písmená a iné znaky.

Viem, že niekto šikovný to má spravené za hodinu, ja tu pri tom maturujem už 3. deň :D nie som kamarát s asemblerom. Budem rád, ak sa niekto ozve, PONÚKAM 20 eur (ak budeš požadovať viac, nejak sa dohodneme). Kto by mal záujem, môže ma kontaktovať na čísle 0918 257 222

Nahlásit jako SPAM
IP: 78.99.213.–
gna
~ Anonymní uživatel
1860 příspěvků
10. 4. 2021   #2
-
0
-

Mně moc nenapadá s čím bys měl mít problém. Možná s těmi čísly?

Z textové číslice dostaneš její hodnotu odečtením znaku '0'. A v osmičkovém čísle každá číslice zabírá 3 bity.

V Céčku by to bylo takhle (a napsat to v asm by neměl být problém): 

int value = 0;
value <<= 3; value |= getdigit() - '0';
value <<= 3; value |= getdigit() - '0';
value <<= 3; value |= getdigit() - '0';

// prvotní vynulování a první shl samozřejmě není nutný, jde o princip
// << je bitový posun doleva a | je bitový or (můžeš použít i přičítání)

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1860 příspěvků
10. 4. 2021   #3
-
0
-

A já se prostě nenaučím psát mě-mně :))

Nahlásit jako SPAM
IP: 213.211.51.–
JerryM
~ Anonymní uživatel
646 příspěvků
11. 4. 2021   #4
-
0
-

žádný problém neni .. ty základní 4 matematické operace jsou "učebnicové" stačí opsat manuál, tady je hotovej příklad na DIV:

https://wiki.cheatengine.org/index.php?title=Assembler:Commands:DIV

a to samý sčítání odčítání a násobení....

tady máš hotovej příklad na MUL

https://stackoverflow.com/questions/40893026/mul-function-in-assembly

a tady další hotový příklady

http://eddiejackson.net/wp/?p=18447

stačí to jenom opsat

https://www.tutorialspoint.com/assembly_programming/assembly_arithmetic_instructions.htm

https://www.nasm.us/doc/nasmdoc3.html#section-3.4.1

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:313e:6fa0:72c2:4c0c...–
remmidemmi0
Věrný člen
11. 4. 2024   #5
-
0
-

otevřel jsem toto vlákno, protože koncem loňského roku jsem řešil jak dnes vyrobit kalkulačku a jak to vlastně je s počítáním. Věnoval jsem tomu spoustu hodin, několik měsíců a také pokusů a dobral jsem se k pozoruhodným zjištěním. Pokusím se je ve stručnosti popsat:

soudobé mikropočítače (8 bit, 16 bit) jsou pro konstrukci kalkulačky v podstatě nepoužitelné, protože v nejlepším případě počítají s přesností na 6 míst. Čili je "troufne" kdejaký starý kalkulačkový obvod. To samé platí pro rozsah čísel, které mikropočítače dokáží zpracovat. Staré kalkulačkové obvody mají větší číselný rozsah než mikropočítače.

Trochu lépe je to s použitím mikroprocesorů. 8-bit mikroprocesor dokáže při správném naprogramování v podstatě to, co klasická kalkulačka s přesností 8 až 10 míst.

Zkoušel jsem v praxi 8- a 16-bitové mikropočítač Microchip, od kterých jsem hned utekl k Motorole 6800. Od Motoroly 6800 jsem se dostal k Motorole 68000   . To mi přišlo jak s kanonem na brabce, tak jsem se vrátil  zase k Motorole 6805. Nakonec jsem skončil u 8086. S procesorem 8086 nebo 8088 se nechá udělat slušná kalkulačka, která bude počítat s přesností 8-10 míst a to dokonce i goniometrické a trigonometrické funkce.  To platí když použijete ty hotové knihovny.  A co když připojíte koprocesor 8087? To mne napadlo, vzal jsem starý mainboard se 486 a začal ho programovat v assembleru. A zjistil jsem pozoruhodnou věc, že dokážu počítat s přesností na 16 až 18 míst. Zvláštní je, že toto jde v assembleru, třeba pod DOSem. Ale když stejný výpočet budete dělat pod woknama na stejném procesoru, skončíte na 12 místech. Z nějakého důvodu je přesnost výpočtů ve woknech nějak omezena.

Vyzkoušejte si vypočítat pod DOSem s použítím 8086 + 8087 třeba faktoriál. Kam až se dostanete, jaký nejvyšší faktoriál a jak přesně vypočtete. Pak si zkuste vypočítat hodnotu Avogadrovy konstanty. A to samé zkuste bez koprocesoru a pak znovu vše zopakujte ve woknech.  Výsledky jsou zajímavý.

Nahlásit jako SPAM
IP: 37.48.43.–
MilanL+1
Grafoman
12. 4. 2024   #6
-
0
-

#5 remmidemmi
počet platných číslic na počítačích je daná pravěkou normou, kdy bylo potřeba, aby měla čísla v paměti nějakou rozumnou velikost a bylo potřeba zvolit rozumný formát velikost (64/80bit) vs přesnost, u starých 8bitů i menší myslím že 16b formát.

Zrovinka nedávno jsem v excelu připravoval tabulku předdefinovaných hodnot Sin a Cos no a samozřejmě mi to u Cos 90° (Pi/2) vyhodilo 6,12574E-17.

Možná by stálo za úvahu, aby byla aktualizovaná ta norma na dnešní dobu.

Jinak pro výpočty s extrémní přesností nebo velikostí jsou vytvořené knihovny, kdy je velikost/přesnost omezena jen a pouze velikostí dostupného datového prostoru.

Nahlásit jako SPAM
IP: 91.139.9.–
Lubos
~ Anonymní uživatel
95 příspěvků
21. 4. 2024   #7
-
0
-

#5 remmidemmi
Já si nemyslím, že by přesnost ve Woknech byla nějak omezena. Vzal jsem si na pomoc knihu "Assembler PC" do ing. Vrátila. Zde se uvádí, že koprocesor má 3 datové typy pro reálná čísla. Krátký real (4 bajty) přesnost asi 7 desítkových číslic, dlouhý real (8 bajtů) přesnost asi 15 des. číslic a pomocný real (10 bajtů) přesnost asi 19 des. číslic. Koprocesor je implicitně nastaven tak, aby výpočty prováděl v nejvyšší přesnosti. Některé aplikace ale s tímto datovým typem neumí pracovat. To platí např. i pro Visual Basic, který má pouze krátký a dlouhý real. Myslím si, že problém není ve Woknech, ale v dané aplikaci, jaký datový typ používá.

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

Přidej příspěvek

×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, 19 hostů

Podobná vlákna

Asembler — založil Flash

Asembler - příkaz — založil koubis777

Kalkulačka — založil anajkaa@seznam.cz

Kalkulacka — založil tomas

 

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