杨为民
发表于 2024-1-17 18:49:37
LAOXU 发表于 2024-1-17 16:32
多了一条 数据 搬家 指令, 呵呵~~~
如果脑子上没有洞,在脑子上打洞通常会进水。如果脑子上开得窍多了,在脑子上打洞就没有什么影响,还有利于把已经灌进去的水排掉。
LAOXU
发表于 2024-1-18 02:22:25
杨为民 发表于 2024-1-17 18:49
如果脑子上没有洞,在脑子上打洞通常会进水。如果脑子上开得窍多了,在脑子上打洞就没有什么影响,还有利 ...
求余数只是求商的附加结果,在俺 已知的所有 CPU 中, 都是用 一条指令, 直接计算出结果(余数和商,存于不同的寄存器中),
硬件实现, 这种方法门数最少, 芯片内核所占面积最省,
软件模拟实现, 这种方法效率最高, 开消最省,
================================================
看来全世界的 CPU 设计者,都需要学习杨老师, 在脑子上打个洞~~~
杨为民
发表于 2024-1-18 08:26:03
LAOXU 发表于 2024-1-18 02:22
求余数只是求商的附加结果,在俺 已知的所有 CPU 中, 都是用 一条指令, 直接计算出结果(余数和商,存于不 ...
全世界目前的CPU都没有,STC未来的CPU也不可以有吗?
LAOXU
发表于 2024-1-18 10:40:27
杨为民 发表于 2024-1-18 08:26
全世界目前的CPU都没有,STC未来的CPU也不可以有吗?
可以 , 老杨 NB ~~~
{:lol:}
杨为民
发表于 2024-1-18 14:18:13
LAOXU 发表于 2024-1-18 10:40
可以 , 老杨 NB ~~~
嘴斗完了,楼下给出我的一些思考,欢迎学术讨论
杨为民
发表于 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过于精简了,应该适当的增加一些才好。
神农鼎
发表于 2024-1-18 23:41:54
DPU32@STC8H8K64U 已设计完成
===下午刚开完会,只待详细验证而已
MDU32C@STC8H2K32U-45MHz-LQFP32/SOP28/TSSOP28, 已定型
===下周 DPU32 移植到 STC32
又读了遍杨老师的大作,再次确认杨老师是
=== x51时代的宗师
内部布置了个任务 跟 M3 比较,是否少了哪些核心价值指令,补齐算了
让 x51世界在杨老师的指引下,豪华起来,大兵团作战
===【DPU32 + TFPU32 + CPU32】,海陆空协同作战 !!!
LAOXU
发表于 2024-1-19 08:59:52
杨为民 发表于 2024-1-18 14:21
关于在指令集中整数求余数运算要不要单独设置一条指令的思考
(1)以实现计算表达式“W = ( X % Y ) / Z” ...
您老自行搞一套 C编译器, 当然没问题,
您老想 蹭KEIL , 那对不起, 计算结果还要回传(转移操作数). 否则无法匹配, 无法做到无缝嵌入, {:lol:}
对于8位变量, KEIL 内部定义返回值 , 商 R7, 余数 R6,
对于16位变量, KEIL 内部定义返回值 , 商 R6R7, 余数 R4R5,
.......................
杨为民
发表于 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。
zxcv1973
发表于 2024-1-19 11:38:22
LAOXU 发表于 2024-1-19 08:59
您老自行搞一套 C编译器, 当然没问题,
您老想 蹭KEIL , 那对不起, 计算结果还要回传(转移操作数). 否则 ...
应该不会蹭KEIL吧,这寄存器名字和指令样式与51系的完全不一样,肯定准备另搞一套C编译器吧