問題タブ [68000]

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.

0 投票する
2 に答える
167 参照

assembly - 0(SP)で渡された値が4(SP)でしかアクセスできないのはなぜですか?

で渡された値が で0(SP)のみアクセスできるのはなぜ4(SP)ですか? たとえば、(ルーチンで使用されているため)の代わりにprintnbyに数値を渡す必要があります。そうしないと機能しません。私は何が欠けていますか?0(SP)4(SP)

0 投票する
1 に答える
209 参照

assembly - バイト配列の奇数インデックスにアクセスするとアドレス エラーが発生する

コードにバイト配列があり、この配列のランダムな要素にアクセスする必要があります。配列のアドレスがロードされA4、インデックスが計算されて に格納されD2ます。インデックスのこの配列から 1 つの要素 (1 バイト) を読み取りD2、それを D7 に追加する必要があります。C言語でどのように実装されているかを示すことで、それをより明確にしましょう:

m68k アセンブリ (コードの一部) で実装する方法:

しかし、時々 D2 が奇数でA4 + D2あり、奇数のアドレスであるため、シミュレーターはアドレス エラーを生成します。正しい方法は何ですか?

0 投票する
1 に答える
4763 参照

algorithm - 2進数を4桁のBCDに変換する - 除算はどのように機能しますか?

Motorola 68000 CPUの組み立てを勉強しています。私が使用する本は:
68000 Assembly Language Programming, Second Edition, Leventhal, Hawkins, Kane, Cramer
and the EASy68k simulator です。

2 進数から BCD (2 進化 10 進数) への変換についていくつか質問があります。
この本の元の問題は、次のように述べています。「メモリ位置 6000 にある変数 NUMBER の内容を、位置 6002 にある変数 STRING の 4 つの BCD 桁 (6002 の最上位桁) に変換します。NUMBER の 16 ビット数は符号なしで、 10,000 より」

例:

1C52 (16 進数) = 7250 (10 進数) なので (MC68k はビッグエンディアンの CPU です)

MC68k は豊富な命令を備えた優れた CISC CPU であるため、ソリューションをコーディングするのは難しくありません。

DIVU = DIVision 符号なし

私はその解決策に満足していますが、MC68k がこの除算 (結果と剰余の計算) をどのように実行するかを知りたい/学びたいと思っています。説明させてください。たとえば、逆のことをしたい場合、つまり BCD 数を 2 進数に変換したい場合は、次のアルゴリズムを使用できます。 「7」が最上位桁で「0」が最下位桁である BCD 桁。これらの桁の 10 進数を作成したい場合は、次のようにできます (疑似コード)。

しかし、もちろん、基数 2 で書かれた数値の乗算を調整する必要があります。MC68k は多かれ少なかれ 2 つのアプローチを提供します。

  1. 「MULU #10, D1」のような掛け算のニーモニック
  2. または、簡単な指示からなるセット:

    /li>

同じ結果が得られます (元の数 x -> 10x)。ADD 命令は次のように機能します。

また、LSL 命令は論理左シフト命令です。また、数値を論理的に左に 1 ビットシフトした結果は、2 を掛けた結果と同じであり、左に 2 ビットシフトした結果は、数値に 4 を掛けた結果と同じであることがわかっています。

したがって、BCD からバイナリへの変換では、アルゴリズムで MULU などの乗算命令を使用できますが、バイナリから BCD への変換では、アルゴリズムで DIVU などの除算命令を使用できます。

また、BCD からバイナリへの場合、ADD および論理シフト命令を使用して乗算をシミュレートできますが、バイナリから BCD への同様の方法は何でしょうか? DIV よりも単純な命令 (減算、加算、論理シフトなど) を使用して、除算をシミュレートし、商/剰余を計算するにはどうすればよいですか?

また、ここでバイナリから BCD への変換に関する興味深いアルゴリズムを見つけました:
http://www.eng.utah.edu/~nmcdonal/Tutorials/BCDTutorial/BCDConversion.html

しかし、なぜこれが機能するのかわかりません。5 以上の数値を含むすべての列 (= 4 ビット) に 3 (= 11 バイナリ) を追加する必要があるのはなぜですか?

私はこのアルゴリズムを使用するソリューションをコーディングすることを考えましたが
、 - 3シフト後、すべてのシフト後に1列に4より大きい数値が含まれているかどうかを確認する必要があります - 7シフト後、1と10かどうかを確認する必要があります列には、すべてのシフト後に4より大きい数値が含まれています
-11シフトの後、シフトごとに1、10、および100の列に4より大きい数値が含まれている
かどうかを確認する必要があります-15シフトの後、1が含まれているかどうかを確認する必要があります、数十、数百、数千の列には、シフトごとに 4 より大きい数値が含まれます

これは、CPUがやるべきことがもっとたくさんあるようです...

0 投票する
1 に答える
1643 参照

operating-system - OS へのブリッジとしての Motorola 68K TRAP 命令

私は専門家ではありませんが、ただの愛好家です。私は過去に 68000 アーキテクチャで遊んでいましたが、常にその TRAP 命令について考えていました。この命令は、常に OS への「ブリッジ」として説明されます (一部のシステムでは、この点で使用されていませんが、それは別の話です)。これはどのように達成されますか?TRAP 自体は特権命令なので、この OS 呼び出しメカニズムはユーザー モードでどのように機能するのでしょうか。私の推測では、特権違反の例外がトリガーされ、例外ハンドラーがどの特定の命令が例外を引き起こしたかをチェックします。TRAP 命令の場合、命令は単純に実行されます (TRAP のオペランド、つまり TRAP ベクトル番号もチェックされる可能性があります)。私は正しいですか?

0 投票する
1 に答える
121 参照

assembly - メモリから 10 バイトを読み取って、連続する 2 バイトをそれぞれ追加するにはどうすればよいですか

文字列 '0123456789' を保存したので、各文字の ASCII 値が 1 バイトとしてメモリに保存されます。連続する 2 バイトを次のように追加するにはどうすればよいですか。

0+1->1、1+2->2......など

私の最初の試みはこのようなものでした

0 投票する
1 に答える
1604 参照

assembly - アセンブリ 68K CCR からキャリー ビットを格納する方法は?

マニュアルでCCR命令からMOVEを見つけました... http://www.freescale.com/files/archives/doc/ref_manual/M68000PRM.pdf

しかし、「無効なアドレッシング モード」エラーが発生し続けます。さまざまな形式の構文を試しましたが、とにかく、CCR 全体ではなく、キャリー ビットのみを格納したいと考えています。これらはすべて、私が試した構文です。サイズは単語でなければならないことを非常に明確に示しています。

なだ。私は何を間違っていますか?具体的に実行ビット (C) を格納するより良い方法はありますか?

0 投票する
4 に答える
1100 参照

assembly - 68000 アセンブリの「S[cc]」命令を理解する

68000 アセンブリの「S[cc]」命令セットを理解しようとしています。

命令の形式は次のとおりです。

[cc]条件コードです (たとえば、SEQ「等しい場合に設定」を意味します)。で指定された条件[cc]が真の場合、レジスタはすべて1s に設定されます。それ以外の場合、レジスタはすべて0s に設定されます。

理解できないことが 1 つありS[cc]ます。条件が true かどうかを確認する操作はどこにあるのでしょうか。フラグをチェックしますか?

D0もしそうなら、レジスターに式の結果を保持させたい場合よりもD0 = D1、これが私がする必要があることです:

これは正しいです?それとも、この操作を正しく理解していませんか?

0 投票する
0 に答える
116 参照

math - Coldfire/m68k Jump エンコーディングの問題

そのため、coldfire (mcf5225x シリーズ) を使用していますが、この場合は 68k と同じバイナリ表現を持つジャンプ エンコーディングで問題が発生します。

ご覧のとおり、jmp 命令のモードとレジスタは 111010 で、PC からの 16 ビット ワード拡張オフセットを示します。16 ビット拡張は、現在のアドレス 8hex からの 8hex オフセットです。結果は 12 になるはずですが、私の計算では 10 になっています。ここでの問題は何ですか。ジャンプ先のアドレスが間違っているように見えるのはなぜですか? 私が設計しているプロセッサ モデルでいくつかの問題が発生しています。どんな助けでも感謝します!

0 投票する
1 に答える
1096 参照

68000 - 68000 - 68000 では TRAP 14、EASy68K では TRAP 15

これらは同じですか?EASy68K の TRAP 15 は、68000 ボードの TRAP 14 と同じです。私はこの答えを探してみましたが、それが正しいと考えていますが、確認したいと思います。

誰かがこれを確認してもらえますか?