Vlákno názorů k článku
Stack Overflow chce přežít AI od forth - Zkouseli jste po AI napsat nejtrivialnejsi program v...

  • 2. 6. 2025 13:54

    forth

    Zkouseli jste po AI napsat nejtrivialnejsi program v assembleru? Napsat programovou smycku co se opakuje 1000x. Je vam jedno jak bude citac ulozen, jake hodnoty zvoli, zda poroste nebo se bude snizovat. Jedine co chcete aby v prubehu smycky a po smycce zustaly registry a zasobnik stejny. Zasobnik mu povolite pouzivat behem inicializace a v prubehu testovani smycky kdyz si ho uklidi a nechate mu tam nejake misto.

    Na Z80...

    a pak jen sledujte tu hruzu co z nej leze...

    i kdyz se ho budete snazit opravovat a ruzne napovidat tak v urcitem okamziku se zacykli a bude ruzne generovat chyby. Budete muset prejit na metodu ze ma cislovat radky a odkazovat se na ty konkretni radky a on stejne bude selhavat.

    Kdyz misto AI tohle zkusite zadat zacatecnikovi tak u neho mate sanci ze to nakonec pochopi i kdyz bude mnohem pomalejsi v nekterych oblastech. Jako zjistit si kolik bajtu ma ktera instrukce a kolik taktu. To AI dokaze dolnit mrknutim oka. Ale nedokaze te znalosti vubec vyuzit.

    AI tohle nezvlada jak ma malo naucenych dat. Nema odkud krast. Nepouzitelny.

  • 2. 6. 2025 16:54

    Ladis

    To je stejné jako s automatizací. Nahrazen byl člověk obsluhující výtah. Všude jinde šlo "jen" o usnadnění práce tak, že stejný počet lidí udělal více práce nebo pro stejně práce stačí menší počet lidí. AI nemá nahradit v IT "pořádné" programátory, ale juniory/absolventy, outsourcing do Indie a technickou podporu na Filipínách. Prostě těch dolních 50 %.

    Brácha třeba má zkušenost s outsourcingem do Indie (úkol trval týden - udělá zadání, pošle výsledek, zbytek dne "má hotovo") a Chat-GPT (úkol trval den - odpověď v sekundách, cykl upřesňování a oprav byl na úrovni práce s tím Indem, ale nečekalo do dalšího dne). Chat-GPT stal koruny, Ind o několik řádů víc.

    PS: I ten assembler mu fungoval, dokud se vešel do počtu tokenů (od toho místa v kódu je to už jen halucinace). Dnes už umí Chat-GPT až milion.

    2. 6. 2025, 16:56 editováno autorem komentáře

  • 2. 6. 2025 17:08

    forth

    Me zadani:

    Napis me programovou smycku opakujici se 1000x na procesoru Z80. Ale tak ze pred smyckou, ve smycce a za smyckou nemenis zasobnik, ani zadne registry krome AF registru, ten muzes pouzivat libovolne. Dale zasobnik ukazuje na misto kde ma par bajtu k dispozici. Takze ho lze pouzit behem inicializace smycky a na konci smyccky, kde provadis vyhodnoceni zda pokracovat nebo ne.

    Jeho prvni reseni/iterace, kde vynechavam spamujici kecy okolo:

     ; Předpoklad: SP ukazuje na místo, kde jsou alespoň 2 bajty volné
            ; a lze je bezpečně použít.
            ; Zachováme všechny registry kromě AF.
    
            ; Inicializace čítače (1000 do zásobníku)
            LD A, 232       ; 1000 = 0x03E8, LSB
            PUSH AF         ; uložíme LSB na stack
            LD A, 3         ; MSB
            PUSH AF         ; uložíme MSB na stack
    
    .loop:
            ; --- Tělo smyčky začíná zde ---
            ; V těle můžeš používat jen registr AF
            ; -------------------------------
    
            ; ... (tvoje smyčka) ...
    
            ; --- Tělo smyčky končí zde ---
    
            ; Zde snížíme čítač na zásobníku (čti 16bitové číslo, dekrementuj, zapiš zpět)
    
            ; Načíst LSB a MSB z vrcholu stacku
            POP AF          ; AF = MSB:LSB low byte
            LD A, A         ; LSB je v A
            LD B, A         ; Uložíme si LSB do B
            POP AF          ; A = MSB
            LD C, A         ; MSB do C
    
            ; LSB = B, MSB = C
            ; 16bit: (C << 8) | B
    
            LD A, B
            DEC A
            LD B, A
            ; otestuj borrow
            CP 0xFF         ; byl původně 0, tedy borrow?
            JR NZ, .no_borrow
            DEC C
    
    .no_borrow:
            ; Zapiš zpět na zásobník (nejprve MSB)
            LD A, C
            PUSH AF         ; MSB
            LD A, B
            PUSH AF         ; LSB
    
            ; Ověř, zda jsme dosáhli nuly
            LD A, B
            OR C            ; pokud obě nuly => konec
            JR NZ, .loop
    
            ; --- Konec smyčky ---

    1) nedodrzel zadani a v tele smycky ma posunuty zasobnik, protoze si tam uklada 2 hodnoty. V komentari pise neco o 2 bajtech i kdyz tam ma 4.
    2) nesmyslne slozity kod

    LD A, B
    DEC A
    LD B, A
    ; otestuj borrow
    CP 0xFF         ; byl původně 0, tedy borrow?
    JR NZ, .no_borrow

    lze nahradit

    DEC B
    LD A, B
    INC A
    JR NZ, .no_borrow

    Ale hlavne nehleda snadna reseni ktera mu Z80 sam nabizi. Proc testovat -1, misto rovnou nuly? Nebo druhe snadne reseni je predel 0x80. Proc rovnou nenapsat neco jako

            DEC C
            JR NZ, .no_borrow
            DEC B
    .no_borrow
    ...
            JR NZ, .loop

    3) Neuklidil si po sobe ten zasobnik.
    4) Pouzil BC registry tak ze je zmenil.
    5) Prohazuje si na zasobniku MSB a LSB a nevi o tom. Nebo ma aspon bordel v komentarich co je co. Pri prvni iteraci urcite se chova k MSB, ktery ma v B jako by to byl LSB.
    6) Do kodu pridava zbytecnosti, protoze nektere veci podle me nemohl najit snad ani na netu pri uceni jako tohle:

    LD A, A         ; LSB je v A

    Protoze tohle by nenapsal ani zacatecnik. Tohle by dokazal vyprodukovat jen prekladac.

  • 5. 6. 2025 12:51

    bmansvk
            ;----------------------------------------------------------
            ;  Smyčka proběhne přesně 1000× (0x03E8).
            ;  • SP zůstává beze změny.
            ;  • Žádný registr kromě AF se nikdy nemodifikuje.
            ;  • Do A můžete vkládat vlastní práci uvnitř LOOP_BODY.
            ;----------------------------------------------------------
    
            org 0x0000          ; libovolný začátek programu
    
    ;--------------------------
    ; Paměť pro čítač
    ;--------------------------
    COUNTER_LO: db 0           ; nízký bajt
    COUNTER_HI: db 0           ; vysoký bajt
    
    ;--------------------------
    ; Inicializace čítače na 1000 (0x03E8)
    ;--------------------------
            ld   a,0xE8         ; low  byte = 232
            ld   (COUNTER_LO),a
            ld   a,0x03         ; high byte =   3
            ld   (COUNTER_HI),a
    
    ;--------------------------
    ; Hlavní smyčka
    ;--------------------------
    LOOP_START:
            ; --- VLASTNÍ KÓD SMYČKY -------------------------------
    LOOP_BODY:
            nop                 ; sem vložte svou práci
            ; ------------------------------------------------------
    
            ;--- Dekrementace 16-bitového čítače -------------------
            ld   a,(COUNTER_LO) ; A = low
            sub  1              ; A = low-1, nastaví Carry pokud podteklo
            ld   (COUNTER_LO),a
            ld   a,(COUNTER_HI) ; A = high
            sbc  a,0            ; high = high-Carry
            ld   (COUNTER_HI),a
            ;-------------------------------------------------------
    
            ;--- Test, zda čítač dosáhl nuly -----------------------
            or   a              ; high == 0 ? (NZ pokud ≠0)
            jp   nz,LOOP_START  ; pokud high ≠ 0  pokračuj
            ld   a,(COUNTER_LO) ; high je 0, zkontroluj low
            or   a              ; low == 0 ?
            jp   nz,LOOP_START  ; pokud low ≠ 0  pokračuj
            ;-------------------------------------------------------
    
    ;--------------------------
    ; Smyčka skončila – čítač = 0
    ;--------------------------
            ; další kód programu…
    
            jp   $              ; nekonečno, jen pro příklad