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 18:22 | Bezpečnostní upozornění

    Nejnovější X.Org X server 21.1.22 a Xwayland 24.1.10 řeší 5 bezpečnostních chyb: CVE-2026-33999, CVE-2026-34000, CVE-2026-34001, CVE-2026-34002 a CVE-2026-34003.

    Ladislav Hagara | Komentářů: 0
    dnes 18:00 | Nová verze

    Po roce vývoje od vydání verze 1.28.0 byla vydána nová stabilní verze 1.30.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.30.

    Ladislav Hagara | Komentářů: 0
    dnes 17:33 | Nová verze

    Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2026-04-13. Přehled novinek poznámkách k vydání. Nově ve výchozím nastavení příkaz sudo vyžaduje heslo.

    Ladislav Hagara | Komentářů: 0
    dnes 11:22 | Nová verze

    Společnost Blackmagic Design oznámila vydání verze 21 svého proprietárního softwaru pro editování videí a korekci barev DaVinci Resolve běžícího také na Linuxu. Z novinek je nutno vypíchnout možnost editování fotografií. Základní verze DaVinci Resolve je k dispozici zdarma. Plnou verzi DaVinci Resolve Studio lze koupit za 295 dolarů.

    Ladislav Hagara | Komentářů: 7
    dnes 05:00 | Nová verze

    Multipatformní renderovací jádro webového prohlížeče Servo je na crates.io. S vydáním verze 0.1.0 (LTS).

    Ladislav Hagara | Komentářů: 0
    včera 23:33 | Komunita

    Nadace FreeBSD Foundation před týdnem oznámila projekt Laptop Integration Testing. Vyzvala dobrovolníky, aby pomocí nástroje otestovali podporu FreeBSD na svých zařízeních a výsledky odeslali vývojářům. Vznikla stránka Nejlepší notebooky pro FreeBSD.

    Ladislav Hagara | Komentářů: 5
    včera 22:22 | IT novinky

    Na začátku srpna vstoupí v účinnost nová evropská pravidla transparentnosti pro umělou inteligenci (AI). Zavádějí povinnost jakýkoli AI obsah označit, informovat o takzvaných deepfakes a upozornit uživatele, že komunikuje s umělou inteligencí. Cílem opatření je omezit šíření manipulativního či klamavého obsahu, zvýšit důvěru v digitální prostředí a chránit uživatele.

    Ladislav Hagara | Komentářů: 8
    včera 10:22 | Humor

    Connor Byrne z USA používal pro přihlašování na svůj iPhone 13 s iOS 18 heslo obsahující háček. Po aktualizaci na iOS 26.4 se už ale do telefonu nepřihlásí. Při přihlašování nelze tento háček zadat. Apple jej prostě odstranil [The Register].

    Ladislav Hagara | Komentářů: 36
    včera 03:11 | Nová verze

    Linus Torvalds vydal jádro Linux 7.0. Podrobný výčet změn je ke zhlédnutí na stránce Kernel Newbies, stručné výběry v LWN (část první, druhá).

    |🇵🇸 | Komentářů: 5
    včera 02:44 | Komunita

    Na čem aktuálně pracují vývojáři GNOME? Pravidelný přehled novinek v Týden v GNOME. Vypíchnout lze novou verzi 2026.1 přehrávače hudby Amberol (Flathub).

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (8%)
     (1%)
     (12%)
     (30%)
     (3%)
     (6%)
     (2%)
     (15%)
     (25%)
    Celkem 1322 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: asm: vypis pole

    29.3.2009 19:37 asm
    asm: vypis pole
    Přečteno: 636×
    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.