9.5.2.3 Relocatable Expression Modifiers

The assembler supports several modifiers when using relocatable addresses in AVR instruction operands. The general syntax is the following:

     modifier(relocatable-expression)
lo8
This modifier allows you to use bits 0 through 7 of an address expression as 8 bit relocatable expression.
hi8
This modifier allows you to use bits 7 through 15 of an address expression as 8 bit relocatable expression. This is useful with, for example, the AVR ‘ ldi ’ instruction and ‘ lo8 ’ modifier.

For example

          ldi r26, lo8(sym+10)
          ldi r27, hi8(sym+10)

hh8
This modifier allows you to use bits 16 through 23 of an address expression as 8 bit relocatable expression. Also, can be useful for loading 32 bit constants.
hlo8
Synonym of ‘ hh8 ’.
hhi8
This modifier allows you to use bits 24 through 31 of an expression as 8 bit expression. This is useful with, for example, the AVR ‘ ldi ’ instruction and ‘ lo8 ’, ‘ hi8 ’, ‘ hlo8 ’, ‘ hhi8 ’, modifier.

For example

          ldi r26, lo8(285774925)
          ldi r27, hi8(285774925)
          ldi r28, hlo8(285774925)
          ldi r29, hhi8(285774925)
          ; r29,r28,r27,r26 = 285774925

pm_lo8
This modifier allows you to use bits 0 through 7 of an address expression as 8 bit relocatable expression. This modifier useful for addressing data or code from Flash/Program memory. The using of ‘ pm_lo8 ’ similar to ‘ lo8 ’.
pm_hi8
This modifier allows you to use bits 8 through 15 of an address expression as 8 bit relocatable expression. This modifier useful for addressing data or code from Flash/Program memory.
pm_hh8
This modifier allows you to use bits 15 through 23 of an address expression as 8 bit relocatable expression. This modifier useful for addressing data or code from Flash/Program memory.