标签: instruction-set

在x86汇编中编译的每条指令有多少个字节?

0x004012d0 <main+0>:    push   %ebp
0x004012d1 <main+1>:    mov    %esp,%ebp
0x004012d3 <main+3>:    sub    $0x28,%esp
Run Code Online (Sandbox Code Playgroud)

如果地址不可用,我们可以自己计算吗?

我的意思是我们只有这个:

push   %ebp
mov    %esp,%ebp
sub    $0x28,%esp
Run Code Online (Sandbox Code Playgroud)

x86 assembly gnu-assembler instruction-set

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

标准C++ 11代码等同于PEXT Haswell指令(可能由编译器优化)

Haswell架构提出了几条新指令.其中一个是PEXT(并行位提取),其功能由此图像解释(源于此处):

PEXT

它需要一个值r2和一个掩码r3,并将提取的位r2放入r1.

我的问题如下:纯标准 C++ 11中优化模板化函数的等效代码是什么,将来可能会被编译器优化为该指令.

c++ bit-manipulation instruction-set compiler-optimization c++11

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

在64位模式下只有REX前缀的指令是什么意思?

例如,其中一个MOV有两个版本,一个带有REX,一个没有(来自英特尔的doc):

88 /r MOV r/m8, r8
REX + 88 /r MOV r/m8***, r8***

***In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
Run Code Online (Sandbox Code Playgroud)

根据我的理解,2条指令是相同的,除了第二条指令使用额外的字节并提供更少的选项......所以基本上它是无用的.

我错过了什么?

assembly x86-64 instruction-set cpu-registers

7
推荐指数
2
解决办法
3022
查看次数

有没有办法计算java中的指令数量

我想知道我的java代码消耗了多少指令来执行.我正在寻找一个开始指令计数的api,最后应该返回最终的指令总数

例如:

public static void main()
{
  int a=0;
  int b=0;
  int c=0;
  startCountinst();
  if(a==b)
  {
     c++;
  }
  int n = stopCountinst();
}
Run Code Online (Sandbox Code Playgroud)

最后,n应表示调用后执行的指令总数startCountinst().在java中可以计算指令吗?

java cpu instruction-set

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

为什么ARM说"链接寄存器支持快速叶函数调用"

我最近遇到了链接寄存器和叶函数的概念.

我从之前的SO读取中了解到,LR告诉代码在执行过程中的位置.我还知道叶子函数是一个函数,它位于函数调用层次结构的末尾.

ARM维基百科页面称:

链接寄存器支持快速叶函数调用.

为什么这个说法属实? 我查看了ARMARM(架构参考手册),链接寄存器的信息很少.

assembly arm instruction-set cpu-architecture

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

gcc的__builtin_cpu_supports检查OS支持吗?

GCC编译器提供了一组内置函数来测试某些处理器功能,例如某些指令集的可用性.但是,根据这个线程,我们也可能知道操作系统可能无法启用某些cpu功能.所以问题是:__builtin_cpu_supports内在函数还检查操作系统是否启用了某些处理器功能?

c gcc simd instruction-set intrinsics

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

在哪里可以找到 x86_64 汇编指令列表?

这里是一个完整的(我认为)NASM 指令列表的链接,我认为它也涵盖了 Intel 处理器的 x64 位指令集。

然而,我希望在某个地方有一个完整的说明列表,仅此而已,而不需要对每个说明进行冗长的解释。

这样的事情存在吗?这对于学习命令(你可以猜出它们的大部分含义,然后用谷歌搜索你猜不到的那些),当你记不住命令时提高你的记忆力,并扫描合适的命令来满足你的要求,这将很有用。

assembly x86-64 instruction-set

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

`b .` 在这个汇编代码中是什么意思?

所以我正在研究Redox OS(一个用 Rust 制作的操作系统)的源代码,看看我是否能学到一些东西。

我读的汇编文件的start.sbootloader的文件夹。在interrupt_vector_table标签中,我们有:

interrupt_vector_table:
    b . @ Reset
    b . 
    b . @ SWI instruction
    b . 
    b .
    b .
    b .
    b .
Run Code Online (Sandbox Code Playgroud)

究竟是b .什么?

我不是一个完整的组装初学者,我以前从未遇到过这种情况。

assembly arm gnu-assembler instruction-set

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

a+b+c 的 add3 指令,具有一次舍入

背景

众所周知,两个浮点数的精确乘积并不总是浮点数,但误差exact(a*b) - float(a*b)却是。一些精确乘法的代码通过返回两个数字来利用这一点

res = a * b
err = fma(a, b, -res)
Run Code Online (Sandbox Code Playgroud)

这利用了融合乘加指令,该指令(a*b)+c 通过一次舍入返回表达式。

问题

现在,我想对sums做同样的事情,即

res = a + b
err = add3(a, b, -res)
Run Code Online (Sandbox Code Playgroud)

add3应该返回(a+b)+c 具有一次舍入的表达式。

除了这篇文章之外,我找不到add3现实世界中实际存在的提示。

是否有包含以下内容的CPU指令集add3?有语言实现它吗?

floating-point instruction-set floating-accuracy instructions

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

为什么 JALR 对偏移量的 LSB 进行编码?

我们知道jal指定了一个 21 位的偏移量。但是,它不编码 21 位偏移量而是编码 20 位偏移量。原因是地址的最低有效位始终为零,因为最小可能的 RISC-V 指令是 2 个字节,因此该位未在指令中编码。

通过以这种方式对偏移进行编码,它可以提供 ±1MiB 的跳跃范围。如果jal确实对 LSB 进行编码,它将仅提供 ±512KiB 的跳跃范围。

但是,jalr指定 12 位偏移量的指令确实对 LSB 进行了编码。这将跳跃范围减少到 ±2kiB(而不是 ±4kiB)。我知道它jalr使用 I 型格式,它与addi此类指令的立即数的 LSB 必须编码相同。但是,我认为没有理由必须对jalr.

assembly instruction-set riscv instruction-encoding

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