015547 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

おっさんのAVRアセンブラ活用術

おっさんのAVRアセンブラ活用術

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Keyword Search

▼キーワード検索

Profile

ひろゆき1369

ひろゆき1369

Rakuten Card

Calendar

Favorite Blog

まだ登録されていません

Comments

コメントに書き込みはありません。

Freepage List

Headline News

Mar 18, 2011
XML

カテゴリ:カテゴリ未分類
昨日86の命令を忘れたとか言ってましたが、ちょっと調べたら思い出しました、ので書いてみます。しかし割り算が使えるとなんて簡単なのでしょうか、16進から10進への変換ですがそんなに難しく考えなくてもいいわけです、様は値を割って、余りが10進への変換値になるのです、以下のようにすごくステップ数が減ります。

16進[aaaa]は10進で[43690]になりますね
0xaaaa/0xa=1111.0
0x1111/0xa=1b4.9
0x1b4/0xa=2b.6
0x2b/0xa=4.3
0x4/0xa=0.4

上記のように余りの部分に一桁目から出てきてるのが判ります、それをコードにしたのが下記のものです、まーうろ覚えなので合ってるかどうか知りませんがあってると思いますよ多分。

MOV SI、004h ;割り算の回数16bitなので5回(16bitでは65536迄なので5桁分0回目も処理が有るので4)
MOV DX,00000h ;DX:AXの32bitに割る数を入れる
MOV AX,0????h ;????割る数値
MOV BX,00Ah ;答えが16bitになるのでオペランドを16bitレジスタにする(10で割る)
loop:
CMP AX,0Ah ;割る数が10以下か
JB skip ;10以下なら終了
DIV BX ;余りがDX 商がAXに入る
MOV byte ptr [桁万]+SI,DL ;値が9以下なので8bitアクセス(メモリ桁万アドレス+CLの値だけ進めて書)
DEC SI ;SI-1
JNZ loop ;SIが0じゃない時ジャンプ
MOV byte ptr [桁万],DL ;値が9以下なので8bitアクセス
JMP endproc
skip:
MOV byte ptr [桁万]+SI,AL ;値が9以下なので8bitアクセス
endproc: ;終了

桁万: DB 00h ;+0
桁千: DB 00h ;+1
桁百: DB 00h ;+2
桁十: DB 00h ;+3
桁壱: DB 00h ;+4

で、昨日言ってた新たなる問題と言うのは、タイマ割り込み、こいつ正確にカウントさせるには自分自身のクロック周波数も重要なのですが、何が鬱陶しいって分周比率とかが10の倍数でなくて2の倍数なのよね、まー当たり前なんですが切りのいい数値にするためには色々試行錯誤が居るのですが、それをやったにもかかわらずに目的の数値にならないのですごく悩んだんですが、ハタ時が付いた、一命令1クロックの原則が敗れる時が有る!、そう色んなCPUでも鬼門の命令JMP・・・こいつを使うと3クロック消費しやがるのです、テストプログラムではずっとjpmでループ処理させていたのですが、実際には割り込み待ちの間にも色んな処理が入り、クロックカウントがすごくずれる・・・・これかなり厄介なことなんですよねー





お気に入りの記事を「いいね!」で応援しよう

Last updated  Mar 18, 2011 06:00:19 PM
コメント(0) | コメントを書く



© Rakuten Group, Inc.