私は非常に厳密に制限されたASMコードを書いています。これらの冗長な末尾のゼロを削除することはできますか?
お知らせNASMによって生成されたオペコードのこのグループ:
8AA4241C020000 mov ah,[esp+0x21c]
および類似:
051C020000 add eax,0x21c ; 4 extra 0's!
8D84241C020000 lea eax,[esp+0x21c] ; Brutal!
は、あなたがAにオフセット15bitを適用しようとするプロセッサと通信する方法があります32ビットレジスタ、そしてそれ自身の0パディングを理解させますか?
いくつかのガイダンスについてはhttps://c9x.me/x86/html/file_module_x86_id_176.htmlまでコーディネートしています。余分な2バイトはここにかそこらで実際に私の人生を救うでしょう!
も受け入れ:手への道がある場合
mov eax,[esp+0x21c]
push eax
:それを小さくする声明を書き換える
代替方法を、最終的に私はこのインスタンス内のためつもりだことのようなものですそれを超小型にするためにエンコードして、私はその技術を見たいと思っています。
そこにはLEAの例があります; – baordog
プロセッサマニュアルには、利用可能なものが記載されています。 16ビットオフセットは、16ビットレジスタでのみサポートされています。あなたは手のエンコーディングについて何を意味するか分かりません。あなたは何かを作ることができないのではありません。 –
レジスタの上部( 'xor ebx、ebx')をゼロにしてから、' mov bx、21c'の中で16bitの値を移動し、 'ebx'を使わずに)必要に応じて使用することができます(' add eax、 ebx)。 xorは無料ではありませんが、このトリックを複数回実行している場合は... –