我喜欢做一些优化,所以我喜欢用两行汇编程序替换一行c代码.
rb->am += N
环形缓冲区 struct rb
由变量N
递增
我正在努力让ASM变得正确.这是我的伪代码
void myFunc(struct rb, const uint16_t N)
...
asm(
"mov w0, %0\n"
"add %1, w0"
: rb->am
: N
: w0
);
如果我理解ASM关键字ITS
asm(<instruction> : <input operants> : <output operants> : <clobbers>)
我目前不知道如何获得正确的语法.
W0是一个寄存器.我假设我需要告诉我的编译器我正在使用它.
需要将rb-gt;am解析为内存地址.
N是函数参数(如Rb).
你知道怎么把这件事做好吗?
[更新] 目标平台是MicroChip的dspic33.我查了程序员手册.在RAM中更改uint16变量的唯一ADD是针对W0/WREG执行的.
ADD f {,WREG} -> Destination = f + WREG
Smth Like(我的伪代码)
MOV WREG, N
ADD addr(rb->am)
是必要的. 这里是我的来源的链接 https://ww1.microchip.com/downloads/en/DeviceDoc/70000157g.pdf个