本页代码部分的第二条指令:
看起来像这样:MOV r9d, 0。编码如下:41 B9 00 00 00 00
唯一的问题是... Intel x64 手册中没有任何MOV指令可以获取 4 字节立即数并将其放入 64 位寄存器中。
这些是英特尔手册中的说明:
B0+ rb MOV r8, imm8 Move imm8 to r8.
REX + B0+ rb MOV r8***, imm8 Move imm8 to r8.
B8+ rw MOV r16, imm16 Move imm16 to r16.
B8+ rd MOV r32, imm32 Move imm32 to r32.
REX.W + B8+ rd MOV r64, imm64 OI Valid N.E. Move imm64 to r64.
Run Code Online (Sandbox Code Playgroud)
该指令似乎有效,但是如何呢?
我想在 C++ 程序中写入控制台而不使用“std”库,也就是说,只使用“Windows.h”中的函数。原因是我想深入研究可移植的可执行文件并看到调用的是这个函数,而不是一堆函数层。任何人都知道如何做到这一点和/或我在哪里可以找到“Windows.h”功能的指南?
我一直在阅读有关汇编函数的内容,我对是否使用enter和exit或只是使用call/return指令进行快速执行感到困惑.一路快,另一路小吗?例如,在没有内联函数的情况下,在汇编中执行此操作的最快(stdcall)方法是什么:
static Int32 Add(Int32 a, Int32 b) {
return a + b;
}
int main() {
Int32 i = Add(1, 3);
}
Run Code Online (Sandbox Code Playgroud) 在Intel x64手册中,它表示在32位SSE2模式下XMM寄存器为0-7.为什么95%使用这些寄存器的指令跳过0并使用1-4?
这是我的原始主题: C#泛型继承和协方差
在我的只读接口上,我希望继承工作.
public delegate Boolean EnumerateItemsDelegate<out ItemType>(ItemType item);
public interface IReadOnlyCollection<out ItemType>
{
Boolean ContainsItem(ItemType item);
Array CopyToArray();
void EnumerateItems(EnumerateItemsDelegate<ItemType> enumerateDelegate);
UInt32 Count { get; }
UInt32 Capacity { get; }
}
Run Code Online (Sandbox Code Playgroud)
像这样编译除外:-p
这就是我想要的工作:
IReadOnlyCollection<String> s;
IReadOnlyCollection<Object> o = s;
Run Code Online (Sandbox Code Playgroud)