最初のレベルのタイトル
1. 命令構造"12345678") の場合、命令は 2 ワードを占有し、値は 2 番目のワードに格納されます。各ディレクティブの最初の単語は次の要素で構成されます。
最初のレベルのタイトル
2. 状態遷移
状態遷移関数は一般的な状態遷移単位を表し (すべての命令タイプの処理ロジックが含まれるため)、計算は通常、複数の順次実行される命令に分解されるため、次のものが必要です。
b. 実行されたコマンドが有効なコマンドであることを確認してください
副題
命令の実行前後の状態が一貫している場合、その状態の更新は次のロジックに従って実行する必要があります。
副題
図 1 に示すように、コマンドは次の要素で構成されます。
3. コマンド例
副題
3.1 平等の主張
< left_handle_op > = < right_handle_op >
等価性アサート命令は、次の構文で表現できます。
Note2:これにより、式の両辺が等しいことが保証されます。そうでない場合は、プログラムの実行が返されます。
除算と減算は、異なるオペランドの順序を使用して、それぞれ乗算と加算として表現できます。
図 4 に、等価性アサート命令のいくつかの例と、各命令の対応するフラグ値を示します。
説明する説明する
命令[fp+1] = 5:
◦ next_ap = ap => ap_update = 00 = 0
◦ next_pc = pc + instruction_size => pc_update = 000 = 0
◦ アサート命令の場合 => オペコード = 4
◦ op0 と op1 には add または mul がありません => res_logic(res) = 00 = 0
◦ 即時データが存在する => op1_src(op1) = 001 = 1
◦ 即値命令アドレス隣接 => off_op1 = 1
◦ 方程式の左辺 [fp + 1] => dst_reg(dst) = 1
◦ op0_reg/ off_op0 =>inital value(1/-1) //この命令ではこれらのフラグを使用しないため、デフォルト値を入力します
副題
3.2 条件付きジャンプと無条件ジャンプ
jmp 命令を使用すると、プログラム カウンタ pc の値を変更できます。
Cairo は、相対ジャンプ (オペランドは現在の PC に対する相対的なオフセットを表します) と絶対ジャンプ (それぞれキーワード rel と abs で表されます) をサポートしています。jmp 命令は、メモリユニットの値が 0 ではない場合など、条件付きである場合があり、 jmp命令。
# Unconditional jumps.
jmp abs
jmp rel
# Conditional jumps.
jmp rel
図 5 に、jmp 命令のいくつかの例と、各命令に対応するフラグ値を示します。
説明する説明する
命令 jmp rel [ap +1] + [fp - 7]:
◦ next_ap = ap => ap_update = b00 = 0
◦ next_pc = pc + res=> pc_update = b010 = 2
◦ res = op0 + op1 => res_logic(res) = b01 = 1
◦ op1: [fp - 7] => op1_src(op1) = b010 = 2
◦ op1: [fp - 7] => off_op1 = -7
◦ op0: [ap + 1] => op0_src(op0) = 0
◦ op0: [ap + 1] => off_op0 = 1
◦ dst_reg/ off_dst =>初期値(1/-1) ///この命令ではこれらのフラグを使用しないため、デフォルト値を入力します
副題
3.3 呼び出しと応答
call 命令と ret 命令を使用すると、関数スタックを実装できます。 call 命令は、プログラム カウンタ (pc) レジスタとフレーム ポインタ (fp) レジスタを更新します。プログラムカウンタの更新はjmp命令と同様です。 fp の以前の値は [ap] に書き込まれ、ret 命令で fp の値を呼び出し前の値にリセットできるようになります。同様に、返された pc (呼び出し命令に続く命令のアドレス) は [ に書き込まれます。 ap+1] を使用すると、ret 命令がジャンプして戻り、呼び出し命令に続いてコードの実行を継続できるようになります。 2 つのメモリ位置が書き込まれたため、ap は 2 進められ、fp は新しい ap に設定されます。
call ret
call rel
ret
図 6 に、call 命令と ret 命令のいくつかの例と、各命令の対応するフラグ値を示します。
説明する説明する
命令呼び出し abs [fp + 4]:
◦ next_ap = ap => ap_update = b00 = 0
◦ next_pc = res => pc_update = b001 = 1
◦ res = op1 => res_logic(res) = b00 = 0
◦ op1: [fp + 4] => op1_src(op1) = b010 = 2
◦ op1: [fp + 4] => off_op1 = 4
◦ op0_reg/ off_op0 =>◦ 呼び出し命令の場合 => オペコード = 0
◦ dst_reg/ off_dst =>初期値(0/0) ///この命令ではこれらのフラグを使用しないため、デフォルト値を入力します
副題
3.4 高度な AP< op >コマンド ap + =
図 7 に、高レベルの ap コマンドと各コマンドに対応するフラグを示します。
説明する説明する
命令 ap += 123:
◦ next_ap = ap + res => ap_update = b01 = 1
◦ next_pc = pc + instruction_size => pc_update = b000 = 0
◦ res = op1 => res_logic(res) = b00 = 0
◦ op1 = 123 => op1_src(op1) = b001 = 1
◦ op1 = 123 => off_op1 = 1
◦ op0_reg/ off_op0 =>◦ ap コマンドを進める場合 => opcode = 0
◦ dst_reg/ off_dst =>Sin7y は 2021 年に設立され、トップのブロックチェーン開発者で構成されています。私たちはプロジェクト インキュベーターであると同時にブロックチェーン テクノロジー研究チームでもあり、EVM、レイヤー 2、クロスチェーン、プライバシー コンピューティング、自律型決済ソリューションなどの最も重要で最先端のテクノロジーを研究しています。
私たちについて
Sin7y は 2021 年に設立され、トップのブロックチェーン開発者で構成されています。私たちはプロジェクト インキュベーターであると同時にブロックチェーン テクノロジー研究チームでもあり、EVM、レイヤー 2、クロスチェーン、プライバシー コンピューティング、自律型決済ソリューションなどの最も重要で最先端のテクノロジーを研究しています。
WeChat 公開アカウント: Sin7Y
GitHub | Twitter | Telegram | Medium| Mirror | HackMD | HackerNoon
