abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 20:11 | Zajímavý software

    Desktopové prostředí Xfce bude mít vlastní kompozitor pro Wayland s názvem xfwl4. V programovacím jazyce Rust s využitím stavebních bloků z projektu Smithay jej napíše Brian Tarricone. Úprava stávajícího xfwm4 tak, aby paralelně podporoval X11 i Wayland, se ukázala jako špatná cesta.

    Ladislav Hagara | Komentářů: 0
    dnes 19:11 | Komunita

    Desktopové prostředí KDE Plasma 6.8 poběží už pouze nad Waylandem. Vývojáři, kteří s rozhodnutím nesouhlasí, vytvořili fork KDE Plasma s názvem SonicDE (Sonic Desktop Environment) s cílem zachovat a vylepšovat podporu X11.

    Ladislav Hagara | Komentářů: 2
    dnes 12:22 | Nová verze

    Byla vydána nová stabilní verze 7.8 dnes již jedenáctiletého webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 144. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 3
    dnes 10:33 | Nová verze

    GNU gettext (Wikipedie), tj. sada nástrojů pro psaní vícejazyčných programů, dospěl do verze 1.0. Po více než 30 letech vývoje. Přehled novinek v souboru NEWS.

    Ladislav Hagara | Komentářů: 1
    dnes 05:11 | IT novinky

    Chris Kühl (CEO), Christian Brauner (CTO) a Lennart Poettering (Chief Engineer) představili svou společnost Amutable. Má přinést determinismus a ověřitelnou integritu do linuxových systémů.

    Ladislav Hagara | Komentářů: 12
    včera 20:11 | Nová verze

    Byla vydána (𝕏) nová verze 26.1 open source firewallové a routovací platformy OPNsense (Wikipedie). Jedná se o fork pfSense postavený na FreeBSD. Kódový název OPNsense 26.1 je Witty Woodpecker. Přehled novinek v příspěvku na fóru.

    Ladislav Hagara | Komentářů: 2
    včera 15:11 | Zajímavý projekt

    Deník TO spustil vlastní zpravodajský webový portál ToHledej.CZ s internetovým vyhledávačem a bezplatnou e-mailovou schránkou. Dle svého tvrzení nabízí 'Zprávy, komentáře, analýzy bez cenzury' a 'Mail bez šmírování a Velkého bratra'. Rozložením a vizuálním stylem se stránky nápadně podobají portálu Seznam.cz a nejspíše je cílem být jeho alternativou. Z podmínek platformy vyplývá, že portál využívá nespecifikovaný internetový vyhledávač třetí strany.

    NUKE GAZA! 🎆 | Komentářů: 27
    včera 14:11 | Zajímavý projekt

    Computer History Museum (Muzeum historie počítačů) zpřístupnilo své sbírky veřejnosti formou online katalogu. Virtuálně si tak můžeme prohlédnout 'rozsáhlou sbírku archivních materiálů, předmětů a historek a seznámit se s vizionáři, inovacemi a neznámými příběhy, které revolučním způsobem změnily náš digitální svět'.

    NUKE GAZA! 🎆 | Komentářů: 11
    včera 14:00 | Zajímavý projekt

    Ruský hacker VIK-on si sestavil vlastní 32GB DDR5 RAM modul z čipů získaných z notebookových 16GB SO-DIMM RAM pamětí. Modul běží na 6400 MT/s a celkové náklady byly přibližně 218 dolarů, což je zhruba třetina současné tržní ceny modulů srovnatelných parametrů.

    NUKE GAZA! 🎆 | Komentářů: 15
    včera 11:00 | Upozornění

    Národní identitní autorita (NIA), která ovlivňuje přihlašování prostřednictvím NIA ID, MEP, eOP a externích identit (např. BankID), je částečně nedostupná.

    Ladislav Hagara | Komentářů: 9
    Které desktopové prostředí na Linuxu používáte?
     (17%)
     (6%)
     (0%)
     (10%)
     (24%)
     (3%)
     (5%)
     (2%)
     (12%)
     (33%)
    Celkem 666 hlasů
     Komentářů: 21, poslední dnes 20:43
    Rozcestník

    Dotaz: asm: vypis pole

    29.3.2009 19:37 asm
    asm: vypis pole
    Přečteno: 635×
    Zdravim, mam napsat funkci v asm, ktera prijme parametry pocet a adresu zacatku pole a ona vypise vsechny prvky pole:
    void vypis(int pocet, int * pole) {
       for(int i=0; i<pocet; i++) {
          printf("%i", pole[i]);
       }
    }
    
    Prepsano do asm:
    .486
    .model flat,c
    .const
    frm byte "%i", 13, 10, 0
    pole byte 1, 2, 3, 4, 5, 6, 7, 8, 9
    pocet dword 9
    .code
    extern printf:proc
    public main
    vypis:
    	push ebp
    	mov ebp, esp
    	mov eax, 0
    zacatek:
    	cmp eax, [ebp+8]
    	jae konec
    	push eax
    	push [ebp+12]
    	push offset frm
    	call printf
    	add esp, 8
    	pop eax
    	inc eax
    	jmp zacatek
    konec:
    	pop ebp
    	ret
    main:
    	push dword ptr pocet
    	push offset pole
    	call vypis
    	add esp, 8
    	ret
    end
    
    Namisto toho mi to stale cykli a vypisuje 9. Poradi mi nekdo? dekuji.

    Odpovědi

    30.3.2009 03:58 Michal Ludvig | skóre: 16
    Rozbalit Rozbalit vše Re: asm: vypis pole

    Myslím že máš trochu hokej v tom jak funguje adresování. Například:

        cmp     eax, [ebp+8]
    

    Nejen že máš blbě offset (proměnná "pocet" je na ebp+12, nikoliv +8), ale hlavně "[ebp+12]" vezme ze zásobníku adresu proměnné "pocet" nikoliv její hodnotu. Takže to musíš dereferencovat ještě jednou abys dostal co potřebuješ:

        mov     ecx, [ebp+12]
        mov     ecx, [ecx]      ; ecx = pocet

    Je dobrý si ten počet zjistit před cyklem a nechat třeba v ECX protože to je konstantní hodnota. Akorát jí budeš muset uložit před printf a pak obnovit, jinak o ni přijdeš.

    Stejně tak pro counter (lokální proměnná 'i') použij ESI místo EAX - alespoň ti printf tu hodnotu nezničí:

        mov     esi, 0          ; esi = i  (counter)
    

    Podobně i tohle je nesmysl:

        push    [ebp+12]
    

    Jednak pole je na EBP+8, za druhý [EBP+8] vezme ze zásobníku adresu začátku pole přičemž ty potřebuješ adresu toho konkrétního prvku v každém cyklu a za třetí musíš provést konverzi z bajtového pole na int než to znova plácneš na zásobník jako parametr pro printf. Když tuhle konverzi neuděláš vypíše ti to čtyři prvky pole najednou.

        xor     edx, edx
        mov     ebx, [ebp+8]    ; ebx = &pole
        mov     dl, [ebx+esi]   ; edx = pole[i]
        push    edx             ; parametry na zasobnik pro printf
    

    S těmito radami už bys měl být schopen dát ten program dohromady. Kdyby ne ozvi se ;-)

    30.3.2009 05:28 luky
    Rozbalit Rozbalit vše Re: asm: vypis pole
    Minimální úpravy by byly asi takto:

    1. Máš tam pole bytů místo intů.

    místo

    pole byte 1, 2, 3, 4, 5, 6, 7, 8, 9
    použij
    pole dword 1, 2, 3, 4, 5, 6, 7, 8, 9

    2. Parametry máš ve špatném pořadí a místo počtu předáváš adresu.

    místo

    push dword ptr pocet
    push offset pole
    použij
    push offset pole
    push pocet

    3. Vypisuješ adresu pole místo jeho jednotlivých prvků.

    místo

    push [ebp+12]
    použij třeba
    mov esi, [ebp+12]    ; adresa pole
    lea esi, [esi+eax*4] ; adresa prvku (pole + poradi * velikost)
    push [esi]           ; hodnota prvku

    Nezkoušel jsem to, ale mělo by to chodit.

    30.3.2009 05:35 luky
    Rozbalit Rozbalit vše Re: asm: vypis pole
    Hopla, už vidím případnou chybku :)
    30.3.2009 09:42 asm
    Rozbalit Rozbalit vše Re: asm: vypis pole
    ahoj, diky vsem, nakonec jsem to vyresil sam ;) odpoledne sem pastnu reseni...

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.