找回密码
 立即注册
查看: 121|回复: 7

请教关于KEIL C251 编译器关于 USING 0 的使用语法问题

[复制链接]

该用户从未签到

19

主题

103

回帖

195

积分

注册会员

积分
195
发表于 2024-4-13 11:41:35 | 显示全部楼层 |阅读模式
本帖最后由 newlined 于 2024-4-13 13:57 编辑

一个程序,关于R0到R7寄存器的使用,以前是通过设置RS0,RS1来区分,比如在一个中断中 执行 CLR RS0;CLR RS1,使用0区,在另一个中断中执行SETB RS0;CLR RS1,使用1区,在主程序中执行 SETB RS0,SETB RS1使用3区。现在我想在程序使用中对R0到R7的寄存器压栈处理,就是 PUSH AR0....PUSH AR7,发现在程序的开头中不使用  USING 语句定义寄存器区域的使用,编译就会出问题,出现下面的错误  : error A53: MISSING 'USING' INFORMATION,我是不是要把程序中所有的 CLR RS0;CLR RS1,替换成 USING 0,SETB RS0;CLR RS1 替换成 USING 1,SETB RS0,SETB RS1 替换成 USING 3?假设 我写成一下程序会怎样?

CLR  RS0;
CLR  RS1;
USING 3

就是关于使用using的机理是什么,谢谢大家。

回复 送花

使用道具 举报

该用户从未签到

550

主题

9345

回帖

1万

积分

管理员

积分
13916
发表于 2024-4-13 18:21:20 | 显示全部楼层
建议不要使用 using x;  让编译器自己去处理
回复 支持 反对 送花

使用道具 举报

该用户从未签到

19

主题

103

回帖

195

积分

注册会员

积分
195
 楼主| 发表于 2024-4-13 18:31:39 | 显示全部楼层
本帖最后由 newlined 于 2024-4-13 18:33 编辑
神农鼎 发表于 2024-4-13 18:21
建议不要使用 using x;  让编译器自己去处理

谢谢管理员的回复,可不用这个语句,就没法执行 PUSH AR0.....AR7 这样的语句了,我想把R0。。。R7压栈
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-4-30 21:44
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    0

    主题

    24

    回帖

    146

    积分

    注册会员

    积分
    146
    发表于 2024-4-13 21:46:26 | 显示全部楼层
    如果是C语言使用using
    编译器会自动设置PSW中的RS0和RS1来切换寄存器组,如果需要push/pop Rn,编译器也会自动选择寄存器组所在的DATA地址

    如果是汇编程序使用USING
    则仅仅是方便汇编器将ARn自动选择寄存器组所在的DATA地址
    所以如果在汇编程序中需要PUSH/POP ARn,则吧必须设置USING
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    652

    回帖

    1万

    积分

    荣誉版主

    积分
    10790
    发表于 2024-4-14 01:58:00 | 显示全部楼层
    如果是C251,请使用PUSH DR0, PUSH  DR4和POP  DR0, POP DR4来代替 PUSH AR0这种8051指令。

    如果是C51,可以参考

    STC单片机uC/OS-II移植记(11):C51中断处理中的寄存器现场保护与恢复方法
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=3602
    (出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)


    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    103

    回帖

    195

    积分

    注册会员

    积分
    195
     楼主| 发表于 2024-4-15 08:10:11 | 显示全部楼层
    kaily 发表于 2024-4-13 21:46
    如果是C语言使用using
    编译器会自动设置PSW中的RS0和RS1来切换寄存器组,如果需要push/pop Rn,编译器也会 ...

    谢谢您的回复,using可以在程序中多次使用吗?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-30 21:44
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    0

    主题

    24

    回帖

    146

    积分

    注册会员

    积分
    146
    发表于 2024-4-16 21:09:19 | 显示全部楼层
    newlined 发表于 2024-4-15 08:10
    谢谢您的回复,using可以在程序中多次使用吗?

    可以
    C语言程序中,using对当前函数有效
    汇编程序,对using下面的代码有效,直到下一个using
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    103

    回帖

    195

    积分

    注册会员

    积分
    195
     楼主| 发表于 2024-4-17 07:59:44 | 显示全部楼层
    kaily 发表于 2024-4-16 21:09
    可以
    C语言程序中,using对当前函数有效
    汇编程序,对using下面的代码有效,直到下一个using ...

    好的,谢谢。
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-8 05:12 , Processed in 0.063366 second(s), 56 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表