小编Rya*_*own的帖子

x64 MOV 32位立即数到64位寄存器

本页代码部分的第二条指令:

x86

看起来像这样: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)

该指令似乎有效,但是如何呢?

assembly x86-64 machine-code instructions immediate-operand

2
推荐指数
1
解决办法
3859
查看次数

Win32 控制台写入 (C/C++)

我想在 C++ 程序中写入控制台而不使用“std”库,也就是说,只使用“Windows.h”中的函数。原因是我想深入研究可移植的可执行文件并看到调用的是这个函数,而不是一堆函数层。任何人都知道如何做到这一点和/或我在哪里可以找到“Windows.h”功能的指南?

c++ winapi

1
推荐指数
1
解决办法
5035
查看次数

在intel x64程序集中执行功能的最快(CPU方式)方式?

我一直在阅读有关汇编函数的内容,我对是否使用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)

c x86 assembly stdcall

1
推荐指数
1
解决办法
121
查看次数

XMM寄存器0未被使用

在Intel x64手册中,它表示在32位SSE2模式下XMM寄存器为0-7.为什么95%使用这些寄存器的指令跳过0并使用1-4?

x86 assembly sse

-1
推荐指数
1
解决办法
81
查看次数

C#泛型继承和协方差第2部分

这是我的原始主题: 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)

c# generics

-5
推荐指数
1
解决办法
338
查看次数