Sevm.Sir
1.1.2209.19
See the version list below for details.
dotnet add package Sevm.Sir --version 1.1.2209.19
NuGet\Install-Package Sevm.Sir -Version 1.1.2209.19
<PackageReference Include="Sevm.Sir" Version="1.1.2209.19" />
paket add Sevm.Sir --version 1.1.2209.19
#r "nuget: Sevm.Sir, 1.1.2209.19"
// Install Sevm.Sir as a Cake Addin #addin nuget:?package=Sevm.Sir&version=1.1.2209.19 // Install Sevm.Sir as a Cake Tool #tool nuget:?package=Sevm.Sir&version=1.1.2209.19
SIR(Script Inter-language)
一种服务于脚本执行的可二进制化指令语言
支持的虚拟机
SEVM:Script Execution Virtual Machine https://github.com/inmount/SEVM
指令说明
为了最大化的兼容现有从业者的使用习惯,我将使用类似汇编语言的指令方式定义。
同时,为了简化处理,增加了类似属性值的多样化信息表示。
操作符号说明:
- ; 语句结束符,后面的字符不计入代码
- " 字符串定义符号
- \ 字符串中的转义符,\"为双引号,\r为回车符,\n为换行符
- @ 标签定义
- , 命令参数分隔符
- # 寄存器定义
- $ 临时变量定义
- [] 直接访问虚拟内存
一、段指令
1.1 引入定义import及end import
用来导入程序集或是内置函数集。
例如:
import
use "host"; 导入内置函数集
lib "print"; 导入名称为"print"的外部程序集
end import
1.2 数据定义data及end data
用来定义初始内存信息。
支持的类型包括:number, string
例如:
data
[1] number 1; 添加一个数字虚拟内存空间
[2] number 2
[3] string "a+b的和是"; 添加一个字符串虚拟内存空间
[4] string "print"
end data
1.3 变量定义define及end define
用来定义变量名称及指针。
例如:
define
$0 a 1; 定义一个变量a,指向第6个虚拟内存空间
$1 b 2; 定义一个变量b,指向第7个虚拟内存空间
$2 c 5
$3 str 6
end define
1.4 函数定义func及end func
用来定义变量名称及指针。
例如:
func
@1 main; 定义编号为1的函数,外部暴露名称为print
end func
1.5 代码段定义code及end code
用来定义代码区域
例如:
code
@1
; c=a+b
mov #0, $0; 将变量a中的内容赋值给0号寄存器
add #0, $1
mov $2, #0
; str="a+b的和是"+c
mov #0, 0
new $4; 申请一个临时变量$4,并指向新的虚拟内存空间
list $4; 设置临时变量$4为一个列表
ptrl $4, 0, 3; 临时变量$4列表的第1项指向第3个虚拟内存空间
new $5;
leal #2, $5, 1
ptrl $4, 1, #2; 临时变量$4列表的第2项指向临时变量$5的虚拟内存空间
mov $5, $2
join $3, $4; 将临时变量$4中的所有项目进行连接,再将结果赋值给变量$3
; print(str)
new $6;
list $6;
leal #2, 0, $3
ptr $6, #2
lea #0, $6; 将临时变量$3的地址赋值给0号寄存器
call [0], [4]; 执行print函数
end code
二、数据指令
指令格式:Operate [Exp1][,Exp2][,Exp3]
2.1 传送指令 mov
将Exp2指向的内容赋值给Exp1指向的空间中。
例如:
mov #0, 0
2.2 设置指针指令 ptr
更改Exp1变量的指针地址为Exp2的值,如Exp2未指定,则指向一个新的存储空间。
例如:
ptr $1
ptr $1, 1
2.3 获取指针指令 lea
获取Exp2的指针地址,填充到Exp1的内容中。
例如:
lea #1, $1
2.4 获取整数部分指令 int
获取Exp2数值的整数部分,填充到Exp1的内容中。
例如:
int $1, $2
2.5 获取小数部分指令 frac
获取Exp2数值的小数部分,填充到Exp1的内容中。
例如:
frac $1, $2
三、类型操作指令
3.1 列表指令 list
设定Exp1的内容类型为列表。
例如:
list $1
3.2 设置列表内容指针 ptrl
更改Exp1列表元素的第Exp2项指针地址,为Exp3的值。
例如:
ptrl $1, 1, 10
3.3 获取列表内容指针 leal
获取Exp2列表元素的第Exp3项指针地址,填充到Exp1的内容中。
例如:
leal #0, $1, 1
3.4 获取内容匹配索引 idx
获取Exp2列表的第一个E匹配Exp3的值的索引,填充到Exp1的内容中。
例如:
idx #0, $1, [10]
3.5 列表连接指令 join
连接Exp2列表中的所有项目,将结果填充到Exp1的内容中。
例如:
join $2, $1
3.6 列表统计指令 cnt
计算Exp2列表中的项目数量,将结果填充到Exp1的内容中。
例如:
cnt #0, $1
3.7 对象指令 obj
设定Exp1的内容类型为对象。
例如:
obj $1
3.8 设置对象键列表指针 ptrk
更改Exp1对象元素的键列表的指针,为Exp2的值。
例如:
ptrk $1, 10
3.9 设置对象值列表指针 ptrv
更改Exp1对象元素的值列表的指针,为Exp2的值。
例如:
ptrv $1, 10
3.10 获取对象键列表指针 leak
获取Exp2对象元素的键列表指针地址,填充到Exp1的内容中。
例如:
leak #0, $1
3.11 获取对象值列表指针 leav
获取Exp2对象元素的值列表指针地址,填充到Exp1的内容中。
例如:
leav #0, $1
四、运算操作指令
4.1 加法指令 add
将Exp1的值和Exp2的值执行加法运算,将结果填充到Exp1的内容中。
例如:
add $1, 1
4.2 减法指令 sub
将Exp1的值和Exp2的值执行减法运算,将结果填充到Exp1的内容中。
例如:
sub $1, 1
4.3 减法指令 mul
将Exp1的值和Exp2的值执行乘法运算,将结果填充到Exp1的内容中。
例如:
mul $1, 1
4.4 除法指令 div
将Exp1的值和Exp2的值执行除法运算,将结果填充到Exp1的内容中。
例如:
div $1, 1
五、逻辑操作指令
5.1 非指令 not
将Exp1的值执行非运算,将结果填充到Exp1的内容中。
例如:
not $1
5.2 与指令 and
将Exp1的值和Exp2的值执行与运算,将结果填充到Exp1的内容中。
例如:
and $1, $2
5.3 或指令 or
将Exp1的值和Exp2的值执行或运算,将结果填充到Exp1的内容中。
例如:
or $1, $2
5.4 异或指令 xor
将Exp1的值和Exp2的值执行异或运算,将结果填充到Exp1的内容中。
例如:
xor $1, $2
六、比较指令
6.1 相等比较指令 equal
将Exp2的值和Exp3的值执行比较运算,判断两个值是否相等,相等为1,不相等为0,比较结果填充到Exp1的内容中。
例如:
equal #0, $1, $2
6.2 大于比较指令 large
将Exp2的值和Exp3的值执行比较运算,判断前值是否大于后值,大于为1,否则为0,比较结果填充到Exp1的内容中。
例如:
large #0, $1, $2
6.3 小于比较指令 small
将Exp2的值和Exp3的值执行比较运算,判断前值是否大于后值,大于为1,否则为0,比较结果填充到Exp1的内容中。
例如:
small #0, $1, $2
七、区域操作指令
7.1 无条件跳转指令 jmp
执行跳转。
例如:
jmp @1
7.2 带条件跳转指令 jmpf
当Exp1的值大于0,则执行Exp2指向的标签跳转
例如:
jmpf #0, @2
7.3 调用指令 call
从#0寄存器的值中读取参数列表指针,调用对应的函数,返回的内容赋值给前置参数
例如:
mov #0, $2
call $1, [10]
7.4 返回指令 ret
对应Call执行返回。
例如:
ret $1
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Sevm.Sir:
Package | Downloads |
---|---|
Sevm.Engine
使用SIR中间语言的脚本执行虚拟机 |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.2.2210.24 | 1,242 | 10/7/2022 |
1.2.2210.23 | 664 | 10/7/2022 |
1.2.2210.22 | 673 | 10/7/2022 |
1.2.2210.21 | 396 | 10/7/2022 |
1.1.2209.20 | 665 | 9/6/2022 |
1.1.2209.19 | 2,000 | 8/31/2022 |
1.0.2208.18 | 905 | 8/31/2022 |
1.0.2208.17 | 651 | 8/30/2022 |
1.0.2208.16 | 914 | 8/30/2022 |
1.0.2208.15 | 1,161 | 8/29/2022 |
1.0.2208.14 | 410 | 8/29/2022 |
1.0.2208.12 | 656 | 8/27/2022 |
1.0.2208.11 | 651 | 8/27/2022 |
1.0.2208.10 | 943 | 8/27/2022 |
1.0.2208.9 | 402 | 8/27/2022 |
1.0.2208.8 | 1,435 | 8/24/2022 |
1.0.2208.7 | 1,121 | 8/24/2022 |
1.0.2208.6 | 690 | 8/23/2022 |
1.0.2208.5 | 922 | 8/23/2022 |
1.0.2208.4 | 1,208 | 8/23/2022 |
1.0.2208.3 | 663 | 8/22/2022 |
1.0.2208.2 | 400 | 8/22/2022 |
1.0.2208.1 | 401 | 8/19/2022 |