比特币脚本语言 - 第 1 篇

理解比特币脚本语言的运行

Script 是一种简单的脚本语言,也是比特币交易处理的核心。如果你曾经写过汇编代码,你会发现这篇文章非常容易理解——可能还很有趣——否则它可能是最具挑战性的之一。保持专注!

了解机器代码

比特币脚本是一个计算机程序,作为程序员的你肯定知道程序是什么。程序接收输入,执行一段时间,然后返回输出。编程语言是我们编写计算机能理解的程序的工具,因为大多数语言都带有将人类友好的代码映射到 CPU 操作(也称为 操作码)的 编译器

操作码

操作码包括内存操作、数学运算、循环、函数调用以及你在像 C 这样的过程式编程语言中找到的一切。它们构成了 CPU 的口语,即所谓的 机器代码。由于字节是计算机的首选语言,难怪操作码也是字节。因此,机器代码是一串表示将在 CPU 上执行的操作的字节。

考虑以下用高级编程语言如 C 编写的代码:

x = 0x23;
x += 0x4b;
x *= 0x1e;

现在假设你想在一个假想的小端 CPU 上编译并运行这段代码,该 CPU 具有一个 16 位内存单元(一个 寄存器)和以下操作码集:

操作码 编码 V
SET(V) ab V 16-bit
ADD(V) ac V 16-bit
MUL(V) ad V 16-bit

操作码解释:

  • SET 将寄存器加载为值 V。
  • ADD 将 V 加到寄存器中。
  • MUL 将寄存器乘以 V。

这种 CPU 的编译器会生成以下 9 个字节的机器代码:

ab 23 00 ac 4b 00 ad 1e 00

它的解释如下:

  1. 将寄存器加载为值 23
  2. 4b 加到寄存器中,现在是 23 + 4b = 6e
  3. 将寄存器乘以 1e,得到 6e * 1e = ce4

寄存器保存最终结果,即 ce4

栈内存

大多数时候,我们需要用 变量 来跟踪复杂的程序状态。在 C 中,取决于变量是静态分配还是用 malloc 分配,它们存储在不同的内存布局中。虽然 malloc 分配的数据像...

剩余50%的内容订阅专栏后可查看

点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论