Skip to content

Latest commit

 

History

History
111 lines (77 loc) · 6.75 KB

CommandGuide.md

File metadata and controls

111 lines (77 loc) · 6.75 KB

Shy语言命令指南

强烈建议先看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>用于跳转命令,指向代码中的特定位置。
  • 使用跳转命令jmpajmpn允许你根据条件执行程序中的跳转,这是实现循环和条件分支的基础。通过 tmp变量的设置,你可以控制程序的流程,使其更加灵活和强大。
  • 位运算的应用:位运算命令(如 lsa, rsa, anda, ora, nota, xora)提供了处理二进制数据的强大能力。这些命令在处理低级数据操作时非常有用,比如加密、数据压缩、快速计算等。
  • 输入/输出操作inaouta是与用户交互的基本方式。特别地,outaascoutnasc提供了一种直观的方式来输出字符数据,这对于创建用户友好的控制台应用尤为重要。