Op 23 januari 2022 21:11:54 schreef maartenbakker:
Om een of andere reden vond men het toen makkelijker om geen echte NOP te maken, maar de processor een XCHG AX,AX te laten doen, en dan was een andere opcode dan 00h logischer.
De meeste CPUs hebben veel minder instructies dan dat je opcodes in de handleiding ziet staan. Er zit een regelmaat in. Zo van "branch met condities" is de daadwerkelijke instructie, maar dat heet dan BNE BE,BGT BLT BLE BGE JUMP (met "branch never" er bij zijn het er precies 8: kan je coderen in 3 bits! Hmmm. Gebruikelijk was dat er nog een paar waren om met unsigned vs signed vergelijkingen te werken. Naja.)
Op de 6502 was er een instructie die iets met het X register deed, een instrucitie die datzelfde met het Y register deed. De ene had een instructie die eindigd op 1 de andere op 2. In de hardware was dat "doe dat ene ding" en bit0 selecteerde dan het X register en bit1 selecteert het Y register. Gaf je dus de instructie eidigent op 3 dan deed ie alletwee! Ik dacht van 40 jaar geleden te herinneren dat het a1 a2 en a3 als instructies waren, maar als ik nu de opcodetabel er bij zoek lijkt dat niet te kunnen.
maar goed, ALS mijn geheugen gelijk heeft (en dat lijkt NIET het geval te zijn!) dan was er dus TAX Transfer A register to X en TAY. Maar twee bits controleerden dus of X of Y of allebij het destination register was. Weer zo'n geval van eigenlijk 1 instructie die door hoe de hardware werkt als twee opcodes verkocht wordt.
En dus op deze manier zijn er vast ook instructies die "vanzelf" niets doen. Transfer A to A (6502) of MOV R0, R0 of zoiets. De opcode daarvoor zal gewoon bestaan, weet dat ding veel dat als "destination register" hetzelfde is als het source register het geen zin heeft?
Ik heb voor de lol de PDP11(40) handleiding er bij gepakt en er is een familie instructies die conditie-code bitjes in het statusregister kunnen manipuleren. Weer algemeen opgezet. Wil je ze clear-en of setten? Een dan gewoon welke bitjes aan- of uitgezet moeten worden. En je mag dus bijvoorbeeld twee bitjes tegelijk opgeven om twee bits tegelijk te clear-en of te set-ten. Maar nul van de bitjes in de instructie betekent dus dat alle bitjes met rust gelaten moeten worden. Clear <geenbitjes> is de "approved" nop. opcode 240 is dat. Maar er is ook set <geenbitjes> opcode 260 . Ook dat zal "nop" doen.