プログラミング > アイデア > スタックマシン

スタックマシン



  • pop : 直後を値とみなしスタックに入れる
  • push : スタックから取り出して捨てる
  • load : スタックから取り出した値を変数アドレスとみなし変数の値をスタックに入れる
  • store : スタックから2つ値を取り出し、2番目の値を変数アドレスとみなし最初の値を変数に格納する
  • dup : スタック末尾の値をコピーしてスタックに入れる
  • swap : スタック末尾の値と末尾から2番目の値を入れ替える

  • call : 直後をコードアドレスとみなしプログラムポインタをプログラムスタックに積みコードアドレスにプログラムポインタを移動する
  • return : プログラムスタックから取り出した値にプログラムポインタを移動する
  • goto : 直後をコードアドレスとみなしプログラムポインタを移動する

  • add : スタックから2つ値を取り出しその和をスタックに入れる (末尾から2番目+末尾)
  • sub : 〃 差 (末尾から2番目-末尾)
  • mul : 〃 積
  • div : 〃 商
  • mod : 〃 余り
  • inc : スタックの末尾の値を1だけインクリメントする
  • dec : スタックの末尾の値を1だけデクリメントする
  • abs : スタックから1つ値を取り出して絶対値をスタックに入れる
  • sgn : スタックから1つ値を取り出して正なら1、ゼロなら0、負なら-1をスタックに入れる

  • and : スタックから2つ値を取り出しその論理積をスタックに入れる
  • or : 〃 論理和
  • xor : 〃 排他論理和
  • not : スタックから1つ値を取り出しビット反転してスタックに入れる
  • srl : スタックから2つ値を取り出し論理右シフトしてスタックに入れる
  • sll : 〃 論理左シフト
  • sra : 〃 算術右シフト
  • sla : 〃 算術左シフト

  • jze : 直後をコードアドレスとみなしスタックの末尾の値がゼロならコードアドレスにプログラムポインタを移動する
  • jnz : 〃 ゼロ以外なら
  • jlt : 直後をコードアドレスとみなし、スタック末尾から2つの値を比較し末尾から2番目が末尾より小さければプログラムポインタを移動する
  • jle : 〃 ゼロ以下ならば
  • jgt : 〃 大きければ
  • jge : 〃 ゼロ以上ならば
最終更新:2015年03月10日 06:46