0

アセンブリでキーボードから整数を読み取る方法を知りたいのですが。Linux /x86IA-32アーキテクチャとGCC/GAS(GNUアセンブラ)を使用しています。これまでに見つけた例は、NASMまたはその他のWindows/DOS関連のコンパイラ用です。

「int16h」割り込みと関係があると聞きましたが、どのように機能するのかわかりません(パラメータが必要ですか?結果は%eaxまたはその仮想レジスタ[AX、AH、AL]に送られます] ?)。

よろしくお願いします、Flayshon。

:D

4

3 に答える 3

2

簡単な答えは、キーボードから整数を読み取るのではなく、キーボードから文字を読み取ることです。整数も画面に出力しません-文字を出力します。「ascii-to-integer」および「integer-to-ascii」を変換するルーチンが必要になります。1つは「scanfを呼び出すだけ」、もう1つは「printfを呼び出すだけ」です。"scanf" は、ユーザーの行儀がよく、入力を 10 進数を表す文字に限定している場合は問題なく動作しますが、入力された "がらくた" を取り除くのは困難です。「printf」はそれほど悪くありません。

私は Nasm ユーザーですが (Linux では問題なく動作します。実際には「Windows/DOS 関連」ではありません)、(G)as 構文にルーチンが存在する可能性があります。分からなかったら見つけられるか見てみます。

Brian が指摘するように、int 16h は BIOS 割り込み (16 ビット コード) であり、Linux では役に立ちません。

ベスト、フランク

于 2012-07-18T18:33:07.797 に答える
0

あなたの目標がプログラムを「取得」することである場合、私は Basile に完全に同意します。あなたの目標が「アセンブリ言語を学ぶ」ことである場合、これらの他の言語は実際には役に立ちません。あなたの目標がハードウェアの核心的な詳細を学ぶことである場合、おそらくアセンブリ言語が必要ですが、Linux (またはその他の「保護モード」OS) はハードウェアから私たちを隔離するので、不格好な古い DOS または「独自のOSを書く」。フレイションさんは具体的に何を目指しているのかは語っていませんが、ここで質問しているのでアセンブリ言語に興味があるのでしょう...

私たちの中には、アセンブリ言語で書くのが「楽しい」と思う精神疾患を持っている人もいます。ユーモアを!

ベスト、フランク

于 2012-07-19T13:53:39.310 に答える
0

2012 年には、プログラム全体をアセンブリでコーディングすることはお勧めしません。最も重要な部分だけをコーディングします (アセンブリ コードが絶対に必要な場合)。コンパイラは人間よりも優れた最適化を行っています。したがって、低レベルのソフトウェアにはCまたはC++を使用し、代わりにOcamlなどの高レベルの言語を使用してください。

Linux では、 Linux カーネルシステム コールの役割を理解する必要があります。これについては、マニュアル ページのセクション 2 に記載されています。おそらく、少なくともread(2)write(2)が必要であり (シェルなどの親プロセスによって既に開かれているstdinstdoutを処理する場合のみ)、おそらく他の多くのシステムコール ( open(2)など) が必要です。およびclose(2) )。バッファリングを行うことを忘れないでください(効率化のため)。

Advanced Unix Programmingなどの優れた本を読んで Linux システム インターフェイスを学習することを強くお勧めします。

アセンブリでマシン レベルでシステム コールを実行する方法は、Linux Assembly Howtoに記載されています(少なくとも 32 ビットの x86 Linux の場合)。

于 2012-07-18T20:19:30.847 に答える