
堆栈机可用于多种现代编程语言。它们易于理解,同时非常有效。想尝试一个这样的动作吗?
可能所有人都听说过1C昵称抱怨他们的系统,因为1C语言不够低,无聊等。他们所有人都渴望使用“真正的”编程语言。因此,先生们,他们错了。在1C系统中,您可以在某些地方伸展程序员的大脑并享受低级技术。我建议您深入研究1C虚拟机,并了解其工作原理。它有自己的“汇编程序”,今天我们将在上面编写1C的工作代码。快来砍下,这将很有趣!
堆叠式虚拟机
动态编程语言正日益占领世界。从行列中的``诚实''本地语言来看,也许只剩下C(有加号也有无号)。这就是我们是否要成为工业主流。所有流行的语言都以“运行时环境”或“虚拟机”的形式存在一层,从而在铁的特定体系结构上提供代码执行。这些“虚拟机”的绝大部分都是堆叠在一起的,即 使用计算机世界中称为“堆栈”的结构来实现处理操作。
(Stack) "". (, ) - , . . .. . "LIFO" — last in/first out. ( ). — .
Java, Python, C# 1 — . , node.js — , , . 95% , . JIT , , ? :)
, , . , — , -, . , . , — , . Java — . , . , , Java JVM — . ( ) Dalvik. , , . — , . , , , ( ) , , .
1 . — 1, — , 1Script. , .
. 2014 , .
, = 1 + 1; ?
PushConst 1
PushConst 1
Add
LoadVar A
- 1 (2 ), Add.
Add
(2 ) . . LoadVar
, ( — ).
. , = 1+1+2 :
PushConst 1 ;
PushConst 1 ;
Add ; 2 (1 1), ,
PushConst 2 ;
Add ; 2 (2 2), ,
LoadVar A ; , (4) .
, , , : - - .
, , "-". "" .
- 1
, 1 - , , , . , , - - — . , 1 - . , , epf . v8unpack.
1. , .
epf. , chocolatey
choco install v8unpack --version 3.0.41 --source https://www.myget.org/F/onescript/api/v2
, chocolatey (, , ?) https://github.com/e8tools/v8unpack/releases/download/v.3.0.40/v8unpack.exe exe PATH, .
, 1, , .
v8unpack -P .epf content
content, 1 ( — : https://infostart.ru/public/250142/)
, "<--GUID>.0", "info" "text". "text" , , . content . "" " ". , .

, ? , content
v8unpack -P .epf content
GUID.0 , image, text — - . , , - , ? 1 - image. :

— 1. , . , ? , ! ? , !
?
, -, , , . .
-, , - 1 , . 1-, , . " 1" , . , , , 1. . , ?
. , , , .. . . , 1 . , , ( ) " ", " 1" — , .
, . , . - -, 1 . , .
: , ( , ), , , .
, ?
- 1, . - .
, v8unpack "" "image", .

, , , 1.
""
(). — . (OpCode), . , . . , , . ( ). , , — : .
? 1 128, , . .
""
. - , — , — . " ", . .. - , , / . , / . , .
. , , "". " = 2" 1 . . " - ".
""
1 ( ) . - ( ). , . . "", ( ) , .

-?
. — , — , . 2 1.
2. 0 .
2 2 :
LdConst 0
LdConst 0
Add 0
! : , - , Ld "Load". , .
LdConst , ( , 0 ). , . — .
, 2 ( — )
— . , , , Add 0. 2 1 ( ).
, "" .
, , .
, !
, "Hello World".
"" "" :

" " "" , .
, " "

, "" :
LdConst 0
ArgNum 1
CallLoc 0
End 0
"". , -

?
"" " " v8unpack . 1- . " " "". .
. .
= 8;
= + 2;
= - ;
: -, 8 2 "" . 0, — 1. , , . .
LdVar. , . , :
LineNum 1 ;
LdVar 0 ; 0 ()
LdConst 0 ; 0 ( 8)
Assign ; - , .
LineNum 2 ;
LdVar 1 ; 1 ()
LdVar 0 ; 0 ()
LdConst 1 ; 1 ( 2)
Add ; 2 , (+2)
Assign ; - , ( = (+2)).
LineNum 3 ;
LdVar 2 ; 2 ()
LdVar 1 ; 1 ()
LdVar 0 ; 0 ()
Sub; . 2 ,
Assign; = (-)
End;
, , , , . , LineNum? , , , . . , , " , " . , LineNum. , , , .
. -, , . ( ) . :
. "" . 0.
, LineNum. "" 1 .
LdConst 0; -
ArgNum 1;
CallLoc 0; 0.
, ArgNum. — . , . , .
, ( ), , — - . Assign, . 2 . . LdRet. , , . , Ret, . LdRet — . , . . 1Script "" .
, , . . , . Jmp. , Jmp . . , , 1. - — , .
, , 1 . , " " , — . = , " " . :
() = ("") . = 2
2 : . 1 . , , . , " " .
, . , . 2 — And Or . , , .
, "" , , , .. , .. . ( ). , , , .. , ).
2 : JmpTrue JmpFalse. ( ), , , . , JmpTrue 1 . .. , JmpTrue, , .. 1 (trollface) , 1Script JmpTrue .
? 0 1, 0 1
0: LdVar 0 ;
1: LdConst 0 ; 1
2: Cmp ; ( )
3: JmpFalse 6 ; 6,
4: IF ;
5: IF ;
6: … ;
— . — .
3 : "", "… " " … ". "" , .
"… " " ", , . , , . Gte (--) JmpFalse . , "".
" "
. — , Next()
Iter, Next , . , … , , 1 , , .
. , , :
()
.();
;
, "" 0, "" 1. , , "0", . , ? , :)
? , :
PutTmp ;
LdTmp ;
( 0)
LdLoc 0 ;
, , .
Iter ; -.
Assign ; Tmp
, :
5. Assign, 2 — . .
:
LdLoc 2 ; 0
LdTmp 0 ;
Assign; 0
LdLoc 2; 0
Next;
JmpFalse 26 ; - .
Next. , (0), , , , , . JmpFalse .
, JmpFalse 0
, . 0
, 0
— .
…
- . 19-23 . 25 — Jmp , 26 — .
27- 32-. 0
, - 2 . ,
, … , +3 , 0
. , , …
, 1Script :
0 :(LineNum 3)
1 :(PushLoc 0)
2 :(PushIterator 0)
3 :(LineNum 3)
4 :(IteratorNext 0)
5 :(JmpFalse 12)
6 :(LoadLoc 1)
7 :(LineNum 4)
8 :(PushLoc 1)
9 :(ArgNum 0)
10 :(ResolveMethodProc 0)
11 :(Jmp 3)
12 :(StopIterator 0)
13 :(PushConst 1)
14 :(Return 0)
15 37. , .. , . , 1Script 1. .
, , , . ? , , . , .
? , , , "" "".
- , 1 . BlckEnd Jmp . , BlckEnd — - . BlckEnd 0.
. "" BlckEnd, .
2;
.. "" — BlckEnd 0, "" — BlckEnd < >. , " " ,
, .. "" " ".
-
BeginTry, . .. . , , BlckEnd <> Jmp ;
:
()
;
;
;
0: BeginTry 4 ; Cmd
1: LineNum 6 ;
2:BlckEnd 1 ; 1
3:Jmp 6 ;
4:LineNum 6 ; :
5:EndTry 0 ; ( )
6:LineNum 7 ; :
7:End 0 ; (, )
8:End 0 ; (, )
9:End 0 ; (, )
. BeginTry , , ( ).
( ), BlckEnd ( 2-3). EndTry.
, , . .
? , ? , "" "". image -, , v8unpack epf.
, .
: . , . , (-) , ? , " " :
= .();
.()
(.);
;
, , " " "-()". 1 , 1 , !
. "" "" . , "" — . :
"". "". ? , "(())" "". - -. ? — !
(dmpas), , :)
Disclaimer
, , . , , 1 . , . "" . , . . , "" , .
1C是一个复杂的多层系统,对其进行研究非常有趣。而且,您越了解系统的工作原理,使用它的效率就越高。今天,我们检查了1C虚拟机的工作原理,并希望扩大了我们的技术视野。嗯,此外,我们还动手制作了一个玩具,因为与装配工一起玩非常有趣!
祝您创作成功!