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.
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
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.
;---------------------------------------------------------- ; 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