找回密码
 立即注册
楼主: 神***

向【64位超算中心】前进 ! DPU32@全新32位8051+DSP指令

[复制链接]
  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 148 天

    [LV.7]常住居民III

    39

    主题

    888

    回帖

    4152

    积分

    荣誉版主

    积分
    4152
    发表于 2024-3-9 08:56:14 | 显示全部楼层
    本帖最后由 LAOXU 于 2024-3-9 09:02 编辑

    DPU32 指令, 如考虑今后应用于 51, 建议在 减法指令基础上, 增加 2条比较指令, 以弥补 51系的短板

    32 位减法(SUBX_EABX) // 结果回送
    16 位减法(SUBX_ABX)  // 结果回送

    新增比较 指令
    32 位比较(CMPX_EABX) // 同(SUBX_EABX),结果不回送
    16 位比较(CMPX_ABX)  // 同(SUBX_ABX),结果不回送


    另外:

    DPU32SR DPU32 状态寄存器 DBZ 标志  

    除了指示除数为 0 外, 没啥用途, 建议在 加减法 时, 设置为计算结果为零 标志.

    1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 148 天

    [LV.7]常住居民III

    39

    主题

    888

    回帖

    4152

    积分

    荣誉版主

    积分
    4152
    发表于 2024-3-9 09:18:28 | 显示全部楼层
    关于 DPU32  加/减法  和 逻辑、算术移位 指令, 增加带 CY 的考虑

    1.   加/减法 指令,  由于不装载 DPU32 状态寄存器, 故用模拟判断 CY标志,

        决定是否增加一条 加1/减1 指令( 和使用 装载DPU32 状态寄存器CY 相比, 实际汇编指令更精简)

    2.   逻辑、算术移位 指令,  由于本身就要装载 DPU32 状态寄存器,

         故附带装载设置 CY标志, 实际汇编指令更为精简.




    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 148 天

    [LV.7]常住居民III

    39

    主题

    888

    回帖

    4152

    积分

    荣誉版主

    积分
    4152
    发表于 2024-3-9 11:40:21 | 显示全部楼层
    有个很严重的问题, 请考虑

    DPU32 模块 指令, 理论上可以通过 虚拟指令集 和采用 微指令技术 的编译器实现。

    但是, 目前(近几年)是不现实的, 只能依靠 Keil C251 编译器,

    DPU32 模块 占用 CX 和 DX (相当于 DR8 和`DR12) 寄存器

    传送参数可用 汇编子程序 来实现, 但如何通知 C251 编译器, 当前操作指令, 已占用了 CX 和 DX 寄存器 ?

    否则, 如不通知 C251 编译器, 资源占用(CX 和 DX) 会被 编译器改写, 系统崩溃死机.

    点评

    (1)老徐,过度担心了,这个问题在设计之初就已经考虑了,请看1楼的图: [attachimg]37593[/attachimg] ECX和EDX并不占用DR8和DR12,使用的DTAT空间的08H道0FH空间,这时8051的BANK1寄存器空间。 (2)根据C251编  详情 回复 发表于 2024-3-9 12:55
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10906
    发表于 2024-3-9 12:55:45 | 显示全部楼层
    本帖最后由 杨为民 于 2024-3-9 13:07 编辑
    LAOXU 发表于 2024-3-9 11:40
    有个很严重的问题, 请考虑

    DPU32 模块 指令, 理论上可以通过 虚拟指令集 和采用 微指令技术 的编译器实现 ...

    (1)老徐,过度担心了,这个问题在设计之初就已经考虑了,请看1楼的图:

    截图202403091234547676.jpg

    ECX和EDX并不占用DR8和DR12,使用的DATA空间的08H道0FH空间,这是8051的BANK1寄存器空间。
    (2)根据C251编译器规范,C251对任何C语言和库函数的编译都不改变PSW的RS0和RS1的值,因此C251绝不会占用BANK1、BANK2和BANK3的空间,这时留给第三方库开发的空间。至于STC自己的DPU32函数库,自己用汇编写库函数,告知用户注意就行了。

    (3)顺带提一句:根据C51编译器规范,除了用户明显指出外,只是在中断ISR中设置过RS0=0和RS1=0,除此之外C51对任何C语言和库函数的编译都不改变PSW的RS0和RS1的值,因此C51也是将BANK1、BANK2和BANK3的空间留给用户和第三方库开发的空间。因此DPU32同样可以用到STC8H系列单片机上,至于STC自己的STC8H-DPU32函数库,自己用汇编写库函数,告知用户注意就行了。


    点评

    占用 8051的BANK1寄存器空间。还是要通知 编译器 的 !!! 在 Keil C51 上, 如中断 未使用 BANK1寄存器空间, 则 编译器 会 优先把 DATA 最低字节 (08H) 开始, 当作临时变量(局部变量) 使用 ! 你可编个最简单 C程序,  详情 回复 发表于 2024-3-9 13:20
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 148 天

    [LV.7]常住居民III

    39

    主题

    888

    回帖

    4152

    积分

    荣誉版主

    积分
    4152
    发表于 2024-3-9 13:20:07 | 显示全部楼层
    杨为民 发表于 2024-3-9 12:55
    (1)老徐,过度担心了,这个问题在设计之初就已经考虑了,请看1楼的图:

    占用 8051的BANK1寄存器空间。还是要通知 编译器 的 !!!

    在 Keil C51 上,  如中断 未使用 BANK1寄存器空间, 则 编译器 会 优先把 DATA 最低字节 (08H) 开始, 当作临时变量(局部变量) 使用 !

    你可编个最简单 C程序, 程序中无实质性内容, 无中断不使用 BANK寄存器指定,   Keil C51 编译后, SP 堆栈指向 07H !!!

    点评

    “还是要通知 编译器 的 !!!”,通知就通知呗,这算什么事吗?  详情 回复 发表于 2024-3-9 15:26
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 148 天

    [LV.7]常住居民III

    39

    主题

    888

    回帖

    4152

    积分

    荣誉版主

    积分
    4152
    发表于 2024-3-9 13:32:32 | 显示全部楼层
    在 Keil C251 上,  编了一个最简单 C程序, 程序中无实质性内容, 无中断不使用 BANK寄存器指定,   Keil C51 编译后, SP 堆栈指向 07H !!!



    捕获.JPG

    点评

    “在 Keil C251 上, 编了一个最简单 C程序, 程序中无实质性内容, 无中断不使用 BANK寄存器指定, Keil C51 编译后, SP 堆栈指向 07H !!!” 既然想用DPU32这么高端大气上档次的东西,那就编个复杂点的程序就行了,  详情 回复 发表于 2024-3-9 15:30
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10906
    发表于 2024-3-9 15:26:55 | 显示全部楼层
    LAOXU 发表于 2024-3-9 13:20
    占用 8051的BANK1寄存器空间。还是要通知 编译器 的 !!!

    在 Keil C51 上,  如中断 未使用 BANK1寄存器空 ...

    “还是要通知 编译器 的 !!!”,通知就通知呗,这算什么事吗?

    点评

    现在问题是, 用什么方式通知 C编译器 ? 目前我没有查到可行的方法. 请问 杨老师, 您用什么方式或者什么命令, 通知 C编译器 ?  详情 回复 发表于 2024-3-9 17:12
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10906
    发表于 2024-3-9 15:30:40 | 显示全部楼层
    LAOXU 发表于 2024-3-9 13:32
    在 Keil C251 上,  编了一个最简单 C程序, 程序中无实质性内容, 无中断不使用 BANK寄存器指定,   Keil C51  ...

    “在 Keil C251 上,  编了一个最简单 C程序, 程序中无实质性内容, 无中断不使用 BANK寄存器指定,   Keil C51 编译后, SP 堆栈指向 07H !!!”

    既然想用DPU32这么高端大气上档次的东西,那就编个复杂点的程序就行了,这算什么大事,还值三个惊叹号!

    点评

    这表示如无指定, 系统占用从地址 08H 开始的 DATA ! 而汇编程序内的 BANK 指定, 无法被 C编译器识别 !  详情 回复 发表于 2024-3-9 17:08
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    119

    回帖

    657

    积分

    高级会员

    积分
    657
    发表于 2024-3-9 17:04:19 | 显示全部楼层
    LAOXU 发表于 2024-3-9 13:32
    在 Keil C251 上,  编了一个最简单 C程序, 程序中无实质性内容, 无中断不使用 BANK寄存器指定,   Keil C51  ...

    C251的全局变量是从08H地址开始分配的
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 148 天

    [LV.7]常住居民III

    39

    主题

    888

    回帖

    4152

    积分

    荣誉版主

    积分
    4152
    发表于 2024-3-9 17:08:27 | 显示全部楼层
    杨为民 发表于 2024-3-9 15:30
    “在 Keil C251 上,  编了一个最简单 C程序, 程序中无实质性内容, 无中断不使用 BANK寄存器指定,   Keil  ...

    这表示如无指定, 系统占用从地址 08H 开始的 DATA !

    而汇编程序内的 BANK 指定, 无法被 C编译器识别 !
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-19 10:54 , Processed in 0.086748 second(s), 75 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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