• 締切済み

アセンブリ言語

Quantの回答

  • Quant
  • ベストアンサー率18% (23/122)
回答No.19

No.3に書いたコードはN0.6にも書いたように回答欄に直接書いたので、そのままでは動きません。アドレスも入っていないし、注釈に入れたように'0'などでエラーが出れば文字コードに変更しないと動きません。 '0'のようにシングルクォーテーションで括っているものは文字です。デバッガでは使えないようですから、文字コードを入れてください。文字コードはIMEツールバーの文字一覧で半角英数を選び各文字の上にマウスカーソルを持っていくとポップアップで表示されます。MS-DOSなのでシフトJISのコードを入れてください。 je 1などもデバッガでアドレスを確認して修正する必要があります。 これらはすべてクリアしていたものと思っていました。添付画像でその手順を読み取ってもらえていたものと勘違いしていました。 下のコードをdebugからここまでと書いてある前の行までコピーしDOS窓に貼り付けてみてください。debugを起動する必要はありません。 アンダーカーソルが表示されたところで1+2などのようにひつ桁の加算の式を入れてエンターを押してください。答えが表示されると思います。 このコードは添付画像の手順でデバッガでコードを入力してバグ取りをしながら並行してメモ帳で作成したものです。 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 ここまで。

noname#78062
質問者

補足

丁寧な解答ありがとうございます,知識不足ですみません,試してみます。  最後に,このように記述したプログラムの保存について以下の資料があるのですが,例えば記述していただいた電卓の場合どうするのでしょうか。また,資料は Intel 80x86 互換プロセッサ / 16bit 用なのですがXP(32bit)のコマンドプロンプトだと違うのでしょうか。お願いします。 [資料] COMファイルの生成はオフセットアドレス100からプログラムを作るがWコマンドでアドレスを指定する場合はどこからでも良い。最後は4C番のシステムコールで終了するようにプログラムする。BXレジスタをRコマンドを使って0にする。CXレジスタをRコマンドでデータのサイズ- 100とする。例えばオフセットアドレス12Cで終わっているならばCXレジスタに2Cをセットしこのサイズはプログラムだけではなくデータも含める。Nコマンド指定。Wコマンド実行(-W [address])。addressには書き始めるアドレスを指定。アドレスを省略するとCS : 100からBX : CXのバイト数だけプログラムをディスクに書きこむためBXレジスタを0にCXレジスタをサイズ- 100に設定する必要がある。 [例(1)] -A 100 MOV AH , 9 MOV DX , 10D INT 21 MOV AH , 4C MOV AL , 0 INT 21 -E 10D "Kitty on your lap$" -R BX BX 0000 :0 -R CX CX 0000 :24 -N chlorine.com -W

関連するQ&A

  • アセンブリ言語について。

    アセンブリ言語がアセンブラ&実行出来るサイトを知らないでしょうか?また、アセンブリ言語のプログラムが載っているサイトを知らないでしょうか?教えて頂けると幸いです。

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

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

  • アセンブリ言語について。

    アセンブリ言語と機械語は一対一で対応しているので、実行ファイルがあれば逆アセンブルすると 完全に元のアセンブリコードが復元できるのでしょうか?教えていただけないでしょうか?すみません。

  • アセンブリ言語について

    現在電気工学科の学生です。アセンブリ言語の講義を受けているんですが、試験で単位が取れる自信がありません。。。全くわからないことだらけです。C言語に関してはほんの触りだけ勉強したことがありますが、アセンブラ言語については全くの素人です。演習問題があるんですが、色々本等で探しても見つかりませんでした・・・私の努力不足かもしれませんが、問題の解答と解説を教えて欲しいです。 問題は→メモリアドレス3000H~30FFHの内容(データ)を2000Hから始まるメモリアドレスにコピー(格納)するプログラムをアセンブリ言語で書いてください!それとこの問題には参考のためにアセンブリ言語の命令の例があるんですが LD A、(BC) LD A、(DE) LD A、(HL) って書いてあるんですが、このBCやDE,HLはどんな意味があるんでしょうか?初歩的なことばかりで申し訳ありませんが、ご教授よろしくお願いします。

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

    使っている開発環境は、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]コマンドで実行

  • アセンブリ言語で

    if( a == b){ …… } else { …… } というのをアセンブリ言語にするなら、 beq を使うより bneを使う方が効率が良いと、ある本に書いてあったのですが、なぜですか???

  • アセンブリ言語は原始プログラムですか?

    質問(1) アセンブリ言語というのは、 add $S1, $S2 みたいなやつですよね? wikipediaで「ソースコード(ソースプログラム、原始プログラム)」の注釈1,2を読むと、 注1:【機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。】 注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 と書かれてあります。 でも、 他の教材では アセンブリ言語で書かれたプログラム(原始プログラム) と書かれています。 どっちが正しいのでしょうか? 質問(2) 目的プログラム(オブジェクトプログラム)とは、 IT用語辞典によると 【オブジェクトプログラムとは、ソースプログラム(人間が認識できるプログラム言語で高水準言語など?)をコンパイラで機械語に翻訳したプログラムのことである】 とありますが、 ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? どなたかご教授ください。 お願いします。

  • アセンブリ言語について。

    熱血!アセンブラ入門という書籍を借りてきたのですが、どこから、アセンブリ言語が組めるものをダウンロードすれば良いのでしょうか? また、また、そのダウンロードしたものは、独習アセンブラという書籍でも使えるのでしょうか?教えていただけると助かります。すみません。以下のURLです。 http://kozos.jp/books/asm/menu.html

  • 64ビットWindows上でアセンブリ言語

    こんにちは。 現在、OSは現在、64ビット版のWindows7を使っています。 このWindows7上で、アセンブリ言語によるプログラミングを行いたいと思っています。 どうして今頃アセンブリ言語なのかといいますと、会社の研修で、C言語による組込みソフトウェア開発を学ぶ際に、アセンブリ言語も学習するらしいので、少し予習してみようと思いました。 そこで、64ビット環境でも動作するアセンブラを探してみたのですが、 なかなか見つからず、困っています。 ネット上の情報を頼りに色々と試したのですが、作成した実行ファイルをいざ実行しようとすると、「64ビット環境では動作しない」といった内容のメッセージが出たりして、 どうしても動作してくれませんでした。 64ビット版のWindows上で、アセンブリ言語によるプログラミングができている方がいらっしゃれば、どうやってできたのかを、是非教えて頂きたいです。 必要であれば、インストールすべきソフトウェアの一覧と、環境設定方法なども、簡単に説明して頂ければ、大変助かります。 あと、動作確認を行う簡単なサンプルプログラムも、提示して頂ければ大変助かります。 (なにせ、アセンブリ言語に関する知識がゼロなものですので。) では、よろしくお願い致します。

  • アセンブリ言語と機械語について。

    アセンブリ言語と機械語は一対一で対応しているので、実行ファイルがあれば逆アセンブルすると 完全に元のアセンブリコードが復元できるのでしょうか?教えていただけないでしょうか?すみません。教えていただけないでしょうか?すみません。どういった例が挙げられますか?