小编Iro*_*oha的帖子

在C中使用Assembler而不使用占位符

我被分配了一项理论上不太难的任务.应使用汇编程序代码(asm)更改AC变量.我已经完成了它并且它可以工作,但是赋值的第二部分是在不使用占位符(%)的情况下执行相同的操作.

我在这里不知所措,经过一些研究,我仍然没有找到解决方案.如何在不使用占位符来获取变量的情况下访问或操作汇编代码中的C变量?

这是带占位符的代码:

    volatile uint8_t number = 1;
    volatile uint8_t *number_pointer = &number;

    asm volatile(
        "ld r20, %a0" "\n\t"
        "lsl r20" "\n\t"
        "st %a0, r20" "\n\t"
        "breq resetten" "\n\t"
        "ret" "\n\t"

        "resetten:" "\n\t"
        "ldi r20, 1" "\n\t"
        "st %a0, r20"
          : "+e" (number_pointer)
    );
Run Code Online (Sandbox Code Playgroud)

简而言之:如何在不使用%的情况下访问和更改"number_pointer"?(代码加倍"数字"直到它为128,然后它再次从1开始.)

c assembly gnu-assembler inline-assembly

5
推荐指数
1
解决办法
307
查看次数

标签 统计

assembly ×1

c ×1

gnu-assembler ×1

inline-assembly ×1