- 締切済み
アセンブリ言語
アセンブリ言語で,できるかぎり単純な電卓をつくるには,どう記述すればよいのでしょうか。 コマンドプロンプトの以下のコマンドで実行します。 DEBUG -A (ここに記述) -G お願いします!
- みんなの回答 (24)
- 専門家の回答
みんなの回答
- Quant
- ベストアンサー率18% (23/122)
---- MOV DL,10 は ---- MOV DL,A の間違いです。 デバッガは16進表記でした。
- Quant
- ベストアンサー率18% (23/122)
リンクを覗いてみました。懐かしい。 キーボードから入力して、ディスプレイに出力するやり方はこのサイトにあるのでそれを利用すればできますね。 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ビットに移植したいのですが、根性が無くて一歩も踏み出せていません。
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは >DOS窓で1+1と入力しエンタキーを押すと2とでるといった,最も単純な電卓です。 ネットでDOSのシステムコールの資料を手に入れましょう。 最低、1文字コンソール入力、1文字コンソール出力のOSサービスが必要です。 後、2進数数値のASCIIコード変換サブルーチンを作れば目標は達せられるでしょう。 予備知識として、CPUの仮想86モードも調べておくべきかな.. たまにBOOK OFFに格安(\105)でi8086CPUの解説本を見かけます でも、なぜ今時デバッガー環境でプログラミング?と思いますよ。 上記の課題だけ、こなせればいいんですかね(^^;
- Quant
- ベストアンサー率18% (23/122)
ちょっと回答は書いてあげられないんですが、ちょっと面白そうなので確認させてもらっていいですか。 アセンブリ言語はCASLですか、それともIntel系のCPUのものですか。 これはDEBUGとあるのでデバッガで入力して加減乗除の計算をするプログラムを作ると言うことなんですか。 直接メモリに数字を書き込んで、結果もメモリの内容を見ると言うことなんですか。
補足
ありがとうございます! WindowsXP(32bit)のスタートメニュー→アクセサリ→コマンドプロンプトを開きDEBUGと入力し改行し-Aと入力し,アセンブリ言語でMS-DOSプログラム(今回は電卓)を記述し,改行し-G(プログラムを実行せよというコマンド)と入力し改行という手順で行います。 DOS窓で1+1と入力しエンタキーを押すと2とでるといった,最も単純な電卓です。 参考:http://wisdom.sakura.ne.jp/programming/asm/assembly2.html お願いします!
補足
ありがとうございます。そのアドレスの書き方もよく分からないんですが教えていただけないでしょうか。「-----」の所ですかね? お願いします。