ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:yasu182 アセンブラ、ビデオモード al 13h でマウスのポインタを表示
困り度:
  • 困っています
mov ah, 0
mov al, 13h
int 10h

のモードでマウスのポインタを表示することは可能でしょうか?

以下のコードを書いてみまして、ビデオモードを設定しない場合は
Alt + Enter でフルスクリーンにすればポインタが表示されます。

環境は masm32、interrupt のリストはこちらです ↓

http://www.ctyme.com/intr/int.htm

----------------------------------

.model small
.stack 100h
.data

.code
start:
mov ax, @data
mov ds, ax

mov ah, 0 ; set video mode
mov al, 13h
int 10h

; mov ax, 0 ; reset
; int 33h

; mov ax, 20h
; int 33h

mov ax, 1 ; show mouse pointer
int 33h

mov ah, 1 ; wait for key
int 21h

mov ah, 0 ; restore video mode
mov al, 3h
int 10h

mov ax, 4c00h ; exit
int 21h
end start
質問投稿日時:08/03/30 18:30
質問番号:3907812
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:ralf124c お待たせしております。
以下のソースはFASSTというヨーロッパ製のアセンブラ処理系用に書き直して確認しました(ご質問のソースと同じものです)。
------------------------------------------------ここから
org $100

mov ax,$0013
int $10

mov ax,$0001
int $33

mov ah,$01
int $21

mov ax,$0003
int $10

mov ah,$4c
int $21
-------------------------------------------------ここまで
 アセンブルでき、実行ファイル(COMファイル)も生成され、英語モード(WinXPならUSコマンド<−>JPコマンド)では実行するとちゃんと大きなカーソルが表示されます。
 ただ、日本語モードではINT10の割り込みがフック(呼び出し先のアドレスが書き換えられる)されるているため日本語モードでは動作しないです。
 モードの切り替えもプログラムでできたと記憶していますが(CHEVコマンドを逆アセンブルしてLSI-C試食版でその部分を作り直した記憶があります)当時のソースが見当たらず申し訳ありません。
 資料の入手に関しては単純に年のせいです。リアルタイムにかかわってきた上に貧乏性で捨てられないためです。
 いま、オンラインで手に入る資料としては参考URLの「OADGテクニカル・リファレンス」が一番ではないかと思います。SOFTBANKからも「DOS/Vテクニカルリファレンスマニュアル」(1993)という本がDOS/V時代の終盤に出版されて古本屋でたまに見かけます。
 DOSには非公開の機能が多くそれについて書かれたものは上記の本以外で網羅したものは少なくほとんど洋書になってしまい現在入手は不可能かと思います。
 あと、Simtelという有名なDOS時代のオンラインソフトサイト(ftp.simtel.net)に当時の蓄積がかなり残ってます(消えたものもあります)。
 BIOSやシステムコール、割り込みを制するとDOSが見えてきます。割り込みベクターテーブル、ソフト割り込み、ハード割り込み、タイマ割り込み、なんかの言葉を調べていじってみると面白い発見があるかと思います。
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:08/04/04 11:55
回答番号:No.2
参考URL: http://www.oadg.or.jp/techref/download.cgi
この回答への補足あらためて質問を投稿しました
いろいろなアドバイスありがとうございました ^^
この回答へのお礼回答ありがとうございます。
英語モードで試してポインタの表示を確認できました。
何時間か調べてみたのですが、こんな落とし穴があったんですね 
そういえばデバッガの code view を使ってみた時も
やはり日本語環境で文字化けしたのを覚えてます。
勉強になりました

参考資料もとても詳しいですね ありがとうございます

よろしければもう一つだけお伺いしたいのですが、
x dw 20
のように宣言した後、
x の値、20 を表示するには どうすれば良いのでしょうか?
Java で言う System.out.println(x); をしたいのですが...
これが出来ると offset x など調べるのに便利だと思いまして。

回答

 

回答者:ralf124c 懐かしいです。
いまどきBIOSコールを使われる方がいらっしゃるとは驚きです。
いま手元に当時の資料が無いのであとで自宅で調べてみますが、たしかでかいカーソルが表示されたような記憶があります。
ただ、ビデオモードやアセンブラのコードが英語(オリジナル)環境が前提になってますので、DOS/Vだと終了時に元の画面に戻らない気がします。仮想VRAMを事前に取得してうんぬんだったかと・・・。
ちょっと、家の資料をひっくり返して見ますのでお待ちください。
追伸:
 レジスタを0クリアするときは「MOV」より「XOR」を使うのが定番です。
 例: xor al,al
 ハンドアセンブルしてみるとニーモニック長がぜんぜん違うのがわかると思います。
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:08/04/02 12:30
回答番号:No.1
この回答へのお礼回答ありがとうございます
プログラミング言語の先祖ってどんなものだろう、と思いまして ^^
オンラインで資料を探してもあまり多くないですね
ユーザーが少ないので仕方ないと思いますが。

ralf124c さんはどこで資料を手に入れたのでしょうか?
また、Intel のドキュメンテーションを探そうと思ったのですが
みつけることが出来ませんでした。
どこかに役に立つものは存在するのでしょうか??
 
最新から表示回答順に表示良回答のみ表示