标签: x86-64

新的X86_64处理器寄存器的名称是什么?

在哪里可以找到用于此体系结构的新寄存器的名称?

我指的是X86中的寄存​​器,如EAX,ESP,EBX等.但我喜欢它们在64位.

我不认为它们与我拆解C代码时的情况相同,我得到r而不是e.

x86 assembly x86-64 cpu-registers

54
推荐指数
4
解决办法
7万
查看次数

如何使用CMAKE从命令行在Windows上构建x86和/或x64?

使用Visual Studio让cmake在Windows上构建x86的一种方法是这样的:

  1. 启动x86的Visual Studio命令提示符
  2. 运行cmake: cmake -G "NMake Makefiles" \path_to_source\
  3. NMAKE

使用Visual Studio让cmake在Windows上构建x64的一种方法是这样的:

  1. 启动x64的Visual Studio命令提示符
  2. 运行cmake: cmake -G "NMake Makefiles" \path_to_source\
  3. NMAKE

使用Cmake,我如何编译其中一个或两个架构?(就像Visual Studio在IDE中的表现一样)

c x86-64 cmake cross-compiling visual-studio

54
推荐指数
3
解决办法
7万
查看次数

x86中"PAUSE"指令的目的是什么?

我正在尝试创建一个自旋锁的哑版.浏览网页时,我在x86中遇到了一个名为"PAUSE"的汇编指令,该指令用于向处理器提供当前在此CPU上运行自旋锁的提示.英特尔手册和其他可用信息说明了这一点

在大多数情况下,处理器使用此提示来避免内存顺序违规,从而大大提高了处理器性能.因此,建议在所有自旋等待循环中放置PAUSE指令.文档还提到"等待(一些延迟)"是指令的伪实现.

上段的最后一行很直观.如果我没有成功抓住锁,我必须等待一段时间然后再抓住锁.

但是,在旋转锁定的情况下,内存顺序违规是什么意思?"内存顺序违规"是否意味着旋转锁定后指令的错误推测加载/存储?

关于堆栈溢出之前已经询问了自旋锁定问题但是内存顺序违规问题仍未得到解决(至少对于我的理解).

parallel-processing x86 x86-64 intel critical-section

53
推荐指数
2
解决办法
8336
查看次数

要学习汇编 - 我应该从32位还是64位开始?

我真的很想学习装配.我非常擅长c/c ++,但希望更好地了解较低级别的内容.

我意识到之前已经提出了与装配相关的问题,但我只是在寻找一些特定于我的情况的方向:

我正在运行Windows 7,我对如何开始使用汇编感到困惑.我是否必须从x64开始,因为我正在运行Windows 7?有些人说"先从32位开始" - 我该如何做呢?我的操作系统与我为'32'或'64'位写入汇编的能力有什么关系.事实上,'n位'汇编意味着什么,其中n是一个数字?


编辑:

以下是一些帮助我开始组装的链接; 刚刚入门的其他人可能会发现它们很有帮助.随着我继续组装之旅,我将继续更新此列表:)

注意:正如我一直在学习的那样,我决定专注于使用masm32进行编程.因此,以下大多数资源都集中于此.

x86 assembly x86-64 low-level

52
推荐指数
2
解决办法
3万
查看次数

x64和IA-64有什么区别?

我在微软的网站上注意到两个不同的安装程序,一个用于x64,另一个用于IA-64.参考:安装.NET Framework 4.5,4.5.1

我的理解是IA-64是x64的子类,所以我很好奇它为什么会有一个单独的安装程序.如果可能的话,我们将不胜感激.

64-bit x86-64 itanium cpu-architecture

50
推荐指数
4
解决办法
5万
查看次数

malloc如何在多线程环境中工作?

典型的malloc(对于x86-64平台和Linux操作系统)是否在开始时天真地锁定互斥锁并在完成时释放它,或者是否以更精巧的方式更智能地锁定互斥锁,从而减少锁争用?如果它确实是第二种方式,它是如何做到的?

c linux malloc gcc x86-64

48
推荐指数
2
解决办法
2万
查看次数

如何将gdb与LD_PRELOAD一起使用

我用LD_PRELOADing一个特定的库来运行一个程序.像这样.

LD_PRELOAD=./my.so ./my_program
Run Code Online (Sandbox Code Playgroud)

如何使用gdb运行此程序?

c linux gcc gdb x86-64

47
推荐指数
4
解决办法
2万
查看次数

x86_64汇编程序中RBP寄存器的用途是什么?

所以我正在尝试学习一点装配,因为我需要它用于计算机体系结构类.我写了一些程序,比如打印Fibonacci序列.

我认识到每当我编写程序时,我都会使用这3行(正如我从比较生成的汇编代码中学gcc到的那样C):

pushq   %rbp
movq    %rsp, %rbp
subq    $16, %rsp
Run Code Online (Sandbox Code Playgroud)

我有2个问题:

  1. 首先,我为什么需要使用%rbp?使用起来不是很简单%rsp,因为它的内容被移到%rbp了第二行吗?
  2. 为什么我要从中减去任何东西%rsp?我的意思是并非总是16(当我在printf第7行或第8行变量时,我会减去24或减去28

我在虚拟机(4 GB RAM),Intel 64位处理器上使用Manjaro 64位

c assembly x86-64 stack-pointer

45
推荐指数
2
解决办法
4万
查看次数

将32位C++代码移植到64位 - 值得吗?为什么?

我知道x64架构的一些显而易见的好处(更高的可寻址RAM地址等)......但是:

  • 如果我的程序没有真正需要在本机64位模式下运行怎么办?我应该移植它吗?
  • 是否有任何可预见的截止日期为32位支持?
  • 我的应用程序会像原生x64代码一样运行得更快/更好/更安全吗?

c++ 64-bit x86 x86-64 cpu-architecture

44
推荐指数
4
解决办法
1万
查看次数

为什么 __int128_t 在 x86-64 GCC 上比 long long 快?

这是我的测试代码:

#include <chrono>
#include <iostream>
#include <cstdlib>
using namespace std;

using ll = long long;

int main()
{
    __int128_t a, b;
    ll x, y;

    a = rand() + 10000000;
    b = rand() % 50000;
    auto t0 = chrono::steady_clock::now();
    for (int i = 0; i < 100000000; i++)
    {
        a += b;
        a /= b;
        b *= a;
        b -= a;
        a %= b;
    }
    cout << chrono::duration_cast<chrono::milliseconds>(chrono::steady_clock::now() - t0).count() << ' '
         << (ll)a % 100000 << '\n';

    x = …
Run Code Online (Sandbox Code Playgroud)

c++ performance x86-64 cpu-architecture integer-division

43
推荐指数
2
解决办法
3808
查看次数