标签: intel

intel机器码到汇编代码问题

专家,我不知道intel x86 machineCode/assemblyCode转换是singleSide还是BothSide?

意思是:assemblyCode ---> machineCode和machineCode ---> assemblyCode都可用.

由于x86 machineCode的大小不同(1-15字节),并且操作码在(1-3字节)中变化,如何确定一个操作码是1byte还是2byte还是3byte?

我从来没有找到x86指令前缀的例子,如果这里是1byte前缀,如何确定它是前缀还是操作码?

当然,assemblyCode ---> machineCode,助记符+ oprand [w/b]的标识可以通过maping某些MappingTable来确定响应machineCode是什么.

但是,当过程逆转时:

{bbbbbbbb,bbbbbbbb,bbbbbbbb,// instruction1 bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,// instruction2 bbbbbbbb,bbbbbbbb // instruction3}

----> {bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb}

我不知道确定一条指令的长度(大小)的重要位或字节.

任何人都会告诉我如何确定?(操作码的大小,前缀示例.)感谢您的帮助.

format x86 assembly intel opcode

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

多核处理器:每个"核心"是以全时钟速度还是全时钟频率的某个部分运行?

假设你有一个(1)Intel/AMD x86-64 bit 2 GHz 8核处理器.

8个内核中的每一个都是在完整的2 GHz运行,还是每个内核运行的时间是整个2 GHz时钟的一部分(例如250 MHz)?

architecture intel microprocessors amd-processor

8
推荐指数
2
解决办法
8009
查看次数

当数据隐藏在对象内时如何使用intel prefetch pragma?

英特尔有助于提供预取编译指示; 例如

#pragma prefetch a
for(i=0; i<m; i++)
  a[i]=b[i]+1;
Run Code Online (Sandbox Code Playgroud)

将由a编译器确定预先获取一定数量的循环周期.

但是如果a不是一个数组而是一个[]被覆盖的类呢?如果operator[]一个简单的数组访问,可以预取仍然以这种方式使用?

(据推测这个问题也适用于此std::vectors).

c++ memory-management intel pragma prefetch

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

如何从汇编程序中获取英特尔处理器的随机数?

我需要从处理器(英特尔酷睿i3)中的英特尔随机发生器获取随机数.我不想使用任何库.我想在C++中使用汇编器粘贴,但我不知道哪些寄存器和指令应该使用.

c++ random assembly intel rdrand

8
推荐指数
2
解决办法
3311
查看次数

为什么MS-DOS不初始化DS和ES寄存器?

为什么DSES寄存器的初始化必须由程序员手动完成?

例如:

MOV AX, DTSEG
MOV DS, AX
Run Code Online (Sandbox Code Playgroud)

另一方面,CSSS寄存器由操作系统(in MS-DOS)初始化.为什么会这样?

assembly dos intel masm x86-16

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

最好的方法是洗掉两个__m128i的64位部分

我有两个__m128is,a并且b,我想要洗牌,以便在64位a的低位64位dst和64位的高位b落在64位的高位64位dst.即

dst[ 0:63]  = a[64:127]
dst[64:127] = b[0:63]
Run Code Online (Sandbox Code Playgroud)

相当于:

__m128i dst = _mm_unpacklo_epi64(_mm_srli_si128i(a, 8), b);
Run Code Online (Sandbox Code Playgroud)

要么

__m128i dst = _mm_castpd_si128(mm_shuffle_pd(_mm_castsi128_pd(a),_mm_castsi128_pd(b),1));
Run Code Online (Sandbox Code Playgroud)

有没有比第一种方法更好的方法呢?第二个只是一条指令,但切换到浮点SIMD执行比第一条指令的额外指令更昂贵.

sse intel simd intrinsics

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

在英特尔SGX中禁用系统调用意味着什么

Intel Software Guard Extensions (SGX)最近正在研究设施编程.SGX的想法是创建一个安全敏感代码加载和执行的安全区.最重要的是,对该飞地的存储器访问(以及许多其他限制)由硬件强制执行.

在其手册中,我发现syscall指令在飞地内是非法的(见表3-1),以及许多其他指令可能会改变权限级别.我想知道这意味着什么.由于内核服务一样open,socket在提高系统调用结束了,这是否意味着禁止syscall指令实际上飞地内禁止代码的任何内核服务,如文件和插座?这对我来说听起来很难说,因为这样一个飞地可以做的事情会受到严重限制.所以我认为我误解了或者有一些解决方法.

kernel intel system-calls

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

AVX512中的128位跨通道操作能提供更好的性能吗?

在为AVX256,AVX512和一天AVX1024设计前瞻性算法时,考虑到大SIMD宽度的完全通用置换的潜在实现复杂性/成本,我想知道即使在AVX512中通常保持隔离128位操作是否更好?

特别是考虑到AVX有128位单元来执行256位操作.

为此,我想知道在所有512位向量中AVX512置换类型操作之间是否存在性能差异,而 512位向量的每个4x128位子向量中是否存在置换类型操作?

performance x86 intel avx avx512

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

Android Studio虚拟设备安装停留在 - 调用安装程序运行英特尔®HAXM安装程序

错误屏幕截图 我刚刚安装了Android studio,并且正在完成创建新虚拟设备的步骤.我被要求在我选择的同一个向导中下载一些东西,然后点击"接受".这个安装已经进行了很长时间但是没有完成.可以有任何理由吗?我能做什么?

android intel haxm

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

如果我不使用围栏,核心可以花多长时间看到另一个核心的写入?

我一直试图谷歌我的问题,但老实说,我不知道如何简洁地陈述问题.

假设我在多核Intel系统中有两个线程.这些线程在同一个NUMA节点上运行.假设线程1写入X一次,然后只是偶尔读取它向前移动.进一步假设,线程2连续读取X. 如果我不使用内存栅栏,在线程1写入X和线程2看到更新值之间可以有多长时间?

我知道X的写入将转到存储缓冲区并从那里到缓存,此时MESIF将启动,线程2将通过QPI查看更新的值.(或者至少这是我收集到的).我假设存储缓冲区将被写入存储围栏中的缓存或者是否需要重用该存储缓冲区条目,但我不知道存储缓冲区是否已分配给写入.

最终我要为自己回答的问题是,如果线程2有可能在一个相当复杂的应用程序中看到线程1的写入几秒钟而正在做其他工作.

x86 intel cpu-architecture memory-barriers lockless

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