目次
#Linux x86 (32 ビット) と x64 (64 ビット) の違い
ホームページ 運用・保守 Linuxの運用と保守 Linuxのx64とx86の違いは何ですか

Linuxのx64とx86の違いは何ですか

Jan 11, 2022 pm 06:03 PM
linux x86

相違点: 1. 異なるレジスタ割り当て、x64 には 16 個のレジスタ、x86 には 8 個のレジスタのみ; 2. 異なるアセンブリ命令; 3. 異なる関数呼び出し; 4. 異なるパラメータ渡し; 5. 異なるスタック フレーム、x64 x86 はスタック フレーム ポインターを持たないが、x86 はスタック フレーム ポインターとして ebp を使用します; 6. x64 の計算速度は x86 の計算速度よりも高速です。

Linuxのx64とx86の違いは何ですか

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

#Linux x86 (32 ビット) と x64 (64 ビット) の違い

##0x01: レジスタ割り当ての違い

(1) 64 ビットには 16 個のレジスタがありますが、32 ビットには 8 個しかありません。ただし、最初の 8 つの 32 ビット ビットは異なる名前、つまり e _ を持ちますが、最初の 8 つの 64 ビット ビットは e の代わりに r を使用します (r _)。 e で始まるレジスタ名は対応するレジスタの下位 32 ビットに直接適用できますが、残りのレジスタ名は r8 ~ r15 であり、下位ビットはそれぞれ d、w、b で指定されます。

( 2) 32 ビット 渡されたパラメーターの保存場所としてスタック フレームを使用し、64 ビット レジスタを使用します。rdi、rsi、rdx、rcx、r8、r9 をそれぞれ 1 ~ 6 パラメーターとして使用し、rax を戻り値として使用します。 ;
(3) 64 ビットではスタック フレーム ポインタがありません、32 ビットではスタック フレーム ポインタとして ebp が使用され、64 ビットではこの設定が解除され、rbp が汎用レジスタとして使用されます。 ) 64 ビットは、PC 関連のアドレス指定の一部の形式をサポートします。32 ビットのアドレス指定方法は、jmp を使用する場合にのみ使用されます。

0x02: (新規) アセンブリ命令の違い

mov、push、pop は、クワッド ワードを操作するために mov、pushq、popq の movq シリーズを拡張します。

補足:

(1) movabsq は 32 ビット拡張ではなく、純粋に新しい命令です。 64 ビット リテラル値を 64 ビット レジスタに直接格納するために使用されます。 movq は 32 ビット値しか格納できないため、新しい命令

(2) 64 ビット アセンブリ コードでは ret の前に rep が追加される場合がありますが、ここでの Rep には実際的な意味はありません。 AMD プロセッサは、jmp が到達する場所が直接 ret になることを回避し、プロセッサの動作を高速化するためです。

0x03: 関数呼び出しの違い

(1) x_64 パラメーターはレジスターを介して渡されます (上記を参照);

callq は 8 ビットの戻りアドレスをスタックに保管します;
(2) 多くの関数にはスタック フレームがありません. すべてのローカル変数をレジスタに配置できない関数のみがスタック上にスペースを割り当てます;
(3) 関数は最大 128 バイトのスタック スペースを取得できます。これにより、関数はスタックポインタを変更せずにスタック上に情報を格納することができます(つまり、rsp以下の128バイトの空間をあらかじめ使用できます。この空間はレッドゾーンと呼ばれます。x86-64では利用可能です) );
(4) スタック フレーム ポインターはなくなり、スタック位置はスタック ポインターに関連付けられるようになりました。ほとんどの関数は、呼び出しの開始時に必要なすべてのスタック スペースを割り当て、スタック ポインタを変更しないようにします。
(5) 一部のレジスタは呼び出し先ストレージ レジスタとして設計されており、値が必要な場合は変更する必要があります。今すぐ保存して、後で復元してください。

0x04: 異なるパラメータが渡されました

(1) パラメータを渡すために 6 つのレジスタが使用されます (上記を参照);

(2) 残りのレジスタは以前と同様に渡されます (ただし、これらは RSP に関連しており、ebp はスタック フレーム ポインタとして使用されなくなり、7 番目のパラメータは RSP から始まり、8 番目のパラメータは RSP 8 から始まります)。

(3) 呼び出されると、rsp は 8 ビット下に移動します (リターン アドレスに格納されます)。レジスタ パラメータは影響しません。7 番目以降のパラメータは、rsp 8、rsp 16 から始まる 7 番目になります。 8 番目など;

0x05: スタック フレームの違い

多くの場合、スタック フレームは不要になります。他の関数は呼び出されず、レジスタはパラメータを格納するのに十分なため、戻りアドレスのみを格納する必要があります。

スタック フレームが必要な状況:

(1) ローカル変数が多すぎてレジスタが足りない;

(2) 一部のローカル変数が配列または構造体である;
(3) 使用される関数アドレス演算子はローカル変数のアドレスを計算するために使用されます;
(4) 関数はスタックを使用して一部のパラメーターを別の関数に転送する必要があります;
(5) 関数は格納されているいくつかのレジスタの状態を保存する必要があります呼び出し先による (回復を容易にするため);

しかし、今日のスタック フレームは固定サイズであることが多く、関数呼び出しの開始時に設定されます。呼び出し全体を通じて、スタックの先頭ポインターは変更されません。に渡すことができるように、対応する値を操作するためにオフセットと結合されるため、EBP はスタック フレーム ポインターとして必要なくなります。多くの場合、「スタック フレーム」は存在しないと考えられますが、すべての関数呼び出しには、スタックにプッシュされるリターン アドレスが必要です。呼び出し元の状態も保存されるため、このアドレスを「スタック フレーム」と考えることもできます。

0x06: 異なる動作速度

64 ビット CPU のデータ幅は 64 ビットであり、64 ビット命令セットは 64 ビットで実行できます。データ命令、つまりプロセッサは一度に 64 ビットのデータを抽出でき、これは 32 ビットの 2 倍であり、理論上はそれに応じてパフォーマンスも 2 倍になります。

関連する推奨事項: 「Linux ビデオ チュートリアル

以上がLinuxのx64とx86の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Apacheを始める方法 Apacheを始める方法 Apr 13, 2025 pm 01:06 PM

Apacheを開始する手順は次のとおりです。Apache(コマンド:sudo apt-get install apache2または公式Webサイトからダウンロード)をインストールします(linux:linux:sudo systemctl start apache2; windows:apache2.4 "serviceを右クリックして「開始」を右クリック) (オプション、Linux:Sudo SystemCtl

Apache80ポートが占有されている場合はどうすればよいですか Apache80ポートが占有されている場合はどうすればよいですか Apr 13, 2025 pm 01:24 PM

Apache 80ポートが占有されている場合、ソリューションは次のとおりです。ポートを占有するプロセスを見つけて閉じます。ファイアウォールの設定を確認して、Apacheがブロックされていないことを確認してください。上記の方法が機能しない場合は、Apacheを再構成して別のポートを使用してください。 Apacheサービスを再起動します。

DebianのNginx SSLパフォーマンスを監視する方法 DebianのNginx SSLパフォーマンスを監視する方法 Apr 12, 2025 pm 10:18 PM

この記事では、Debianシステム上のNginxサーバーのSSLパフォーマンスを効果的に監視する方法について説明します。 Nginxexporterを使用して、NginxステータスデータをPrometheusにエクスポートし、Grafanaを介して視覚的に表示します。ステップ1:NGINXの構成最初に、NGINX構成ファイルのSTUB_STATUSモジュールを有効にして、NGINXのステータス情報を取得する必要があります。 NGINX構成ファイルに次のスニペットを追加します(通常は/etc/nginx/nginx.confにあるか、そのインクルードファイルにあります):location/nginx_status {stub_status

Debianシステムでリサイクルビンをセットアップする方法 Debianシステムでリサイクルビンをセットアップする方法 Apr 12, 2025 pm 10:51 PM

この記事では、デビアンシステムでリサイクルビンを構成する2つの方法を紹介します:グラフィカルインターフェイスとコマンドライン。方法1:Nautilusグラフィカルインターフェイスを使用して、ファイルマネージャーを開きます。デスクトップまたはアプリケーションメニューでNautilusファイルマネージャー(通常は「ファイル」と呼ばれる)を見つけて起動します。リサイクルビンを見つけてください:左ナビゲーションバーのリサイクルビンフォルダーを探してください。見つからない場合は、「他の場所」または「コンピューター」をクリックして検索してみてください。リサイクルビンプロパティの構成:「リサイクルビン」を右クリックし、「プロパティ」を選択します。プロパティウィンドウで、次の設定を調整できます。最大サイズ:リサイクルビンで使用可能なディスクスペースを制限します。保持時間:リサイクルビンでファイルが自動的に削除される前に保存を設定します

ネットワーク監視におけるDebian Snifferの重要性 ネットワーク監視におけるDebian Snifferの重要性 Apr 12, 2025 pm 11:03 PM

検索結果は「DebiansNiffer」とネットワークモニタリングにおけるその特定のアプリケーションに直接言及するわけではありませんが、「Sniffer」はネットワークパケットキャプチャ分析ツールを指し、Debianシステムでのアプリケーションは他のLinux分布と本質的に違いはありません。ネットワークの監視は、ネットワークの安定性を維持し、パフォーマンスを最適化するために重要であり、パケットキャプチャ分析ツールが重要な役割を果たします。以下は、ネットワーク監視ツールの重要な役割(Debianシステムで実行されるSnifferなど)を説明しています。ネットワーク監視ツールの価値:高速障害場所:帯域幅の使用状況、遅延、パケット損失率など、ネットワーク障害の根本原因を迅速に特定し、トラブルシューティング時間を短縮できるようなネットワークメトリックのリアルタイム監視。

Debian Readdirのパフォーマンスを最適化する方法 Debian Readdirのパフォーマンスを最適化する方法 Apr 13, 2025 am 08:48 AM

Debian Systemsでは、Directoryコンテンツを読み取るためにReadDirシステム呼び出しが使用されます。パフォーマンスが良くない場合は、次の最適化戦略を試してください。ディレクトリファイルの数を簡素化します。大きなディレクトリをできる限り複数の小さなディレクトリに分割し、Readdirコールごとに処理されたアイテムの数を減らします。ディレクトリコンテンツのキャッシュを有効にする:キャッシュメカニズムを構築し、定期的にキャッシュを更新するか、ディレクトリコンテンツが変更されたときに、頻繁な呼び出しをreaddirに削減します。メモリキャッシュ(memcachedやredisなど)またはローカルキャッシュ(ファイルやデータベースなど)を考慮することができます。効率的なデータ構造を採用する:ディレクトリトラバーサルを自分で実装する場合、より効率的なデータ構造(線形検索の代わりにハッシュテーブルなど)を選択してディレクトリ情報を保存およびアクセスする

Apacheサーバーを再起動する方法 Apacheサーバーを再起動する方法 Apr 13, 2025 pm 01:12 PM

Apacheサーバーを再起動するには、次の手順に従ってください。Linux/MacOS:sudo systemctl restart apache2を実行します。 Windows:Net Stop apache2.4を実行し、ネット開始apache2.4を実行します。 Netstat -A |を実行しますサーバーのステータスを確認するには、STR 80を見つけます。

Apacheを開始できない問題を解決する方法 Apacheを開始できない問題を解決する方法 Apr 13, 2025 pm 01:21 PM

Apacheは、次の理由で起動できません。構成ファイル構文エラー。他のアプリケーションポートとの競合。権限の問題。メモリから。デッドロックを処理します。デーモン障害。 Selinux許可の問題。ファイアウォールの問題。ソフトウェアの競合。

See all articles