| | |
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 10.07.07 Prihlásený: 11.04.20 Príspevky: 51 Témy: 13 |
Ahojte.Mozno to bude pre niektorych hlupa otazka,ale zacinam s assemblerom a chcem sa len opytat ze aky mam prikaz pouzit aby mi zobrazilo hodnotu registru.....priklad: scitanie:
mov eax,4
mov ebx,4
add eax.ebx
a teraz chcem aby mi vypisalo na obrazovke hodnotu eax
v C je to jednoduche prikazom printf("%d", a);
ale chcel by som vediet ze ako je to v assemblery ....
dakujem pekne ahojte....
|
|
Registrovaný: 11.01.09 Prihlásený: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 03.09.2010 11:41 | |
|
Uveď, prosím ťa, viac info. Aký prekladač (NASM, TASM, MASM, FASM,...), aký operačný systém (používajú sa iné prerušenia a pod.) a ako sa ma zobraziť výsledok. Lebo ty ho kľudne môžeš zobraziť v MessageBox-e vo windows napríklad, nemusí to byť v konzole.
Takže trocha presnejší popis.
|
|
Registrovaný: 10.07.07 Prihlásený: 11.04.20 Príspevky: 51 Témy: 13 | Napísal autor témy ethi1ca4l: 03.09.2010 12:22 | |
|
prekladac NASM..operacny system Linux Ubuntu...vysledok by som chcel zobrazit v konzole.....priklad text vysledok je: a ciselnu hodnotu
|
|
Registrovaný: 11.01.09 Prihlásený: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 03.09.2010 14:09 | |
|
V assembleri to bude trocha ťažšie. Ak chceš napísať sám funkciu na prevedenie DWORDU na reťazec, tak dalo by sa postupovať nejako takto:
Keďže pracujeme s 32-bitovými registrami, najväčšie takéto číslo v desiatkovej sústave je 4 294 967 295 - obsahuje desať čísel, teda v slučke s desiatimi opakovaniami sa bude číslo v registri eax postupne deliť číslami počnúc 1000000000, 100000000, ... , 10, 1. Výsledok po delení sa vypíše ( popis vypísania viď nižšie ) a potom sa do registru eax uloží zvyšok po delení (i keď neviem, či sa zvyšok neukladá iba do 16-bitového registra ???). Týmto vypadne číslica, ktorá je najviac vľavo (tá, ktorú sme vypísali) a pokračuje sa v cykle.
Je mi jasné, že z toho popisu je to nepredstaviteľné, tak to názorne ukážem, ale na menšom čísle - trojcifernom:
Citácia: číslo = 123
123 / 100 = 1 , zvyšok 23 - vypíše sa jednotka (výsledok delenia), a pokračuje sa so zvyškom
23 / 10 = 2 , zvyšok 3 - vypíše sa dvojka a pokračuje sa
3 / 1 = 3 , zvyšok 0 - vypíše sa trojka a cyklus skončil (cyklus = počet cifier)
Čím viac cifier, tým viac s tým je roboty. Ak teda stačí vypísať číslo napr po 65535 (16-bitov), ušetríš si takmer polovicu roboty.
Popis vypísania jednej cifry:
Ak si všimneš v ASCII tabuľke hodnoty číselných znakov, tak si uvedomoiš, že k cifre stačí prirátať hodnotu 0x30 a dostane sa jej ASCII vyjadrenie. Napríklad v registri máme číslo 3. Ak k nemu pripočítame 0x30, dostaneme číslo 0x33, čo je hexadecimálne vyjadrenie čísla 3 v ASCII tabuľke.
// toto bol postup, ako to spraviť čisto v assebmleri. Môžeš ale použiť aj nejakú funkciu na to určenú, uloženú v nejakej knižnici, ktorú iba inkludneš. Tuším sa dá použiť aj samotná printf, ale osobne som to ešte neskúšal.
|
|
Registrovaný: 10.07.07 Prihlásený: 11.04.20 Príspevky: 51 Témy: 13 | Napísal autor témy ethi1ca4l: 03.09.2010 14:31 | |
|
dakujem ti pekne za vysvetlenie .....ja som to skusal roznymi sposobmi ale teraz sa len pousmejem natom ako som to ja robil....diky moc ....tusim co mam knihu tak tam je pisane ze sa da inkludovat aj printf ....no nic idem sa ja pasovat stym .....keby nieco tak tu mas dalsiu otazku
|
|
Registrovaný: 11.01.09 Prihlásený: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 03.09.2010 15:14 | |
|
Postup pre použitie printf funkcie:
Kód: global main extern printf
[section .data] printf_sprava: db "Vysledok je: %d.", 10, 0 cislo: dd 123
[section .text] main:
push ebp mov ebp, esp push DWORD [cislo] push printf_sprava call printf mov esp, ebp pop ebp mov eax, 0 ret Kompilácia: Kód: nasm -f elf prog.asm Zlinkovanie: Kód: gcc -o prog prog.obj Spustenie: Kód: ./prog
|
|
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Zaciatky [ Choď na stránku: 1, 2, 3, 4 ] v Webdesign | 106 | 4174 | 26.04.2008 16:12 Tominator | | Začiatky v Assembler, C, C++, Pascal, Java | 1 | 435 | 13.02.2012 20:49 Ďuri | | Začiatky v Ostatné | 27 | 702 | 21.12.2012 2:32 Ďuri | | Perl začiatky v Perl, Python, Ruby, CGI | 0 | 607 | 21.11.2011 19:09 black evil | | C# začiatky v Technológia .NET | 1 | 1872 | 13.12.2008 21:52 void | | Zaciatky podnikania v Ekonomika, práca, biznis, podnikanie a peniaze | 2 | 498 | 03.08.2015 12:19 don jebot | | JAVA zaciatky [ Choď na stránku: 1, 2 ] v Assembler, C, C++, Pascal, Java | 33 | 3599 | 23.05.2014 0:45 matwej | | PICAXE - zaciatky v Ostatné | 3 | 1717 | 19.06.2009 18:39 Blackshadow | | Linux-začiatky v Operačné systémy Unix a Linux | 10 | 781 | 06.07.2010 18:52 krejso | | Tažké začiatky [ Choď na stránku: 1, 2 ] v HTML, XHTML, XML, CSS | 37 | 1313 | 28.12.2013 14:43 shaggy | | Začiatky javascript v JavaScript, VBScript, Ajax | 3 | 456 | 29.03.2020 17:33 LukIneskoNR | | Zaciatky programovania v Assembler, C, C++, Pascal, Java | 23 | 1569 | 26.11.2016 8:42 ado130 | | Jquery začiatky... v JavaScript, VBScript, Ajax | 10 | 881 | 19.02.2011 15:20 camo | | Zaciatky pascal v Assembler, C, C++, Pascal, Java | 5 | 671 | 17.03.2008 10:30 neznamy | | Programovanie - Zaciatky v Assembler, C, C++, Pascal, Java | 14 | 1041 | 21.02.2015 6:26 faraon | | začiatky JAVA v Assembler, C, C++, Pascal, Java | 18 | 1059 | 15.05.2013 7:46 BX |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|