• 締切済み

アセンブリ言語

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

noname#78062
noname#78062

みんなの回答

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

---- MOV DL,10 は ---- MOV DL,A の間違いです。 デバッガは16進表記でした。

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

リンクを覗いてみました。懐かしい。 キーボードから入力して、ディスプレイに出力するやり方はこのサイトにあるのでそれを利用すればできますね。 1+2のように間に空白を入れないで数字も一桁の加算という手抜き設定で組んでみます。 いい加減なものなので間違いもあると思います。流れだけ見てください。 長い間アセンブラで組んでいないのであらかた忘れています。 アドレス200番地にキーボードからの文字列を入れ、アドレス300番地に結果を入れるとすれば ---- MOV AH,A ---- MOV DX,200 ---- MOV BYTE PTR[200] , 20 ---- INT 21------------------- キーボードから文字列を取得 ---- MOV AL,BYTE PTR [0202]----- 一番目の文字 ---- SUB AL,'0'--------------- 文字コードを数字に('0'が使えたかどうか自信が無い。使えなければ0の文字コードを入れてください。) ---- MOV DL,BYTE PTR [0204]----- 二番目の文字 ---- SUB DL,'0'----------------- 文字コードを数字に ---- MOV DH,0 ---- MOV BL,BYTE PTR [0203]----- 演算記号 ---- CMP BL,'+'----------------- 演算記号が'+'なら(ここも'+'が使えなければ'+'の文字コードを入れてください) ---- JE 1 ---- CMP BL,'-' ---- JE 2 ---- CMP BL,'*' ---- JE 2 ---- CMP BL,'/' ---- JE 2 -1-- ADD AL,DL ---- MOV BL,AL ---- MOV AH,0 ---- MOV DL,10 ---- DIV DL ---- ADD AL,'0'---------------- 商を文字に変換 ---- MOV BYTE PTR[300],AL ---- ADD AH,'0'---------------- 余りを文字に変換 ---- MOV BYTE PTR[301],AH -2-- MOV BYTE PTR[302],'$'----- 文字列終了コード ---- MOV AH , 9 ---- MOV DX , 300 ---- INT 21-------------------- 文字列出力 アドレス計算が面倒なのでアドレスを入れていません。分岐の箇所には番号を入れてあります。 私も最初はデバッガでアセンブラの勉強をしました。勉強されるにはデバッガの方が仕組みが理解できるのでいいのですが、本格的にアセンブラでプログラムを組むなら無料のVisual Studio 2008 Express EditionのVisual C++をインストールすればマクロアセンブラが使えるのでそちらの勉強をされるのがいいかもしれません。 マクロアセンブラの情報もマイクロソフトのサイトにあります。 Microsoft Macro Assembler リファレンス (MASM)で検索すれば見つかるかと思います。 中途半端な回答ですいません。 私のOSがX64なのでデバッガがないので動作確認ができません。WIN2000のマシンもあるのですが、アセンブラで本格的なプログラムを組む根性もなくなっています。簡単な電卓でもデバッガで組むには根性要りますね。 私も16ビットのアセンブラソースがあるので、それを勉強がてら64ビットに移植したいのですが、根性が無くて一歩も踏み出せていません。

noname#78062
質問者

補足

ありがとうございます。そのアドレスの書き方もよく分からないんですが教えていただけないでしょうか。「-----」の所ですかね? お願いします。

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.2

こんにちは >DOS窓で1+1と入力しエンタキーを押すと2とでるといった,最も単純な電卓です。 ネットでDOSのシステムコールの資料を手に入れましょう。 最低、1文字コンソール入力、1文字コンソール出力のOSサービスが必要です。 後、2進数数値のASCIIコード変換サブルーチンを作れば目標は達せられるでしょう。 予備知識として、CPUの仮想86モードも調べておくべきかな.. たまにBOOK OFFに格安(\105)でi8086CPUの解説本を見かけます でも、なぜ今時デバッガー環境でプログラミング?と思いますよ。 上記の課題だけ、こなせればいいんですかね(^^;

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

ちょっと回答は書いてあげられないんですが、ちょっと面白そうなので確認させてもらっていいですか。 アセンブリ言語はCASLですか、それともIntel系のCPUのものですか。 これはDEBUGとあるのでデバッガで入力して加減乗除の計算をするプログラムを作ると言うことなんですか。 直接メモリに数字を書き込んで、結果もメモリの内容を見ると言うことなんですか。

noname#78062
質問者

補足

ありがとうございます!  WindowsXP(32bit)のスタートメニュー→アクセサリ→コマンドプロンプトを開きDEBUGと入力し改行し-Aと入力し,アセンブリ言語でMS-DOSプログラム(今回は電卓)を記述し,改行し-G(プログラムを実行せよというコマンド)と入力し改行という手順で行います。  DOS窓で1+1と入力しエンタキーを押すと2とでるといった,最も単純な電卓です。 参考:http://wisdom.sakura.ne.jp/programming/asm/assembly2.html お願いします!

関連する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上で、アセンブリ言語によるプログラミングができている方がいらっしゃれば、どうやってできたのかを、是非教えて頂きたいです。 必要であれば、インストールすべきソフトウェアの一覧と、環境設定方法なども、簡単に説明して頂ければ、大変助かります。 あと、動作確認を行う簡単なサンプルプログラムも、提示して頂ければ大変助かります。 (なにせ、アセンブリ言語に関する知識がゼロなものですので。) では、よろしくお願い致します。

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

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

専門家に質問してみよう