私は試験に問題があり、私はこれをプログラムする方法を知っていません。誰かが考えているかもしれません。 私はcomando行は、全体的に8個の********があります。最初の桁または文字iは、7と2を3で、3と1を、そして最初から4番目の桁または7私はこの考え方を持っている可能性があります。私は考えているかもしれません。まず第一に私は文字列を整数に変更してからスタックにプッシュしなければならないのですか?本当にあなたの助けには何も分かりません。Linux 32 NASMどのようにすればいいのですか?(どのヒント?
答えて
linux32バイナリを作成しようとすると、ちょうどきれいに終了します(または "hello world"も表示されます)。本当にelf32であることを確認します(elf64をビルドしていない、現代の64bディストリビューションではデフォルトであることがよくあります)。もしあなたがWin10を持っていて、その中のubuntuを使うつもりなら、あなたは運が悪いです。それは32bのバイナリをサポートしていないので、いくつかの仮想マシンで完全な共通のLinuxディストリビューションが必要です。どのシステムコールが実行しているかは、
strace ./<binary>
を参照してください。デバッガを使用して各命令をステップ実行し、どの値がレジスタにあるかを確認し、メモリ内容をチェックします(たとえば、エントリポイントの命令オペコード)。私。あなたの鼻腔鏡+他の道具が適所にあり、動作していることを確認してください。まだ「hello world」の例に変更してください。実際にどのように動作するかを実際に理解していることを十分に説明するチュートリアルを探してみてください。
ここで、からのすべての次のステップの手順は、何をしているかについて、デバッガとの理由で、コードの上に常にシングルステップの後、彼らは本当にあなたが任意の望ましくない副作用なしに、意図したものを行う場合。
(シンプル
mov
命令ではなく、文字列の定義に大きなEを書き込むことによって)「E」に「e」を変更するプログラムで試してみてください。 (文字列の仕組みを理解していることを確認し、読み込み専用の定義を持つオリジナルのhello-worldの例がある場合は、読み書きメモリに書き込むこともできます)。いくつかのドキュメント/チュートリアルを確認して、コマンドライン引数にアクセスできるようにして、hello worldではなく出力してみてください。
この時点では、入力文字列の1文字にアクセスするのに十分な熟練が必要です。 A
はASCIIと互換性がありません、あなたのエンコーディングにASCIIコードから
変換文字/数字
A
が10
であるように(私はなど、あなたが仕事のために、文字の値を定義している疑いがあり、65
)。「重み」の配列を持つ方法がまだわからない場合は、定数値を掛けてください。
- すべての値
乗算重み(各入力文字のためのそれらのいずれか8)、または単に異なるもの+ラップアラウンドハンドルを支持アレイを作成するためのいくつかのループ内でそれを行います。
和いくつかの中間結果に乗算の結果をASCII文字に残りを変換し、文字列としてメモリにそれを格納するだけ分割
の残りとして最後の桁を抽出する
使用
div 10
、 hello world/etcの代わりにそれを表示する。それを表示する。デバッガで4回、無効な入力などを確認してください。すべてのバグを修正してください。
完了。
スタックにプッシュ?
なぜですか?それはより鮮明か塩辛いですか?
あなたはあなたの仕事が何であるか知っています。実際には、計算として読むという点では非常にうまくいきます(他のいくつかのタスクでは、初心者が計算の性質を見るのが難しいかもしれませんが、自然に計算のようなものです。タスクに焦点を合わせる。それぞれの文字を乗算する必要がある場合は、乗算するだけです。結果の合計が必要な場合は、合計を加算するだけです。等
もし助けても試してみると、アセンブリは動作しませんし、偶然だけ何かを修正する機会はほとんどありません。コピー/貼り付けがますます増えています。インターネットからのコード。そのようなものは、高水準言語では動作しますが、アセンブリでは使用できません。必要な計算を常にフォーカスし、CPU命令に書いてください。 ASMに書き込むことができるアイデアについては、命令セットリファレンスガイド(80386限定リストの例を検索してください。これはあなたにとっては十分ですが、別の何百もの浮動小数点/ MMX/SSE命令は含まれていません。あなたは基本的な指示のまともな知識を持って後に確認することができます)。いくつかの簡単なチュートリアルをチェックして、目的の結果を計算するための命令の使い方を確認してください。
はい、コンピュータのすべては基本的に計算です。入力値を入力し、その上で計算を実行し、結果を出力します。結果は数字だけではなく、 "このコードを実行して文字列を表示するこのコードを実行する"のように、計算結果の一部として計算することもできます。それにもかかわらず、決定論的な計算について、それを命令で指示すると考える。ある州からあなたは次の州に入るでしょう。入力状態から終了状態に至る数式を見つけて、CPU命令に書き込んでください。完了しました。
URの時間と答えに感謝:)! – ceysi
- 1. 32ビットと64ビットLinux用のNPAPI Chromeプラグインをパッケージ化するにはどうすればよいですか?
- 2. 32の異なるコアで32プロセスを実行するにはどうすればよいですか?
- 3. NASMを使用してシステム時刻にアクセスするにはどうすればよいですか?
- 4. アセンブリNASMセグメンテーションフォールト、それはどういう意味ですか?
- 5. NASMを使用して1バイトの値を変更するにはどうすればよいですか?
- 6. Linuxでビデオをキャプチャするにはどうすればよいですか?
- 7. Linuxでファイルアクセスを検出するにはどうすればよいですか?
- 8. Linuxでスタックトレースを表示するにはどうすればよいですか?
- 9. Linuxでカーソルを制御するにはどうすればよいですか?
- 10. NASMで「ケーステーブル」はどのように機能しますか?
- 11. NASMでどのように組合を作りますか?
- 12. "リモートペアコーディング"環境のlinuxをlinuxに設定するにはどうすればよいですか?
- 13. 2つの32ビットレジスタを64ビットの答えに統合するにはどうすればよいですか?
- 14. 16色の値を32色の値に変換するにはどうすればよいですか?
- 15. ploneでlinux FSを使うにはどうすればいいですか?
- 16. 32ビットマシンから64ビットのターゲットにパブリッシュするにはどうすればよいですか?
- 17. ClutterStageでウィンドウタイプのヒントを設定するにはどうすればよいですか?
- 18. strongループループバックでmongoDBのヒント演算子を使用するにはどうすればよいですか?
- 19. $ this変数のクラスでdocblockヒントを使用するにはどうすればよいですか?
- 20. プレフィックスツリーはどのようにすればいいですか?
- 21. C#Winformsのラベルにヒントやツールチップを追加するにはどうすればよいですか?
- 22. InputType = "numberDecimal"のEditTextにヒントを追加するにはどうすればよいですか?
- 23. 下のoracleヒントSQLクエリをQuerydslコードに変換するにはどうすればよいですか
- 24. linux mintでバックトラックなどのkaliツールを追加するにはどうすればよいですか?
- 25. SOの検索ボックスに似たテキストボックスのヒントを作成するにはどうすればいいですか?
- 26. 32ビットと64ビットのGMPライブラリの競合を解決するにはどうすればよいですか?
- 27. caches_pageをどのようにテストすればよいですか?
- 28. クラスはどのようにセットアップすればよいですか?
- 29. linuxからファイルをダウンロードするにはどうすればいいですか?
- 30. 32ビットUbuntuでOpaをコンパイルするにはどうすればよいですか?
私はこのポストの下にasmコードで何かを書いています。 – ceysi
これはあなたが答えとして投稿したので削除されました。アイデアはあなたの質問の編集ボタンを押してそこにコードを追加することです。 – PeterJ