CX51 用户手册----NOAREGS伪指令

声明:

1、本翻译仅供个人学习使用,本人没有提供技术支持的义务,也不承担由此引发的任何后果。

2、请勿用于商业用途。

3、英文来自:http://www.keil.com/support/man/docs/c51/。

4、欢迎大家共同与我交流探讨(290207203@qq.com)。

NOAREGS Compiler Directive

Abbreviation

NOAR

Arguments

None.

Default

AREGS

µVision

Options — C51 — Don't use absolute register accesses.

Description

The NOAREGS directive disables absolute register addressing for registers R0-R7. Functions compiled with NOAREGS are register bank independent and work in any register bank. This directive may be used for functions that are called from other functions using different register banks.

 Note

  • Though they may be defined several times in a program, the AREGS and NOAREGSoptions are valid only when defined outside of a function declaration.
See Also

AREGSREGISTERBANK

Example

The following is a source and code listing which uses both NOAREGS and AREGS.

stmt level    source
1          extern char func ();
2          char k;
3
4          #pragma NOAREGS
5          noaregfunc ()  {
6   1        k = func () + func ();
7   1      }
8
9          #pragma AREGS
10          aregfunc ()  {
11  1        k = func () + func ();
12  1      }

; FUNCTION noaregfunc (BEGIN)
                ; SOURCE LINE # 6
0000 120000 E   LCALL func
0003 EF         MOV   A,R7
0004 C0E0       PUSH  ACC
0006 120000 E   LCALL func
0009 D0E0       POP   ACC
000B 2F         ADD   A,R7
000C F500   R   MOV   k,A
                ; SOURCE LINE # 7
000E 22         RET
        ; FUNCTION noaregfunc (END)
        ; FUNCTION aregfunc (BEGIN)
                ; SOURCE LINE # 11
0000 120000  E  LCALL func
0003 C007       PUSH  AR7
0005 120000  E  LCALL func
0008 D0E0       POP   ACC
000A 2F         ADD   A,R7
000B F500    R  MOV   k,A
                ; SOURCE LINE # 12
000D 22         RET
        ; FUNCTION aregfunc (END)

Note the different methods of saving R7 on the stack. The code generated for the function noaregfunc is:

MOV  A,R7
PUSH ACC

While the code for the aregfunc function is:

PUSH AR7

 Related Knowledgebase Articles



NOAREGS 编译器伪指令

缩写

NOAR

参数

无。

缺省

AREGS

µVision

Options — C51 — Don't use absolute register accesses.

描述

NOAREGS 伪指令对寄存器R0-R7禁止绝对寄存器寻址。用NOAREGS 编译的函数与寄存器分组独立,可以工作在任意寄存器组。当使用其他寄存器组的函数调用当前函数时,这个伪指令很有用。

 注意

  • AREGS 和NOAREGS 伪指令可以在程序中指定多次,但仅当在函数声明前指定时有效。
参考

AREGSREGISTERBANK

示例

下面是使用 NOAREGS 和 AREGS源代码和列表文件。

stmt level    source
1          extern char func ();
2          char k;
3
4          #pragma NOAREGS
5          noaregfunc ()  {
6   1        k = func () + func ();
7   1      }
8
9          #pragma AREGS
10          aregfunc ()  {
11  1        k = func () + func ();
12  1      }

; FUNCTION noaregfunc (BEGIN)
                ; SOURCE LINE # 6
0000 120000 E   LCALL func
0003 EF         MOV   A,R7
0004 C0E0       PUSH  ACC
0006 120000 E   LCALL func
0009 D0E0       POP   ACC
000B 2F         ADD   A,R7
000C F500   R   MOV   k,A
                ; SOURCE LINE # 7
000E 22         RET
        ; FUNCTION noaregfunc (END)
        ; FUNCTION aregfunc (BEGIN)
                ; SOURCE LINE # 11
0000 120000  E  LCALL func
0003 C007       PUSH  AR7
0005 120000  E  LCALL func
0008 D0E0       POP   ACC
000A 2F         ADD   A,R7
000B F500    R  MOV   k,A
                ; SOURCE LINE # 12
000D 22         RET
        ; FUNCTION aregfunc (END)

注意在栈中保存 R7 的不同方法。函数 noaregfunc 生成的代码是:

MOV  A,R7
PUSH ACC

而 aregfunc 函数生成的代码是:

PUSH AR7



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值