問題タブ [tasm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 除算 8086/8087 1/3 = 3?
fdiv
!!!!の使用に大きな問題があります。私は分割しようとして1/3
いるので、これが私がしていることです
ご覧のとおり、結果が表示さresultado
れないため、結果をに移動しますst(0)
(tasm を使用しているため、デバッガーで変数を確認でき3EAAAA3A
ます) 40400000
。3
どのように可能ですか?? 変数を交換してみましたが、何もありません!!! 手伝って頂けますか??=(
assembly - 8086アセンブリ(TASM):ASCII文字値をHEXとして表示する
**明確化と「よりクリーンな」コードのために編集されました。
キーボードから文字(任意の文字)を受け入れ、そのASCII値を16進数に変換してから、表示しようとしています。
基数10から16進数に変換する方法は知っていますが、間違った用語を使用していないことを確認するためです。
ASCII値として「c」を入力すると、10進値は63になります。63を16で割った値(16進数は基数16)=3.9375。後で使用するために3の商を保存します。剰余*ベース(.9375 * 16)=15.15は16進文字「F」です。
商をベースで割った値(3/16)=0.1875。商はゼロなので、これが変換の最後のステップです。剰余*ベース(.1875 * 16)= 3
それらを最後から最初に読んで(スタックについて考える場合は「最初に、最後に」)、10進数「63」(「c」のASCII)の16進値として「3F」を取得します。
これは正しいですよね?
読むのはとても簡単だと思います。キーボード(AL)から文字を取得し、BXを除数(16進数)として設定し、ALをBXで除算し、余りをスタックに格納し、後でスタックをループして表示しようとします。 。
私の問題は、乗算とINT 21H/02Hに問題があることだと思います。キャラクターを表示するために30時間を追加する必要があるかどうかわかりません...
その上、10-15を16進数でAFに変換する方法がまだわからないため、とにかくその時点(表示)にいる必要があるかどうかさえわかりません。
私は先生と話をしてみましたが、彼が私のクラスの別の生徒の群れと話し終えるのを30分待った後(彼のクラスの別のクラスからの何かについてであり、これではありません...私はかなりイライラしました)、私が得たもののほとんどは「最初からやり直す」ことでした。
「SHRとSHLの使用はどうですか?」について尋ねられたとき 指摘された通りですが、それがなくてもできるし、それらのコマンドは使えないと言われました(授業ではカバーされていません)。
私が間違っていることについて何か入力はありますか?ありがとう!
編集済み**
やっと手に入れた!キーボードで押されたASCII文字の16進値を返すようにプログラムを取得できましたが、各余りが0から9の場合にのみ機能しました。AからFは表示されず、代わりにコロンが使用されました。セミコロンなど...
オンラインでASCII/Deicmal / Hexチャートを見て、0から9までの文字が30時間から39時間であることに気づきました。しかし、キャラクターA(16進10の場合)は40時間まで開始しません。そこで、プログラムを変更して、値が39hより大きい場合、DLに7hを追加し、それを表示するようにしました。
assembly - 8086 TASM アセンブラー - ループ時のエラー:「値が範囲外です」?
私はいつもクラスでグループに遅れをとっているように見えます.アセンブリに関する私のクラスの次の章に向けて「練習」したかったのですが、それはループに関するものです.
1 から 10,000 までカウントするこの小さなループを作成しました (実行に 1 ミリ秒かかると考えました)。
数分前にゼロの数を間違えて、プログラムを壊してしまいました。なぜこうなったのか不思議に思っていました。
このエラーが発生しました:
アセンブルファイル:Loop.ASM
エラーloop.ASM(15) 値が範囲外です。
エラーloop.ASM(24) 値が範囲外です。
エラー メッセージ: 2
警告メッセージ: なし
パス:
残りのメモリ: 467k
いくつかの Google 検索 (およびメモリ レジスタに関する本を読んでいる) の後、65,535 バイトのハード リミットがあることがわかりました。これは正しいです?誰かがこのメモリ制限を超えたいと思ったらどうしますか? それを行う方法はありますか?
私には奇妙に思えます...
assembly - Tasmで文字列を数値に変換するには?
文字列を読み取って数値に変換するプログラムを作成しました。10 進法で入力された数値の文字列表現。変換の結果は、レジスタ ax にあります。私はtasm16を使用しています。
より大きな文字列 (65535 以上) を変換するにはどうすればよいですか?
assembly - 16bitでのプッシュの使い方 - tasm
プッシュ命令を使用する場合、SUM の参照をプッシュしますか、それとも値をプッシュしますか? func を呼び出した後、SUM は変更されますか?
assembly - 8086 ASM: Turbodebugger はテキスト ファイルを開きますが、正常に実行すると開きません
私が取り組んでいる ASM の割り当てで、この小さな問題が発生しています。それは魔法のように機能します... TDを使用すると。私はアセンブリが初めてなので、何が問題なのか本当にわかりません。
.txt ファイルに含まれる各 ASCII コードの文字数 (a の数、b の数など) を画面に出力する必要があります。最初に int 21h/3dh を使用してファイルを開き、ハンドルを作成してから、バイトの一部をバッファリングして処理し、ファイルの終わりに達するまで次の部分をバッファリングします。前述のとおり、TurboDebugger を使用して実行すると、完全に動作します。ただし、コマンドラインから単純に実行すると、ファイルハンドルさえ作成されません。3回目の中断後にCFを設定しますが、これはエラーを意味します。
私は自分がしなければならないことをしていないと本当に思っています。これについて助けていただければ幸いです。ありがとう!ところで、TASMを使用してコンパイルしています。私のコードの一部を投稿しても役に立たないと思いますが、そうでない場合は喜んで投稿を変更します。
これはコード全体です。スペイン語のコメントについては申し訳ありません
割り込みが返すエラー コードは 5 のようです。これは、アクセスが拒否されたことを意味します。パス ファイルが原因でしょうか?? ファイルは、コンパイルしているのと同じフォルダーにあり、 F:\dos\tasm\a.txt です。ちなみにDosBoxを使っています。
loops - x86 アセンブリで別のループ内にネストされた 2 つのループ
アセンブリ言語でのループに問題があります。
ネストされたループのループにカウンター レジスタを使用する場合、最初に行うことは、カウンター レジスタの値を外側のループのスタックに移動し、内側のループが完了したらそれをフェッチすることです。 1 つのカウンター レジスタを使用して、ループごとに異なる反復回数でネストされたループにループすることができます。
しかし、ネストされたループ内のネストされたループはどうでしょうか?
文字で作られたピラミッドを印刷したいS
。私が得ているのは、
私が実際に欲しいのは、
ここにプログラムの私のコードがあります
私が望むものを達成するために、スペース文字 (つまり 020H) を出力するネストされたループ内に別のループを追加する必要があります。しかし、これには別のカウンターレジスターが必要ですが、それができません。どうすればこの問題を解決できますか?
assembly - DOS でテキストを直接スタックに読み込む
私はアセンブラ (16 ビット DOS の TASM) を学習しており、0Ah DOS サービスを使用してテキストをスタックに直接読み込もうとしています。emu8086ではかなりうまく機能しますが、実際のTASMで実行すると、ユーザー入力はありません(入力がまったくなく、スキップINT 21h
しているように見えます)。
これが私がそれを使用している方法です:
何が問題になる可能性がありますか? スタックを間違った方法で参照していますか? 前もって感謝します。
念のため、完全なコードを次に示します。
assembly - アセンブリ:32ビットレジスタが認識されませんか?
より大きな最大整数値が必要なため、32ビットレジスタを使用しようとしています。EAX、EBX、ECX、またはEDXを使用しようとすると、TASMに「未定義の記号」と表示されます。TASMはレジスタを変数として読み取っています。理由を知っていますか?私はDOSBOX0.74を使用しており、Windows764ビットで実行しています。
assembly - 結果を10進数で表示するためのより良い方法-TASM
2つの数値を加算し、結果を10進数で表示するプログラムを作成したかったのですが、最初はケーキのように見えましたが、実際にはそうではありませんでした。10進数は0〜9文字であり、数学を実行するために必要な数値よりも大きい数値を追加する場合は、
これが私がやったことです、私は2つの数字35と39を追加したかったです、
35 + 39 = 74
両方の数値を復元しましたが、結果を「74」として表示する方法を教えてください。
また、この方法は非常に時間がかかりますが、これを行うためのより良い、より効率的な方法はありますか?