Skip to content

Commit 9a28f41

Browse files
authored
Update 01.Understand.UdonAsm.md
1 parent 2ff4a25 commit 9a28f41

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

01.Understand.UdonAsm.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@
1010
- `JUMP_IF_FALSE` 如果结果为 `FALSE` 则跳转,并弹出1次栈。
1111
- `JMP` 无条件跳转,同时承载了调用函数的作用。
1212
- `EXTERN` 调用外部函数,并弹出`参数个数`的栈。
13-
- `ANNOTATION` 调用外部函数,并弹出`参数个数`的栈。 *[2]*
13+
- `ANNOTATION` 调用外部函数,并弹出`参数个数`的栈。(注意:尽管官方文档中声称这是一个什么都不做的长 NOP 但是定义与 EXTERN 类似,也许只是复制粘贴了 EXTERN 的声明) *[2]*
1414
- `JUMP_INDIRECT` 无条件跳转至取消引用的地址,相当于x86_64下的`jmp [eax]`*[1]*
1515
- `COPY` 将堆栈中的`栈顶中第二个值`赋值给`堆栈顶部的值`,并弹出2次栈。
1616

1717
`[1]` 未证实的内容,仅通过猜测得出的结论。
1818

1919
`[2]` 这条指令一般不会出现在正常编译后的 UdonSharp 汇编中。
2020

21+
另可参阅:https://creators.vrchat.com/worlds/udon/vm-and-assembly/#udon-opcodes
22+
2123
# PUSH 和与 PUSH 有关的指令
2224
```
2325
以下所有出现的汇编都由本组织下的UdonSharpDisassmebler生成。
@@ -95,6 +97,8 @@
9597

9698
### 函数名包含的信息
9799

100+
除了本文以外,官方文档对此做出了一些额外解释:https://creators.vrchat.com/worlds/udon/vm-and-assembly/#externs-reference
101+
98102
我们现在有这样一串文本 `UnityEngineGameObject.__get_activeSelf__SystemBoolean``.` 是一个分隔符,在分隔符的左边是`命名空间+类名的组合`,在右边是`函数名+参数个数+返回值类型`
99103

100104
由于左边没有任何多余的可解读信息,我们从右边开始,一个完整的调用信息有以下规则:
@@ -172,7 +176,8 @@ bool __intnl_SystemBoolean_43 = __39__intnlparam > __const_SystemInt32_1;
172176
todo...
173177

174178
# 结语
175-
我认为这些东西不难理解,重点在于你是否具有一定编程基础,因为UdonSharp的设计过于简单,我不会说解读这样的反汇编很难,因为它只是一串一串对于人类来说非常可读的指令。
179+
180+
因为UdonSharp的设计比较简单,所以我认为这些东西不难理解。
176181

177182
我在这里再抛出几个问题留给你思考:
178183

0 commit comments

Comments
 (0)