問題タブ [yasm]
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.
memory - メモリ位置オペランドの asm 使用法
「記憶場所」の定義に困っています。「Intel 64 and IA-32 Software Developer's Manual」によると、多くの命令でメモリ位置をオペランドとして使用できます。たとえば、MOVBE (バイトをスワップした後にデータを移動):
命令: MOVBE m32 , r32
問題は、メモリの場所をどのように定義するかです。.bss セクションで定義された変数を使用しようとしました:
編集:->
<-EDIT
SHR がコメント アウトされている場合、yasm (yasm -f elf64 .asm) は問題なくコンパイルされますが、stdio を実行すると、次のように表示されます: Illegal Instruction
また、MOVBE がコメント アウトされている場合、コンパイル時に次のエラーが発生します:エラー: オペランド 1 のサイズが無効です
命令セットのリファレンスで示されている「m」オプションを使用するためにメモリを割り当てるにはどうすればよいですか?
[CPU=x64、コンパイラ=yasm]
macos - Mac ターミナル経由で FFmpeg をインストールしようとしていて、yasm フォルダーに cd できません
ターミナル経由で yasm アーカイブを展開できなかったので、Finder 経由で展開し、ターミナルに戻ってフォルダに cd したところ、Finder で正しく見ているにもかかわらず存在しないと表示されました。私は何が欠けていますか?
スクリーンショットを撮りましたが、投稿するほど評判が良くありません。ここで見ることができます:
optimization - x86 インライン yasm を x64 に変換
プロジェクトでインラインyasmを使用して実装しました。現在、プロジェクトはopenMPを使用してタスクを並列化し、パフォーマンスを向上させています。x86 プラットフォームでは、openMP が実行できません。理由は、x86 環境に十分なメモリがないためです。したがって、x64環境を使用してコンパイルすると、実行できます。しかし、パフォーマンスを最適化するために yasm コードを使用すると、うまく機能しません (yasm のコードは x86 環境で記述されています)。
私はそれについてすべて検索しましたが、この問題を解決するための有用な情報が見つかりません.
問題を解決する方法を教えてくれる人。関連情報を含むドキュメントを見たいです。
ご協力ありがとうございました。
assembly - アセンブリで文字列の文字をループする
文字列のリストがある場合、各文字列の各文字をループするにはどうすればよいですか? リストを言うdata
各メンバーにアクセスするにはどうすればよいですか? 各文字列の長さが 9 の定数であることはわかっています。また、通常の型の場合はbyte[data+rsi]
rsi がカウンターになることも理解していますが、文字列が使用されている場合、これは何をするのでしょうか?
c++ - XCode は、YASM を使用して C++ lib のアセンブリ ファイルをコンパイルします。
Mac OS X (Maverick) 64 ビットでビルドする必要がある C++ スタティック ライブラリがあります。ライブラリは C++ を使用し、いくつかの .asm MMX 命令ファイルもあります。C++ コンパイラは Clang なので、ここでも YASM コンパイラが必要です。Linux とWindows では比較的簡単にすべてのセットアップを行うことができましたが、Mac ではいくつか問題が発生します。
まず、この投稿に基づいて MAC に YASM をインストールしました。
次に、ここで指示されているように、YASM をビルド ツールとして XCode に追加しました。
以前は .asm ファイルのコンテンツを解析できないというエラーが発生していましたが、現在はなくなりました。代わりに、std::ratio および std::chrono ファイルに複数のエラーがあります。
それらのほとんどは次のようなものです。
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/ratio:252:81: 不明なクラス名 'false_type'; '::std::false_type' のことですか?
今、私は別のライブラリでこれらのエラーを抱えていて、libstdc++.dylibとリンクすることで解決しましたが、ここではありません。また、「ビルド設定」に移動し、「Apple LLVM 5.0 -Language -C++」の下で CLANG_CXX_LIBRARY を libc++ から libstdc++ に変更すると、以前のエラーはなくなり、localefwd.h および locale_classes.h からエラーが発生し始めます。
YASM のコンパイル オプションが間違っているか、YASM が libstdc++ とリンクしていない可能性があります。それともYASMとは関係ないのでしょうか?
assembly - yasm、リストへのポインターとして 64 ビット レジスターを使用し、オフセットを 32 ビット レジスターにする
以前のコードの一部をアセンブリのグローバル関数に移動するのに問題があります。受け入れるアルゴリズムがありlen
、リストの長さはダブルワード自体のリストです。使用していた関数に移動する前にlst
len
lst
dword[lst+edi*4] ; offset
しかし今、それは書面lst
に渡されますrdi
dword[rdi+edi*4]
「エラー: 有効なアドレスが無効です」というエラーが表示される
これを避けるために何ができますか?
assembly - x86 64 ビット ror、shl を理解する
アセンブリで ror と shl が正確に何をするのか理解できません。ror: ビットを右に回転させ、左の上位ビットに戻します。
しかし、それはどういう意味ですか?私はそれについて頭を包むことができません。のように
何が起こるのですか?
assembly - アセンブリ: 文字列の内容を別のレジスタにコピーします
ある文字列の内容を別の文字列にコピーする方法がわかりません。これが私が取り組んでいるものです: register 内の文字列のアドレスが与えられた場合、文字列rbx
のそのアドレスの内容を別の register(argument 4) にコピーする必要がありますrdx
。
これが私が現在行っていることです
問題は、rdx に8qword
文字しか格納できないのに対し、実際の最大値は 80 (プログラムの開始時に定義した任意の最大値) であることです。もちろん、変更することもできますが、8 文字から 16 文字になるため、これで問題が解決するわけではありません。上記の関数に文字列を渡すと、コピーの代入は 8 文字しか処理しないため、 が返されます。qword
dqword
Arguments
Argument
これはおそらく非常に単純な解決策であるため、前もってお詫び申し上げますが、私は組み立てに非常に慣れていません。ある文字列の内容を別の文字列に移動するにはどうすればよいですか?