2018.6.24
前へ
次へ
ホームページトップへ戻る


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第42回]



●EX (SP),HL問題の解決

前回の EX (SP),HL を8086の命令ではどう書けばよいのか?という問題の答えはおわかりになりましたでしょうか。
私の場合、多分このように書けばよいのだろうな、と思って取りあえずそれを確認するために簡単なテストプログラムを書きました。

;;;xchg test
;18/6/20
        ORG=0100
        MOV SI,1234
        MOV SP,0200
        MOV AX,5678
        PUSH AX
        MOV BX,SP
        XCHG SI,[BX]
        NOP
;end

それを8086アセンブラにかけてみて、エラーが出なければ第一の関門は突破です。

ASM86というのは自作の8086アセンブラです。
ASM86.COMです。
拡張子がCOMのファイルはWindows7では実行できません。
実は実行できる裏技があります(「マイコン独立大作戦」[総合第30回])。
上の画面はWindows98SEでの実行画面です。
ことほど左様にWindows98SEは便利でなかなか手放せません。
いまだに現役です。
それはともかく8086アセンブラは無事通りました。
アセンブルリストをTYPEコマンドで表示させました。

さてそれをどうするかといいますと。
昔のWindowsには便利なツールがありました。
DEBUGコマンドです。

COMプログラムのデバッグテストができます!
もちろん8086プログラムに限ります。
G=100 10E
はアドレス100から実行を開始して、アドレス10Eでブレークせよ、というコマンドです。
上のプログラムはAXに5678を入れてそれをスタックにPUSHしたあと、XCHG SI,[BX]でスタックトップとSIの値の交換をするものです。
ブレークした結果、SIには5678が入っていることが確認できました。
スタックトップのほうはどうでしょうか?

D 1F0
は1F0からの128バイトをメモリダンプ表示させるコマンドです。
最初にSP=0200に設定しましたから、PUSH AXによってAXの値は01FF、01FEに入れられたあと、XCHG SI,[BX]によって、SIの値と置き換えられたことが確認できました。
0200にも1234がありますが、たまたま前に行った作業の痕跡です。
うむむ。
紛らわしいですねえ。
実行前にメモリ内容を確認しておくべきでした。

もう一度実行して確認してみました。

今度は0200に1234はありません。

ということで、EX (SP),HLの代わりには
MOV BX,SP
XCHG SI,[BX]
のようにすればよい、ということが確認できました。
これにて一件落着です。
[2018.7.6追記]
この考えには問題がありました。
[第50回]を参照願います。
[追記ここまで]

前回はもうひとつの問題がありました。
本日も時間がありませんので、それについては次回に書くことにいたします。

16ビットマイコンボードの製作[第42回]
2018.6.24upload
2018.7.6追記

前へ
次へ
ホームページトップへ戻る