試行錯誤してみる

		; 手続き呼び出し
		CALL	BX

とりあえず、ここが怪しい... と思われる。
試しに、

		; 手続き呼び出し
		CALL	puts

としてみる。
これだと、相対CALLだけど、これでも動かなければ、原因は別にあるはず。
結果 → (予想通り)動いた


じゃ、次に、

		MOV		BX, puts
		MOV		AX, BX
		CALL	puthex
		CALL	putcrlf
		CALL	BX

ちょっと、無駄な事をやっている感じだけど、
とりあえず、レジスタの内容をチェックしたいので、こんな形になった。
puthexは、AXレジスタの内容を16進表記で出力するサブルーチン。
MOV AX, puts として、CALL AX とすれば、MOV AX, BX が不要になるんだけど、
オフセット値をBXレジスタに設定するのは、他のコマンドと同じにしたいので、
BXレジスタにこだわってみた。
もしかしたら、BXレジスタを使っているので、ダメなのかもしれないし。
結果 → 落ちた!!
う〜ん。
これまた、QEMUでは、イメージ通りに動いているんだけどなぁ...


じゃ、更に、

		MOV		BX, puts
		MOV		AX, BX
		CALL	puthex
		CALL	putcrlf
		CALL	AX

レジスタとしてAXレジスタを使ってみる。
これでダメなら、CALL レジスタ の使い方を間違っているかも?
当然だが... QEMUでは、問題なく動いている。
さて... 実機ではどうかな?
結果 → 落ちた!!
まぢですか!!
あれれ?
やっぱり、CALL レジスタ の使い方を間違っているのかなぁ?
それにしても、QEMUで動いちゃうってのも、どうなのよ???


何か、根本的に間違っている気がしてきたなぁ...
落ち着いて、もう少し、調査してみよう。