問題タブ [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 に答える
374 参照

compiler-construction - 68040 If Else の間違った分岐を取る

優れた 68k アセンブリ プログラマーはいますか?? Motorola 68040 用に商用の Green Hills コンパイラを使用していますが、コードから非常に奇妙な動作が見られます。場合によっては、コードが if/else 比較を行い、間違った分岐を取ることがあります。例えば:

コードは時々 d!? になります。このエラーが発生するたびに、比較を中断する特定の ISR が常に 1 つあります。ISR 用に生成されたアセンブリを調べたところ、意味をなさないものがいくつかありました。まず、浮動小数点ステータス レジスタ、FPSR、FPCR、および FPIAR が ISR に保存されていないようです。これは、if/else が間違った分岐を取っている理由を説明します。FPSR レジスタは比較の結果を決定するために使用され、そのレジスタが ISR で上書きされた場合、分岐は間違ったパスを取る可能性があります。以下は、コンパイラーによって生成された入り口と出口のアセンブリーです。

Programmer's Reference Manual を調べましたが、FSAVE または FMOVEM が FP ステータス レジスタを保存することを示唆するものは見つかりません。実際、「FSAVE はプログラマの浮動小数点ユニットのモデル レジスタを保存しません。マシンのユーザーの目に見えない部分だけを保存します。」というコメントを見ました。そのため、ISR の開始時にレジスタを保存し、最後に復元するために独自のアセンブリを追加しました。これにより、パフォーマンスが劇的に改善されましたが、まだいくつかの問題が見られます。以下は私が行った追加です。C コードでは、バックアップ変数は unsigned long として入力されます。

レジスターを保存しないことで、コンパイラーに実際にバグがあるとは信じられませんでした。そこで、FPx と Dx の値を調べて、それらが適切な値に復元されていることを確認しましたが、そうではないようです。ただし、アセンブリ コードに変更を加えていないということは 100% ではありません。以下は、レジスタを保存するために追加したコードです。デバッグ変数は unsigned long として入力されます。

要するに、私の質問は、

1) FPSR、FPCR、および FPIAR レジスターを保存しないという点で、生成されたアセンブリーに問題がありますか?

2) ISR に出入りするときに、レジスタの値を適切に保存していますか?

比較する別のコンパイラがあれば、それは素晴らしいことです。残念ながら、デバッガーをコードにアタッチできません。私は C/C++/C#/Java/Python/PHP などの経験が豊富ですが、アセンブリの専門家にはほど遠いです。

どんなアイデアでも大歓迎です!

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

c - 機能の調整

関数をGCC、ターゲット680x0と4バイト境界で整列させるにはどうすればよいですか?

-malign-functions=4とにかく、それ自体ではトリックを行わないようです。おそらく68020以上のキャッシュパフォーマンスを改善することを目的としたある種のオプションですか?

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

assembly - アセンブリコードに改行を入れる Easy 68k (68000)

私はアセンブリが初めてで、小さなプログラムを作成しようとしています。Easy68k を使用してアセンブリに改行を挿入する方法がわかりません。たとえば、私は基本的なブラック ジャック シミュレーターを書き始めており、最初のプレーヤーに挨拶した後に改行を行う必要があります。変数宣言に「\n」を組み込んでみましたが、テキストの一部であるかのように出力されてしまいます。

Easy 68K ヘルプの I/O セクションによると、「LF EQU $0A New line (改行)」を使用できますが、これを実装する方法がわかりません。

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

assembly - Easy 68K (68000) を使用した範囲内の乱数の組み立て

Easy 68K シミュレーターを使用して単純なブラック ジャック ゲームを作成しており、乱数を使用してカードを割り当てる必要があります。私のカードは 2 から 11 の範囲内にある必要があります。毎回同じ数字を取得しているように見えますが、期待した範囲内ではありません。私のカードの値は D3 になる必要があるため、次の乱数コードがあります。

このサイトのコードを変更することで得たもの: https://notendur.hi.is/voe1/3.%20onn/Tolvuhogun/EASy68K/Examples/tutorial3.X68

2 から 11 までの数を生成する方法を見つけたいと思っています。インターネットで数時間検索しています。Move.B #8, D0 を使用して時間にアクセスする必要があることはわかっていますが、それ以上はあまり進歩していません。どんな助けでも大歓迎です!

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

assembly - m68k 16 進数から 10 進数への変換が正しく機能しない

私は開発中の M68k コンピューター用の小さな OS を書いていますが、ちょっとした問題に遭遇しました。ユーザーに 16 進数値 ($1F など) を 10 進数 (31) で表示できるようにする必要があります。それを行うために次のコードを作成しましたが、いくつかの問題があります。

このコードは、$F までの値に対して適切に機能します。たとえば、$B を入力すると 11 が出力されます。ただし、数値が $F を超えると、壊れ始めます。10 ドルを入力すると、10 ドルが出力されます。$xF の後は常に折り返されます。

なぜこれを行っているのか、誰にもアイデアはありますか?

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

assembly - Divide (DIVS) が Jack Crenshaw で機能しない コンパイラを構築しましょう

私はhttp://compilers.iecc.com/crenshawにある Jack Crenshaw による優れた Let's Build a Compiler チュートリアルに従っています。生成された 68k アセンブリを Easy68k http://www.easy68k.com/68000エディター/アセンブラー/シミュレーターでテストしています。パート 2 http://compilers.iecc.com/crenshaw/tutor2.txtに取り掛かりましたが、除算手順が適切に機能していません。

テストとして「8/2」と入力すると、コンパイラは次のコードを生成します。

これは、実際には 2/8 を計算しているように見えます (つまり、間違った方法で丸められます)。後で D0 に残された値は 00020000 です。最後の行を DIVS D0,D1 として書き直すことでこれを修正できますが、結果は次のようになります。他のルーチンのように D0 ではなく D1 であり、そのような影響力のある作業が正しくないとは思えません。インターネットを検索しましたが、この問題に遭遇した人は他にいません。つまり、1) 私が間違ったことをした - おそらく 2) ジャックが間違ったことをした - ありそうにない 3) Easy68k エミュレーターが何か間違ったことをしている - ありそうもない しかし、私は自分が何を間違えたのかわかりません。助けてください。

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

assembly - MC68000 assembly multiplication

Say we have the following:

What will be the value of D1? According to a mc68000 simulator, it will be FFFA146A. According to the book, the two lowest order words of each register will be multiplied and the result will be stored as a longword. Therefore, it will be 0xABCD * 0x0012 = 0xC146A. According to this rule, D1 should be 000C146A. I notice the 146A values are the same as in the simulator, but where does the A come from, and the Fs? Is the simulator wrong?

Thank you

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

assembly - この追加サブルーチンを機能させるのに問題があります

Easy68k でアセンブリ言語クラスの追加プログラムを作成していますが、同じ問題が引き続き発生します。プログラムを実行するたびに、最大 10 個の数値 (配列の割り当てサイズ) を入力できるようになり、計算中というメッセージが出力されますが、ウムラウト付きの y が無限に出力されます。これを行う原因となる私のプログラムですぐに見ることができる問題はありますか?

サブルーチンの構文を検索したのは、それが間違っていると確信しているためですが、何も見つかりません。

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

macos - OS X Lion の 68k アセンブラ

大学のクラスで 68k 用にアセンブラーでプログラミングを行う必要があります。os x lionでそれを行うプログラムを探しています。wine で動作している easy68k を見つけましたが、うまく動作していないように感じます。推測はありますか?

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

assembly - DC.W (定数の定義) で数値の前に # が必要ないのはなぜですか?

次のコード行があります。

これは基本的に意味しX = 5ますが、すべきではありませんX DC.W #5か?

MOVEを使用するときは常に必要です#