解决方案 1. 转换 无符号数据类型的转换相对比较容易。如果是小转大,先清空目标数据,然后直接将源数据传送至目标数据的低字节或字;如果是大转小,则要先判断目标数据是否会溢出,如果会,则直接将目标数据赋最大值,如果不会,将源数据的低字节或字传送至目标数据,这里,我增加了大转小的间接溢出功能(如有溢出,SM1.1会置位)。 有 无符号数据的转换,当然就有无符号和实型数据的相互转换需求。这里我增加了"B_R"、"W_R"、"DW_R"、"ROUND_B"、"ROUND_W"、"ROUND_DW"、"TRUNC_B"、"TRUNC_W"和"TRUNC_DW",分别是无符号字节转实型、无符号整型转实型、无符号双整型转实型、实型四舍五入小数后转无符号字节、实型四舍五入小数后转无符号整型、实型四舍五入小数后转无符号双整型、实型丢弃小数后转无符号字节、实型丢弃小数后转无符号整型、实型丢弃小数后转无符号双整型。关于整型和实型数据的相互转换,我在这里不详细说明,有兴趣的朋友可以去查阅相关资料。 另外,由于系统没有SByte数据类型,当然就没有相应的转换指令,基于此,我增加了"SB_I"、"SB_DI"和"SB_R",即有符号字节转有符号整型、有符号字节转有符号双整型和有符号字节转实型。 2. 比较 无符号数据类型的比较是利用系统现有有符号比较指令实现的。具体办法是将数分成负数和非负数两部分,那么两个相互比较的数就有四种排列组合,即非负数和非负数比较、非负数和负数比较、负数和负数比较、负数和非负数比较,四种情况比较后即可得到想要的bool结果。其实从应用结果来看,可以归纳成同号比较和异号比较。 另外,我的无符号数据比较指令中没有"=="指令,是因为可以利用系统现有有符号"=="比较指令进行比较,而不影响比较结果。 同样,由于系统没有SByte数据类型,我增加了">SB"、">=SB"、"