010
17.01.2025, 08:20 Uhr
u-held
|
Ich brauche mal etwas Nachhilfe in Z80-Programmierung. Das folgende Codeschnipsel ist ein Auszug aus PasEx und könnte auch in BasEx oder DevEx vorkommen. Ich weiß nicht, wie viel KC85-mit-D004-Spezifik darin steckt.
| Quellcode: | ISRO: ld (ix+002h),000h ;Blocknr. ld l,(ix+005h) ;IO-Puffer ld h,(ix+006h) ld bc,083f3h ;C=Port, B=??? ld e,00bh ;Zähler f. Dateiname SendName: outi ;implizit: dec b inc b inc b dec e jr nz,SendName ld d,00bh ;wird später gebraucht NxtBlock: inc (ix+002h) ;Blocknr. ld h,(ix+006h) ld l,(ix+005h) ld bc,081f2h ;B wird überschrieben! ld e,080h ;der neueZähler SendBlock: outi inc b inc b dec e jr nz,SendBlock
|
Mir geht es um die Verwendung von Register B. OUTI nutzt das ja als Zähler, der wie üblich bei jedem Aufruf um eins verringert wird. In beiden Schleifen wird B durch das doppelte INC pro Schleifendurchlauf um eins erhöht. Aber wozu? Nach der ersten Schleife, im vierten Befehl nach der Marke NxtBlock wird B überschrieben, ohne vorher benutzt worden zu sein. -- Kompetenz simulieren |