8得票2回答
编码ADC EAX,ECX - 两种不同的编码方式?(体系结构x86)

我正在查看一份英特尔指令集手册,看起来有两种不同形式的 ADC 可以匹配/编码 ADC EAX, ECX ,如下所示: ADC r/m32, r32 (11 /r , which encodes to 11C8) 或者 ADC r32, r/m32 (13 /r, which en...

30得票2回答
x86寄存器在movsb指令中表示源位置是哪个?

movsb指令中,x86寄存器表示源地址位置的是哪一个?

7得票1回答
FP和整数除法在x86 CPU上竞争相同的吞吐量资源吗?

我们知道,英特尔CPU在端口0上的非完全流水线除法执行单元上进行整数除法和FP div / sqrt。 我们从IACA输出,其他已发布的内容和实验测试中了解到这一点。 (例如https://agner.org/optimize/) 但是,FP和整数是否有独立的除法器(仅通过端口0竞争分派),...

11得票4回答
非时间相关负载和硬件预取器,它们能一起工作吗?

执行一系列连续的_mm_stream_load_si128()调用(MOVNTDQA)时,硬件预取器是否仍会启动,或者应该使用显式软件预取(带有NTA提示),以便在避免缓存污染的同时获得预取益处? 我问这个问题是因为它们的目标似乎对我来说是相互矛盾的。流式加载将跳过缓存获取数据,而预取器则尝...

53得票5回答
为什么线性读取-随机写入并不比随机读取-线性写入更快?

我目前正在尝试更好地理解与内存/缓存相关的性能问题。我在某处读到过,对于读取操作而言,内存局部性比写入更重要,因为在前者的情况下,CPU必须等待数据,而在后者的情况下,它可以直接发送数据并忘记它们。 有了这个想法,我进行了以下简单粗暴的测试:我编写了一个脚本,创建了一个由N个随机浮点数和一个...

9得票3回答
SMP多线程如何共享内存和中断?

我正在为我的内核做一些输入缓冲区的工作,有一些问题需要解答。在双核机器上,我知道可以同时运行多个“进程”。但我不知道操作系统和各个程序如何保护数据冲突。 关于这个话题,我想了解两件事情: (1) 中断发生在哪里?它们是否保证只在一个核心上发生,而不是在另一个核心上发生?这个特性能否用来确保...

36得票8回答
为什么floor()函数执行速度如此缓慢?

最近我写了一些代码(ISO/ANSI C),然而它的性能表现令人惊讶。长话短说,罪魁祸首是 floor() 函数。不仅速度慢,而且在使用英特尔编译器(即 ICL)进行向量化时也无法实现。 以下是对在二维矩阵中的所有单元格执行 floor 的一些基准测试:VC: 0.10 ICL: 0.20...

9得票1回答
汇编语言编程提示和技巧

我正在尝试编写自己的“玩具”操作系统,目前大部分使用汇编语言(NASM) - 部分原因是我希望它能帮助我理解x86反汇编,另一方面是因为我发现它相当有趣!这是我第一次使用汇编语言编程 - 我学得比我预期的要快,但是像学习任何显著不同的语言一样,我发现我的代码结构相当混乱,因为我试图弄清楚应该使...

13得票1回答
无用的分配堆栈空间?

为什么这个函数在调用gets()之前会分配比所需更多的堆栈空间? echo: pushl %ebp movl %esp, %ebp pushl %ebx leal -8(%ebp), %ebx subl $20, %esp <-- Wh...

11得票5回答
x86跳转到一个地址

作为安全课程的作业,我试图在我的代码中使用 __asm__("jmp 0xbffff994");,但是当我在gdb中反汇编时,指令被更改为 jmp 0xc8047e2a。有什么想法,如何跳转到特定地址?