最近,在通过obdev的atmel avr的虚拟USB驱动器时,我找到了这个表达式
lo8(-usbrxbuf)
遗憾的是,在avr-gcc的文档中没有给出关于lo8修饰符的更多信息。这里有人可以完全解释或给出任何关于它的链接吗?
谷歌搜索“lo8 avr”给this作为第一击。
lo8此修饰符允许您将地址表达式的0到7位用作8位可重定位表达式。
[编辑]
像这儿:
push YH ;2 [2]
lds YL, usbInputBufOffset;2 [4]
clr YH ;1 [5]
subi YL, lo8(-(usbRxBuf));1 [6]
sbci YH, hi8(-(usbRxBuf));1 [7]
看起来好像在这里找到缓冲区位置地址。我不知道为什么从偏移中减去负基地址而不是添加,但是......
哦,我猜“可重定位”在这里意味着“加载时间”。也就是说,该值不必在汇编时知道,但必须在运行时知道并保持不变。也许“lo8”和“hi8”创建一个重定位信息类型加载器符号(或表达式) - 很像段地址。