|
カテゴリ:カテゴリ未分類
昨日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) | コメントを書く |