相关疑难解决方法(0)

在现代x86上有哪些方法可以有效地扩展指令长度?

想象一下,您希望将一系列x86汇编指令与某些边界对齐.例如,您可能希望将循环对齐到16或32字节的边界,或者将指令打包以使它们有效地放置在uop缓存中或其他任何位置.

实现这一目标的最简单方法是单字节NOP指令,紧接着是多字节NOP.虽然后者通常效率更高,但这两种方法都不是免费的:NOP使用前端执行资源,并且还计入现代x86上的4宽1重命名限制.

另一个选择是以某种方式延长一些指令以获得所需的对齐.如果这样做没有引入新的停顿,它似乎比NOP方法更好.如何在最近的x86 CPU上有效地延长指令?

在理想的世界中,延长技术同时是:

  • 适用于大多数说明
  • 能够通过可变数量延长指令
  • 不会停止或以其他方式减慢解码器的速度
  • 在uop缓存中有效表示

有一种方法不可能同时满足所有上述要点,因此很好的答案可能会解决各种权衡问题.


1 AMD Ryzen的限制为5或6.

optimization performance x86 assembly micro-optimization

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

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

如何减轻英特尔 jcc 勘误对 gcc 的影响?

如果我有一个受Intel jcc erratum约束的芯片,我如何在 gcc 中启用缓解(它调整分支位置以避免有问题的对齐),以及哪些 gcc 版本支持它?

x86 gcc intel compiler-flags

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

如何在 Delphi 汇编器中使用“.align”来协调短条件跳转和分支目标对齐?

如何在 Delphi 汇编器中协调短条件跳转与分支目标对齐?

\n\n

I\xe2\x80\x99m 使用 Delphi 版本 10.2 Tokyo,针对 32 位和 64 位汇编,完全使用汇编编写一些函数。

\n\n

如果我不\xe2\x80\x99t 使用 .align,编译器会正确short编码条件跳转指令(2 字节指令,由 1 字节操作码074h和 1 字节相对偏移量 -+ 最多 07Fh 组成)。但是,如果我曾经放置过一个.align,即使是小到.align 4- 所有条件跳转指令都位于 .align 之前并且目标位于.align- 在这种情况下,所有这些指令都变成 6 字节指令,而不是 2 字节指令他们应该是。只有位于 .align 之后的指令仍被正确编码为 2 字节short

\n\n

Delphi 汇编器不接受 \xe2\x80\x99t 接受 \xe2\x80\x98short\xe2\x80\x99 前缀。

\n\n

如何协调短条件跳转与分支目标对齐.align在 Delphi 汇编器中协调短条件跳转与分支目标对齐?

\n\n

这是一个示例程序 \xe2\x80\x93 请注意,有一个.align这是一个示例程序 \xe2\x80\x93 请注意中间

\n\n
    procedure Test; assembler;\n    label\n      label1, …
Run Code Online (Sandbox Code Playgroud)

delphi x86 assembly memory-alignment

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

大会中LONG和FAR跳跃之间有什么区别?

我正在查看一些用于汇编的练习代码,并且赋值基本上是用另一个跳转点替换.

原始jmp是SHORT jmp,使用此指令无法到达我需要接近的终点.

我现在有三个选项,我要么删除'SHORT',要么插入'LONG'或者我插入'FAR'.

如果有任何文件指出它们之间的差异,我还没有找到它.任何人都可以在这里帮助吗?

x86 assembly

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