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

STCx51虚拟单片机(4):STC32位单片机的内核架构和指令集简介

[复制链接]

该用户从未签到

83

主题

1132

回帖

1万

积分

荣誉版主

积分
12251
 楼主| 发表于 2024-1-17 18:49:37 | 显示全部楼层
LAOXU 发表于 2024-1-17 16:32
多了一条 数据 搬家 指令, 呵呵~~~

如果脑子上没有洞,在脑子上打洞通常会进水。如果脑子上开得窍多了,在脑子上打洞就没有什么影响,还有利于把已经灌进去的水排掉。

点评

求余数只是求商的附加结果, 在俺 已知的所有 CPU 中, 都是用 一条指令, 直接计算出结果(余数和商,存于不同的寄存器中), 硬件实现, 这种方法门数最少, 芯片内核所占面积最省, 软件模拟实现, 这种方法效率最高,  详情 回复 发表于 2024-1-18 02:22
回复 支持 反对 送花

使用道具 举报

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

    [LV.7]常住居民III

    45

    主题

    1140

    回帖

    4851

    积分

    荣誉版主

    积分
    4851
    发表于 2024-1-18 02:22:25 | 显示全部楼层
    杨为民 发表于 2024-1-17 18:49
    如果脑子上没有洞,在脑子上打洞通常会进水。如果脑子上开得窍多了,在脑子上打洞就没有什么影响,还有利 ...

    求余数只是求商的附加结果,  在俺 已知的所有 CPU 中, 都是用 一条指令, 直接计算出结果(余数和商,存于不同的寄存器中),

    硬件实现, 这种方法门数最少, 芯片内核所占面积最省,

    软件模拟实现, 这种方法效率最高, 开消最省,

    ================================================

    看来全世界的 CPU 设计者,  都需要学习杨老师, 在脑子上打个洞~~~

    点评

    全世界目前的CPU都没有,STC未来的CPU也不可以有吗?  详情 回复 发表于 2024-1-18 08:26
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    83

    主题

    1132

    回帖

    1万

    积分

    荣誉版主

    积分
    12251
     楼主| 发表于 2024-1-18 08:26:03 | 显示全部楼层
    LAOXU 发表于 2024-1-18 02:22
    求余数只是求商的附加结果,  在俺 已知的所有 CPU 中, 都是用 一条指令, 直接计算出结果(余数和商,存于不 ...

    全世界目前的CPU都没有,STC未来的CPU也不可以有吗?

    点评

    可以 , 老杨 NB ~~~  详情 回复 发表于 2024-1-18 10:40
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    45

    主题

    1140

    回帖

    4851

    积分

    荣誉版主

    积分
    4851
    发表于 2024-1-18 10:40:27 | 显示全部楼层
    杨为民 发表于 2024-1-18 08:26
    全世界目前的CPU都没有,STC未来的CPU也不可以有吗?

    可以 , 老杨 NB ~~~

    点评

    嘴斗完了,楼下给出我的一些思考,欢迎学术讨论  详情 回复 发表于 2024-1-18 14:18
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    83

    主题

    1132

    回帖

    1万

    积分

    荣誉版主

    积分
    12251
     楼主| 发表于 2024-1-18 14:18:13 | 显示全部楼层
    LAOXU 发表于 2024-1-18 10:40
    可以 , 老杨 NB ~~~

    嘴斗完了,楼下给出我的一些思考,欢迎学术讨论
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    83

    主题

    1132

    回帖

    1万

    积分

    荣誉版主

    积分
    12251
     楼主| 发表于 2024-1-18 14:21:04 | 显示全部楼层
    关于在指令集中整数求余数运算要不要单独设置一条指令的思考

    1)以实现计算表达式“W = ( X % Y ) / Z”为例。

    2)对于8位变量用8051指令集(80351-L0指令集)计算上面的表达式:
    MOV        A, X;
    MOV        B, Y;
    DIV           AB;           // 求余数只有用除法指令
    MOV        A,B;                  // 转移操作数
    MOV        B, Z;
    DIV           AB;
    MOV        W,A;

    3)对于8位变量如果用80351-L1指令集计算上面的表达式:
    LDD          BR7, X;
    LDD          BR3, Y;
    MODU     BR7, BR3;     //专门求余数指令,计算结果在左操作数
    LDD          BR3, Z;
    DIVU        BR7, BR3;
    STD           W, BR7;

    4)对于32位变量如果用80351-L1指令集计算上面的表达式:
    LDD          EAX, X;
    LDD          EBX, Y;
    MODU     EAX, EBX;     //专门求余数指令,计算结果在左操作数
    LDD          EBX, Z;
    DIVU        EAX, EBX;
    STD           W, EAX;
    5)数学上的基本运算分为无操作数、单操作数和双操作数运算三种,加减乘除以及求余数这5种算术运算(不是4种)属于双操作数。由于除法和求余数这两种运算是不对称操作(A/B不等于B/A),因此如果一个指令集中只有一条除法指令,那么在需要连续运算的表达式计算中就必须由人工或者编译器插入操作数转移指令。

    6)在笔者多年前的理论研究中认为,对于“数学计算完备的指令集”,每一种运算都应该对应一条独立的指令,无需编译器或者人工的干预。因此80351-L1指令集里面就有了求余的“MOD”指令。

    7)但是实际的CPU指令集中的指令数目由设计者的理念和制造者的目的决定
    比如RISC精简指令集认为指令集越小越好,其余的交给编译器去实现。而笔者认为:
    在芯片的设计与制造技术高度发达的今天,
    目前的RISC过于精简了,应该适当的增加一些才好

    点评

    您老自行搞一套 C编译器, 当然没问题, 您老想 蹭KEIL , 那对不起, 计算结果还要回传(转移操作数). 否则无法匹配, 无法做到无缝嵌入, 对于8位变量, KEIL 内部定义返回值 , 商 R7, 余数 R6, 对于16位变量, KEIL  详情 回复 发表于 2024-1-19 08:59
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    640

    主题

    1万

    回帖

    1万

    积分

    管理员

    积分
    15687
    发表于 2024-1-18 23:41:54 | 显示全部楼层
    DPU32@STC8H8K64U 已设计完成
    ===下午刚开完会,只待详细验证而已

             MDU32C@STC8H2K32U-45MHz-LQFP32/SOP28/TSSOP28, 已定型
    ===下周
    DPU32 移植到 STC32


    又读了遍杨老师的大作,再次确认杨老师是
    === x51时代的宗师


    内部布置了个任务 跟 M3 比较,是否少了哪些核心价值指令,补齐算了
    让 x51世界在杨老师的指引下,豪华起来,大兵团作战
    ===【DPU32 + TFPU32 + CPU32】,海空协同作战 !!!



    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    45

    主题

    1140

    回帖

    4851

    积分

    荣誉版主

    积分
    4851
    发表于 2024-1-19 08:59:52 | 显示全部楼层
    杨为民 发表于 2024-1-18 14:21
    关于在指令集中整数求余数运算要不要单独设置一条指令的思考
    (1)以实现计算表达式“W = ( X % Y ) / Z” ...

    您老自行搞一套 C编译器, 当然没问题,

    您老想 蹭KEIL , 那对不起, 计算结果还要回传(转移操作数). 否则无法匹配, 无法做到无缝嵌入,

    对于8位变量, KEIL 内部定义返回值 , 商 R7, 余数 R6,  

    对于16位变量, KEIL 内部定义返回值 , 商 R6R7, 余数 R4R5,

    .......................

    点评

    (1)“您老自行搞一套 C编译器, 当然没问题”:我已经搞了一套8051/80251的C编译器了。 (2)“您老想 蹭KEIL”:我不想蹭KEIL,STC也不想蹭KEIL。由于Keil已经STC单片机的主流编译器,我们尊重这些STC单片机的用户  详情 回复 发表于 2024-1-19 11:29
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    83

    主题

    1132

    回帖

    1万

    积分

    荣誉版主

    积分
    12251
     楼主| 发表于 2024-1-19 11:29:19 | 显示全部楼层
    本帖最后由 杨为民 于 2024-1-19 11:31 编辑
    LAOXU 发表于 2024-1-19 08:59
    您老自行搞一套 C编译器, 当然没问题,

    您老想 蹭KEIL , 那对不起, 计算结果还要回传(转移操作数). 否则 ...

    (1)“您老自行搞一套 C编译器, 当然没问题”:我已经搞了一套8051/80251的C编译器了
    (2)“您老想 蹭KEIL”:我不想
    蹭KEIL,STC也不想蹭KEIL。由于Keil已经STC单片机的主流编译器,我们都尊重这些STC单片机的用户和他们的成果,只是在新的CPU架构和新的计算机语言里尽量兼容Keil的C51和C251语法和风格

    (3)“对于16位变量, KEIL 内部定义返回值 , 商 R6R7, 余数 R4R5”:这个你不用担心,在STC DPU32新的指令集中已经有一条专门的指令“DIVS_KEIL16        AX,  AX2;”        这条指令同时计算AX=AX / AX2 和AX2=AX%AX2,结果的16位商在AX,16位余数在AX2

    点评

    祝您老早日成功~~~  详情 回复 发表于 2024-1-19 17:11
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    161

    回帖

    897

    积分

    高级会员

    积分
    897
    发表于 2024-1-19 11:38:22 | 显示全部楼层
    LAOXU 发表于 2024-1-19 08:59
    您老自行搞一套 C编译器, 当然没问题,

    您老想 蹭KEIL , 那对不起, 计算结果还要回传(转移操作数). 否则 ...

    应该不会蹭KEIL吧,这寄存器名字和指令样式与51系的完全不一样,肯定准备另搞一套C编译器吧
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-1 08:15 , Processed in 0.165231 second(s), 86 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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