vistaでquartus その30


概要

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

成果物

実機実行結果

以上。