VCでのアセンブラについて – プログラミング – Home

VCでのアセンブラについて
 
通知
すべてクリア

VCでのアセンブラについて


むせん
 むせん
(@むせん)
ゲスト
結合: 23年前
投稿: 33
Topic starter  

アセンブラコードをVCに取り入れるのは、_asmを使えばできるのですが、JMP0000:0600という
コードがエラーになってしまいます。
ラベルつきのジャンプはできるのですが、直接メモリのアドレスにジャンプすることは可能なの
でしょうか?
よろしくお願いします。

環境 VC++6.0 Win98SE 


引用解決済
トピックタグ
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

うろ覚えですが、VC のインラインアッセンブラーの元になったと思われる MASM は
インテルのマクロアッセンブラーに準拠しているのでジャンプはラベルにしか出来
ないかと思います

それに、Win32 でしかも 32bit コードしかはけない(生成しない)VC++6.0 で
セグメント間ジャンプする意図は何でしょうか?


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

jmp 即値
はMASM 6(6.00AD for NEC PC-9800series)でも無効でした。
というわけで,
mov eax, 即値
jmp eax
なら受け付けてくれます。ただし……。

0000:00000600
なんてアドレスへのジャンプ,
ヌルセグメントアクセスに特権違反でまず止まりますね。
即値へのjmp命令なんてWindowsのユーザープログラムじゃ絶対使わないですよ。


返信引用
むせん
 むせん
(@むせん)
ゲスト
結合: 23年前
投稿: 33
Topic starter  

島さん、YuOさん、ご回答ありがとうございます。
直接アドレスにジャンプするのでなく、レジスタを介してなら一応エラーはなくなりました。
ただおっしゃるとおりWindowsでは不正な処理って言われました。
DOSではないのですが、正しく動いていないようです。
今、フロッピーからHDDのブートセクタの情報を読んで、それをメモリにいれてHDDをブートさ
せるプログラムを作っているのですが、なかなかうまくいかない状況です。
要するにフロッピーからHDDをブートさせるってものです。
そもそも根本的に無理のかもしれないって思い始めましてきました。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

インターフェース7月号にlinuxを利用したFDブートの方法が載っていました。
参考になれば幸いです。
ソースは、CQ出版のHPからダウンロードできます。


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

DEBUG などが手に入って、使い方も判るのなら身近なプログラムを書いて

動作試験をすることは不可能ではないかもしれません

(DEBUG なら COM (リロケーションが必要でない)実行形式はファイルに
保存することも読み込むことも可能だったと思う)


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

>インターフェース7月号にlinuxを利用したFDブートの方法が載っていました。

続き

デバッグを行う場合には、x86シミュレーター(Bochs)の説明もあり、デバッガも利用
できるようです。
x86シミュレーター(Bochs)は、pC/ATの環境をシミュレートするフリーのソフト
でデバッグするにはとっても便利ではないかと・・・


返信引用
むせん
 むせん
(@むせん)
ゲスト
結合: 23年前
投稿: 33
Topic starter  

アイススケーターさん、島さん、アドバイスありがとうございます。
LINUXは扱ったことないんですが、ソースを見てみてみます。
何か参考になればなっと思ってます。
島さんがおっしゃってたDEBUGは何なのでしょうか?
DOSコマンドのDEBUGではないような気がするのですが・・・。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

むせんさんへ

フロッピーブートの内容は、LINUXとは関係なくブートする(自作のプログラムをロ
ード)までのことを記述してあります。その後で、LINUXのシステムブートの記述が
ありますので、その部分をむせんさんの作りたい部分へ改造すればOKではないかと思い
ます。


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

DEBUG とは MSDOS や PCDOS に付属していた DEBUG.COM/.EXE? のことです
Ver. 5.0 以降には標準では付属していないと思います

MSDOS で動作するプログラムですから当然 16bit アプリケーションです


返信引用
むせん
 むせん
(@むせん)
ゲスト
結合: 23年前
投稿: 33
Topic starter  

島さん、アイススケーターさん、アドバイスありがとうございます。

アイススケーターさんへ
2002年の7月号ですよね?
ブートに関係するプログラムを参考にもう少し考えてみます。
島さんへ
やはりMSDOSにはいってあるDEBUGコマンドのことですね。
DEBUGコマンドでの手打ちではブートすることはできました。
それをなんとかCのプログラムで実現できたらって思っています。

ご親切なアドバイス、とても感謝しております。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました