#概要
vistaでquartusやってみた。
アセンブラ作ってみた。
#参考にしたページ
#アセンブラ仕様
ニーモニック | 意味 | stackの状態 | code |
---|---|---|---|
% | stack-1, stackの剰余を求める。 | 1個減る | f00 |
+ | stack-1, stackの加算を求める。 | 1個減る | f000 |
/ | stack-1, stackの除算を求める。 | 1個減る | f00 |
* | stack-1, stackの乗算を求める。 | 1個減る | f002 |
- | stack-1, stackの減算を求める。 | 1個減る | f001 |
= | stack-1, stackの等しいを求める。 | 1個減る | f00a |
> | stack-1, stackの大を求める。 | 1個減る | f00e |
< | stack-1, stackの小を求める。 | 1個減る | f00f |
push 1 | stackに整数1を積む。 | 1個増える | 1001 |
set i | 変数iにstackを入れる。 | 1個減る | 300i |
get i | stackに、変数iの値を入れる。 | 1個増える | 200i |
out | stackを数値で印字する。 | 1個減る | e000 |
jz i | stackが真ならiへ飛ぶ。 | 1個減る | 500i |
jnz i | stackが偽ならiへ飛ぶ。 | 1個減る | 600i |
jmp i | 無条件でiへ飛ぶ。 | 変化無し | 400i |
#ソース
push 'h'
out
push 'e'
out
push 'l'
out
push 'l'
out
push 'o'
out
push ' '
out
push 'w'
out
push 'o'
out
push 'r'
out
push 'l'
out
push 'd'
out
push '!'
out
loop:
jmp loop
#結果
mem[12'h000]=16'h1068 ; // push 'h'
mem[12'h001]=16'he000 ; // out
mem[12'h002]=16'h1065 ; // push 'e'
mem[12'h003]=16'he000 ; // out
mem[12'h004]=16'h106c ; // push 'l'
mem[12'h005]=16'he000 ; // out
mem[12'h006]=16'h106c ; // push 'l'
mem[12'h007]=16'he000 ; // out
mem[12'h008]=16'h106f ; // push 'o'
mem[12'h009]=16'he000 ; // out
mem[12'h00a]=16'h1NaN ; // push ' '
mem[12'h00b]=16'he000 ; // out
mem[12'h00c]=16'h1077 ; // push 'w'
mem[12'h00d]=16'he000 ; // out
mem[12'h00e]=16'h106f ; // push 'o'
mem[12'h00f]=16'he000 ; // out
mem[12'h010]=16'h1072 ; // push 'r'
mem[12'h011]=16'he000 ; // out
mem[12'h012]=16'h106c ; // push 'l'
mem[12'h013]=16'he000 ; // out
mem[12'h014]=16'h1064 ; // push 'd'
mem[12'h015]=16'he000 ; // out
mem[12'h016]=16'h1021 ; // push '!'
mem[12'h017]=16'he000 ; // out
mem[12'h018]=16'h4018 ; //loop: jmp loop
#成果物
#実機実行結果
以上。