2017-12-08 10 views
-5

私は試験に問題があり、私はこれをプログラムする方法を知っていません。誰かが考えているかもしれません。 私はcomando行は、全体的に8個の********があります。最初の桁または文字iは、7と2を3で、3と1を、そして最初から4番目の桁または7私はこの考え方を持っている可能性があります。私は考えているかもしれません。まず第一に私は文字列を整数に変更してからスタックにプッシュしなければならないのですか?本当にあなたの助けには何も分かりません。Linux 32 NASMどのようにすればいいのですか?(どのヒント?

+0

私はこのポストの下にasmコードで何かを書いています。 – ceysi

+0

これはあなたが答えとして投稿したので削除されました。アイデアはあなたの質問の編集ボタンを押してそこにコードを追加することです。 – PeterJ

答えて

0
  • 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コードから

  • 変換文字/数字A10であるように(私はなど、あなたが仕事のために、文字の値を定義している疑いがあり、 65)。

  • 「重み」の配列を持つ方法がまだわからない場合は、定数値を掛けてください。

  • すべての値

  • 乗算重み(各入力文字のためのそれらのいずれか8)、または単に異なるもの+ラップアラウンドハンドルを支持アレイを作成するためのいくつかのループ内でそれを行います。

  • 和いくつかの中間結果に乗算の結果をASCII文字に残りを変換し、文字列としてメモリにそれを格納するだけ分割

  • の残りとして最後の桁を抽出する

  • 使用div 10、 hello world/etcの代わりにそれを表示する。それを表示する。

  • デバッガで4回、無効な入力などを確認してください。すべてのバグを修正してください。

  • 完了。

スタックにプッシュ?

なぜですか?それはより鮮明か塩辛いですか?

あなたはあなたの仕事が何であるか知っています。実際には、計算として読むという点では非常にうまくいきます(他のいくつかのタスクでは、初心者が計算の性質を見るのが難しいかもしれませんが、自然に計算のようなものです。タスクに焦点を合わせる。それぞれの文字を乗算する必要がある場合は、乗算するだけです。結果の合計が必要な場合は、合計を加算するだけです。等

もし助けても試してみると、アセンブリは動作しませんし、偶然だけ何かを修正する機会はほとんどありません。コピー/貼り付けがますます増えています。インターネットからのコード。そのようなものは、高水準言語では動作しますが、アセンブリでは使用できません。必要な計算を常にフォーカスし、CPU命令に書いてください。 ASMに書き込むことができるアイデアについては、命令セットリファレンスガイド(80386限定リストの例を検索してください。これはあなたにとっては十分ですが、別の何百もの浮動小数点/ MMX/SSE命令は含まれていません。あなたは基本的な指示のまともな知識を持って後に確認することができます)。いくつかの簡単なチュートリアルをチェックして、目的の結果を計算するための命令の使い方を確認してください。

はい、コンピュータのすべては基本的に計算です。入力値を入力し、その上で計算を実行し、結果を出力します。結果は数字だけではなく、 "このコードを実行して文字列を表示するこのコードを実行する"のように、計算結果の一部として計算することもできます。それにもかかわらず、決定論的な計算について、それを命令で指示すると考える。ある州からあなたは次の州に入るでしょう。入力状態から終了状態に至る数式を見つけて、CPU命令に書き込んでください。完了しました。

+0

URの時間と答えに感謝:)! – ceysi

関連する問題