Japanino ArduinoISPで ATtiny13 で アセンブラ (38) (3/8)

AVRのアセンブラを少し勉強がてら解析。

Z80,8086,6502,6809等は知っているが、RISC系はちょっと初めてだ。
ニーモニックはZ80と同じLD,STがあり、8086のMOVもある。
基本の命令群
(1) データ転送命令
(2) 分岐命令
(3) ビット命令
(4) 算術命令

(1)はLD,ST,MOVをメインに、OUT,IN,PUSH,POP系を揃えてある。基本中の基本なのでLD,STの2文字からの派生。

(2)はCP,CALL,RET,JMPはメインに、ブランチ命令が4文字。BRxxとなっている。変わったところで次の命令をスキップする命令があり、それも4文字。SBxxとなっている。何が変わっているかというと、Z80はCPでフラグビットを立てて、ブランチ命令で指定アドレスにジャンプする組み合わせだったのが、スキップ命令では次の命令がジャンプ命令でほぼ同じ働きをし、次の命令を算術命令等にすれば、特別処理を1ステップ実行できる自由度がある。

まずニーモニックを覚えるのに(1)(2)のLD,ST,MOV,CP等の短いぱっとみて推測できる基本の「データ転送」命令を覚えてから、(2)の4文字で統一されているブランチとスキップの「分岐」命令を覚え、それらに含まれない省略形が覚えずらい命令は(3)(4)の「ビット」命令か「算術」命令と判断する、という流れか。

少ない命令と短い文字数で、オベランドを長くするというアプローチもあるが、RISCはこんな感じかな。
命令に修飾するアドレッシングモードで多彩にしたのは68系だが。
トータルの命令長を短くしてフェッチを少なくするのと、パイプラインに突っ込んでもキャンセル時に無駄にならないし、沢山突っ込める。マルチコアでCPUコアレベルで分散処理するならなおさら短い方が有利だからな。

人間が習得して、コンパイラを緻密に作れるようにマシン語レベルで読みやすい事は、GNU-gccでサポートされるためにも重要だ。集合知で切磋琢磨されないと、中規模のメーカーがいくら頑張ってもバグはなくならないし。

[PR]
by k1segawa | 2017-03-09 00:25 | arduino, AVR | Comments(0)
<< ポケコン PC-G850Vで電... J:COM LG Wine S... >>