Jag är inte så insatt i instruktionsuppsättningen, men jag antar att detta betyder att bit-operationen inte går att utföra mot "MEM8"-register, fast mot "IO8"-register.
Om du tittar på bit-instruktionerna så ser du att adressen i själva
instruktionen (som pekar mot aktuellt register) har en begränsad
adressarea. Det gör att bit-instruktioner (t.ex, det finns även andra)
inte fungerar mot alla register, vilka vet man bara om man kollar
upp respektive registers adress. Atmel har exempel (i assembler)
där man använder macron som väljer olika instruktioner beroende på
registrets adress.
Om det är så att vissa register är flyttade mellan olika modeller så
att de hamnar på den ena sidan om gränsen eller den andra, så
behövs dessa macron för att göra koden flyttbar mellan dom.
Om detta har med MEM8/IO8 att göra (eller vad det är) vet jag dock inte...
2. I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI and CBI instructions. In these
registers, the value of single bits can be checked by using the SBIS and SBIC instructions.
...
4. When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used. When addressing I/O
Registers as data space using LD and ST instructions, 0x20 must be added to these addresses. The ATmega48/88/168 is a complex
microcontroller with more peripheral units than can be supported within the 64 location reserved in Opcode for the IN
and OUT instructions. For the Extended I/O space from 0x60 - 0xFF in SRAM, only the ST/STS/STD and LD/LDS/LDD
instructions can be used.