アセンブリのファイル操作でのエラーについての質問

このQ&Aのポイント
  • MSDOSプロンプトの「DEBUG」コマンドを使用してアセンブリのファイル操作を行っている際に、共有違反のエラーメッセージが表示されました。
  • エラーコード5がAXに戻されたため、DEBUGコマンドが強制的にエラーを起こしたのか、それとも質問者がエラーを書き間違えたのかが不明です。
  • 質問者はアセンブルしようとしていたソースコードが記載されています。
回答を見る
  • ベストアンサー

アセンブリのファイル操作のエラーに関する質問

使っている開発環境は、MSDOSプロンプトの、「DEBUG」コマンドなんですが以下のプログラムを実行した所 「共有違反です。読み取り中のドライブ:C  中止(A) 再試行(R) 失敗(F)?」 とエラーメッセージが出ました 私は、失敗を選んだのですが、AXに、エラーコードの「5」 が戻されていました、 これは、MSDOSのDEBUGコマンドが強制的にエラーを起したのでしょうか、それとも私が書き間違えたエラーなのでしょうか ↓が、アセンブル(コンパイル)しようとしたソースです (ソースをかくまえの、コマンドによるメモリへのストアも含む) E 200"C:\testtest0" A 100 MOV AH,3C MOV DX,200 MOV CX,0 INT 21 この後に「G]コマンドで実行

  • tukai
  • お礼率57% (102/177)

質問者が選んだベストアンサー

  • ベストアンサー
  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.4

DEBUGではなく、SYMDEBでの結果ですが、たぶん、DEBUGでも同じだと思います。 間違っているのはここ E 200"C:\testtest0" ではなく E 200"C:\testtest" 0 とステートメントを入力しなくてはいけません。 ファイルパスはASCIZ文字列(文字列の最後に00Hを付加します)で指定する必要があります。 このこと自体はわかっておられるようですが、入力の仕方が間違っています。 手元のNECのMS-DOS6.2ではこれでファイルが作成されました(A:起動なのでパスは違います)。 ところで、DEBUG(SYMDEBも)はもともとPureなDOS上でのシングルタスクを想定したコマンドですから、DOSプロンプトや゜コマンドプロンプトだと動作が異なる可能性があります、95/98のCommand Prompt Onlyで起動した環境でやった方がいいでしょう。

tukai
質問者

お礼

質問に答えてくださり有難う御座いました 今まで間違えた方で覚えていた為、かなり参考になりました

その他の回答 (3)

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.3

私自身、アセンブラがよく理解できていないかもしれませんが・・・ MOV dx,200 で、PATHが入力出来ます? MOV cx,0 で、「cx=0」ですよね。 「dx=200」に成っていませんか?

  • nagare
  • ベストアンサー率33% (280/831)
回答No.2

#1です 訂正 誤:ファイル作成の前にファイルのOPENをしてますか? ファイルOPEN不必要ですね(ごめんなさい)

  • nagare
  • ベストアンサー率33% (280/831)
回答No.1

http://www2.neweb.ne.jp/wd/wonder/codea.htmによりますと、 成功・失敗はCFみたいです CF=0 成功 CF=1 エラー AXにはファイルハンドルが入ります ファイル作成の前にファイルのOPENをしてますか?

参考URL:
http://www2.neweb.ne.jp/wd/wonder/codea.htm

関連するQ&A

  • アセンブリ言語で。

    下のようなソースをアセンブルすると 6:error: parser: instruction expected という、エラーが出ます。 mov ah,2 mov dl,DATA int 21h mov ax,4c00h int 21h DATA byte 'A' 6行目に問題があるようなので下のように書き直したらきちんと動作しました。どうして、上のような記述ではうまくいかないのでしょうか?? mov ah,2 mov dl,'A' int 21h mov ax,4c00h int 21h 環境はwindowsXPでnasmとalinkを使っています。 nasmw test.asm -fobj alink test.obj -oEXEとしてアセンブルしました。 わかる方お願いいたします。

  • アセンブリ:FCのファイルオープンについて

    アセンブリ:FCのファイルオープンについて ファイルオープンのファンクションコールについて質問させてください。 うまく伝えられるか不安なので、いま陥っている現象を順番に書かせていただきます。 まずエディタで、 ---------------------------------- MOV AH , 3DH MOV AL , 00H MOV DX , offset FNAME INT 21H FNAME DB 'C:\xyz.txt',00H ---------------------------------- という簡易なプログラムを記述しました(擬似命令は省いています) これをアセンブルすると、 --------------------------------------- CS:0100 B43D MOV AH,3D CS:0102 B000 MOV AL,00 CS:0104 BA0901 MOV DX,0109 (*注) CS:0107 CD21 INT 21 CS:0109 43 INC BX ・ ・ --------------------------------  となるのですが、このとき AX=0003  CY となり、ファイルオープンに失敗してしまいます。 理由がまったくわからないので、デバックの直打ちで 0200 DB 'C:\xyz.txt' と格納してから、(*注)である命令を MOV DX,0200 に打ちかえれば、 AX=0005  NC となって無事にオープンできるみたいです。 なお、ファイルオープンに限らず、ファイル作成でも同じでした。 エディタでアセンブル( DX , 0109 ) だと失敗し、 デバッグ直打ち( DX , 0200 ) だと成功します。 これはいったい、どういう理由からなのでしょうか? 何冊か本を読んでみたのですが、書かれているのはコードの記述のみなので困っています。 わかる方がおられましたら、ご教授ください。 WINXP:MASM32で行っています。

  • アセンブラに関する質問

    ↓のソースをMASMでコンパイル&リンクして実行すると  入力まではできるのですが、入力した直後に   「このプログラムで無効な処理が発生したため、強制    終了されます。全てのプログラムを、終了してから    再起動してください」 と表示され、そのメッセージが表示されたウィンドウの下の方の「詳細」をクリックすると    「プログラムで一般保護エラーが発生しました     エラーが起きたアドレス 9A00:10000     サービスへの割り込み なし」     と表示されました     実行したのは↓にソースですが、何がいけなくて     このエラーが出たのでしょうか・・(OSはME) CODE SEGMENT ASSUME DS:CODE,CS:CODE,ES:CODE,SS:CODE ORG 100h START: mov ah,0Ah mov dx,offset BUFF int 21h mov ah,09h mov dx,offset BUFF2 int 21h BUFF db 54,87,5 dup(?) BUFF2 db 'testtest' '$' code ends end start

  • デバッグについて教えてください。

    デバッグについて教えてください。 3544:0000 B401 MOV AH,01 3544:0002 CD21 INT 21 3544:0004 B92F07 MOV CX,072F 以下うんぬん... とあるアセンブリをDOS窓のDEBUGにてトレースしたところ、 0000 → CS=3544 IP=0002 0002 → CS=00A7 IP=108A となり、セグメントレジスタとIPが変わってしまうのは、どういった理由からなのでしょうか? おそらく INT21H による割り込みのためだと思うのですが、いまひとつ釈然としません。 トレースコマンドの場合は、Gコマンドのように、このアセンブリに対して順番とおりに実行しないのでしょうか? 馬鹿げた質問かもしれませんが、よろしくお願いします。

  • レジスタが変化しない アセンブリ

    アセンブリ言語の勉強を始めた者なのですが レジスタの値が普通のMOV命令で変化しません。 何か初歩的なミスを犯しているのでしょうか、どなたかご教示願います。 環境はXPSP3,Core2DuoE8500に、コマンドプロンプトからDEBUGコマンドを使って学習しています。 0100:MOV ax,FF 0103:(空白) -G 100 103 として実行してみるのですがAXレジスタ内の値が0000のまま変化しないのです。 昨日やったときは普通に出来たような気がしたのですが、、 命令を MOV ax,0222 MOV bx,0222 としたときのスクリーンショットを撮ってみましたので付けておきました。 何かきっと初歩的なミスだと思うのですが、どなたかお願いいたします・・。

  • NASM(独習アセンブラのサンプルソース)について

    独習アセンブラ初版5刷のサンプルソース(リスト6.7、102p)での疑問です 下の方にあるコメントアウトしているputc関数って何のためにあるんですか? どこからも呼び出してないのでいらないと思うのですが… アセンブラはNASMです ※本に書かれてるソースはコメントアウトしてません、コメントアウトしてもアセンブルできました bits 16 org 100h mov dx,sfile mov al,0 mov ah,3dh int 21h jc endquit mov [ifh],ax mov dx,dfile mov cx,0 mov ah,3ch int 21h jc endquit mov [ofh],ax readb: mov bx,[ifh] mov dx,buf mov cx,1 mov ah,3fh int 21h test cx,ax jz endquit jc endquit mov bx,[ofh] mov dx,buf mov cx,1 mov ah,40h int 21h jmp readb endquit: mov bx,[ifh] mov ah,3eh int 21h mov bx,[ofh] mov ah,3eh int 21h mov ax,4c00h int 21h ;putc: ; push ax ; mov ah,2h ; int 21h ; pop ax ; ret ifh dw 0 ofh dw 0 sfile db "srcfile.txt",0 dfile db "destfile.txt",0 buf resb 2 私が思うにリスト6.6(100p)のreadbラベルのところでこれを呼び出してるのでソースを流用して消し忘れてるだけなんでしょうか?

  • アセンブリ言語

    アセンブリ言語で,できるかぎり単純な電卓をつくるには,どう記述すればよいのでしょうか。 コマンドプロンプトの以下のコマンドで実行します。 DEBUG -A (ここに記述) -G お願いします!

  • コマンドプロンプトのデバッガ

    以下のように,コマンドプロンプトのDEBUGコマンドでアセンブリ言語を書いたのですが,COMファイルとして保存する方法(http://wisdom.sakura.ne.jp/programming/asm/assembly29.html)が分かりません。お願いします! debug a 100 mov ah,a mov dx,9100 mov byte ptr[9100],20 int 21 ret a 200 sub bl,30 ret a 300 mov bl,byte ptr[9103] cmp bl,2b je 318 cmp bl,2d je 31a cmp bl,2a je 31a cmp bl,2f je 31a add al,dl ret a 400 mov ah,0 mov dl,a div dl mov byte ptr[9200],0d mov byte ptr[9201],0a add al,30 mov byte ptr[9202],al add ah,30 mov byte ptr[9203],ah mov byte ptr[9204],24 mov ah,9 mov dx,9200 int 21 ret a 9000 call 100 mov bl,byte ptr[9102] call 200 mov al,bl mov bl,byte ptr[9104] call 200 mov dl,bl call 300 call 400 mov ah,4c mov al,0 int 21 g =9000 9021

  • classファイル

    プログラムを書いて、コマンドプロンプト上でコンパイルとしたところエラーが表示されたのですが、.javaとかかれたソースファイルのあるフォルダに.classというファイルが出来るのはなぜですか?エラーが発生したのでコンパイルは失敗したのですが。お願いします。

    • ベストアンサー
    • Java
  • 実行ファイルと実行モジュールについて。

    実行ファイルは、例えばソースコードをコンパイルしたものを実行ファイルと呼び、実行モジュールは、例えば、ソースコードをアセンブル、 コンパイルインタープリタの複数のファイル群の事でしょうか?で、違いは、ファイルは 1つか複数の違いという事でしょうか?教えていただけないでしょうか?すみません。

専門家に質問してみよう