强烈建议先看Shy语言参数指南
加法 (add
)
-
adda <address> <address>
: 将两个地址中的值相加,结果存储在第一个地址中。addn <address> <number>
: 将一个地址中的值与一个数字相加,结果存储在该地址中。
-
减法 (
sub
)suba <address> <address>
: 将第一个地址中的值减去第二个地址中的值,结果存储在第一个地址中。subn <address> <number>
: 将一个地址中的值减去一个数字,结果存储在该地址中。
-
乘法 (
mul
)mula <address> <address>
: 将两个地址中的值相乘,结果存储在第一个地址中。muln <address> <number>
: 将一个地址中的值与一个数字相乘,结果存储在该地址中。
-
除法 (
div
)diva <address> <address>
: 将第一个地址中的值除以第二个地址中的值,结果存储在第一个地址中。divn <address> <number>
: 将一个地址中的值除以一个数字,结果存储在该地址中。
-
左移 (
ls
)lsa <address> <address>
: 将第一个地址中的值左移第二个地址中的值位,结果存储在第一个地址中。lsn <address> <number>
: 将一个地址中的值左移一定位数,结果存储在该地址中。
-
右移 (
rs
)rsa <address> <address>
: 将第一个地址中的值右移第二个地址中的值位,结果存储在第一个地址中。rsn <address> <number>
: 将一个地址中的值右移一定位数,结果存储在该地址中。
-
与运算 (
and
)anda <address> <address>
: 将两个地址中的值进行与运算,结果存储在第一个地址中。andn <address> <number>
: 将一个地址中的值与一个数字进行与运算,结果存储在该地址中。
-
或运算 (
or
)ora <address> <address>
: 将两个地址中的值进行或运算,结果存储在第一个地址中。orn <address> <number>
: 将一个地址中的值与一个数字进行或运算,结果存储在该地址中。
-
非运算 (
not
)nota <address>
: 对一个地址中的值进行非运算,结果存储在该地址中。notn <number>
:仅为了不破坏命令命名设置,无效命令
-
异或运算 (
xor
)xora <address> <address>
: 将两个地址中的值进行异或运算,结果存储在第一个地址中。xorn <address> <number>
: 将一个地址中的值与一个数字进行异或运算,结果存储在该地址中。
-
跳转 (
jmp
)jmpa <address>
: 如果ox
为1,跳转到指定地址所存标签处。然后将其设置为0。jmpn <label>
: 如果ox
为1,跳转到指定标签处继续运行。然后将其设置为0。
比较运算在Shy语言中用于比较两个值,并根据比较结果更新寄存器 ox
的值。这些比较结果常用于控制流命令(如条件跳转)中。
-
等于 (
equ
)equa <address> <address>
: 比较两个地址中的值是否相等。如果相等,ox
设置为1;否则,设置为0。equn <address> <number>
: 比较一个地址中的值是否等于一个数字。如果相等,ox
设置为1;否则,设置为0。
-
大于 (
big
)biga <address> <address>
: 比较第一个地址中的值是否大于第二个地址中的值。如果是,ox
设置为1;否则,设置为0。bign <address> <number>
: 比较一个地址中的值是否大于一个数字。如果是,ox
设置为1;否则,设置为0。
-
大于等于 (
bigeq
)bigequa <address> <address>
: 比较第一个地址中的值是否大于等于第二个地址中的值。如果是,ox
设置为1;否则,设置为0。bigequn <address> <number>
: 比较一个地址中的值是否大于等于一个数字。如果是,ox
设置为1;否则,设置为0。
-
小于 (
sma
)smaa <address> <address>
: 比较第一个地址中的值是否小于第二个地址中的值。如果是,ox
设置为1;否则,设置为0。sman <address> <number>
: 比较一个地址中的值是否小于一个数字。如果是,ox
设置为1;否则,设置为0。
-
小于等于 (
smaeq
)smaequa <address> <address>
: 比较第一个地址中的值是否小于等于第二个地址中的值。如果是,ox
设置为1;否则,设置为0。smaequn <address> <number>
: 比较一个地址中的值是否小于等于一个数字。如果是,ox
设置为1;否则,设置为0。
- 赋值 (
set
)seta <address> <address>
: 将第二个地址中的值赋给第一个地址。setn <address> <number>
: 将一个数字赋给指定地址中的值。
-
输入 (
in
)ina <address>
: 从标准输入读取值到指定地址。inn
: 此函数显然存在逻辑错误,不应在任何情况下被使用,只是为了不破坏命名规范而保留inaasc <address>
: 从标准输入按照ascii读取值到指定地址。innasc
: 此函数显然存在逻辑错误,不应在任何情况下被使用,只是为了不破坏命名规范而保留
-
输出 (
out
)outa <address>
: 输出指定地址中的值。outn <number>
: 直接输出一个数字。outaasc <address>
: 以ASCII字符形式输出地址中的值,仅当值在有效ASCII范围内。outnasc <number>
: 以ASCII字符形式直接输出数字,仅当数字在有效ASCII范围内。
这个引导提供了对Shy语言命令的全面概述,旨在帮助开发者更好地理解如何使用这些命令来编写程序。每个命令都被设计得非常直观,以便于开发者根据需求选择合适的操作。以下是一些额外的提示和最佳实践:
- 参数类型理解:正确区分
<address>
和<number>
参数类型至关重要。<address>
用于指代内存地址中的值,而<number>
直接用于操作数。此外,<label>
用于跳转命令,指向代码中的特定位置。 - 使用跳转命令:
jmpa
和jmpn
允许你根据条件执行程序中的跳转,这是实现循环和条件分支的基础。通过tmp
变量的设置,你可以控制程序的流程,使其更加灵活和强大。 - 位运算的应用:位运算命令(如
lsa
,rsa
,anda
,ora
,nota
,xora
)提供了处理二进制数据的强大能力。这些命令在处理低级数据操作时非常有用,比如加密、数据压缩、快速计算等。 - 输入/输出操作:
ina
和outa
是与用户交互的基本方式。特别地,outaasc
和outnasc
提供了一种直观的方式来输出字符数据,这对于创建用户友好的控制台应用尤为重要。