23得票2回答
高效地将CPU寄存器中的所有位设置为1

清除所有位通常使用异或操作,例如:XOR eax, eax。那有没有类似的技巧来设置所有位呢? 我所能想到的就是通过额外的指令来反转所有零位。

34得票3回答
执行uop数量不是处理器宽度的倍数的循环会降低性能吗?

我想知道在最近的x86处理器上,各种大小的循环在uop数量的函数下的表现如何。以下是Peter Cordes在另一个问题中提出非4的倍数计数问题的引用: “如果循环不是4个uop的倍数(即为abc, abc, ...而不是abca, bcab, ...),那么从循环缓冲区输出的uop带宽不是...

35得票6回答
为什么Visual Studio使用xchg ax,ax?

我浏览了我的程序反汇编(因为它崩溃了),发现有很多标签。xchg ax, ax 我谷歌一下发现它本质上是一个nop(汇编语言中的空操作),但为什么Visual Studio会执行xchg而不是noop呢? 该应用程序是一个64位C# .NET3.5应用程序,由Visual Studio编译。

10得票2回答
numpy的around/rint与astype(int)相比速度较慢。

如果我有这样的内容:x=np.random.rand(60000)*400-200。iPython的%timeit显示: x.astype(int) 耗时0.14毫秒 np.rint(x) 和 np.around(x) 耗时1.01毫秒 请注意,在rint和around情况下,仍然需要...

28得票5回答
如何直接向屏幕输出内容?

我是一个对汇编语言非常感兴趣的十几岁少年。我正在尝试用Intel x86汇编语言编写一个小型操作系统,想知道如何直接向屏幕写入内容,而不依赖于BIOS或其他任何操作系统。我浏览了coreboot、Linux和Kolibri等源代码,希望找到并理解一些能实现该功能的代码片段,但到目前为止还没有成...

10得票6回答
C++ CPU寄存器使用

在 C++ 中,局部变量总是分配在栈上。栈是您的应用程序可以占用的允许内存的一部分。该内存保存在 RAM 中(如果未交换到磁盘)。那么,C++ 编译器是否总是创建将局部变量存储在堆栈上的汇编代码? 以以下简单代码为例:int foo( int n ) { return ++n; } 在...

20得票5回答
如何在ARM上进行整数(有符号或无符号)除法?

我专门从事Cortex-A8和Cortex-A9的工作。我知道有些架构没有整数除法,但除了转换为浮点数、进行除法运算,再将结果转换为整数外,还有什么更好的办法吗?或者这确实是最好的解决方案? 干杯!=)

21得票2回答
如何使用十六进制编辑器在Linux上创建可执行的ELF文件?

只是好奇。显然这不是实际编程的非常好的解决方案,但是假设我想在Bless(一个十六进制编辑器)中创建一个可执行文件。 我的架构是x86。我能制作一个非常简单的程序吗? 一个Hello World? 一个无限循环?类似于这个问题,但在Linux下。

8得票2回答
线性地址、物理地址、逻辑地址和虚拟地址之间有什么区别?

我正在阅读英特尔软件开发手册,以了解操作系统的工作原理,但这四个寻址术语使我感到困惑。以下是我的理解,请纠正我。 线性地址:对于一个隔离的程序来说,它看起来像是一长串从地址0开始的内存。该程序的所有段都将从其线性地址开始寻址。它可能在RAM中或磁盘中。 物理地址:出现在RAM或主存储器引脚中的...

7得票1回答
Mach-O 64位格式不支持32位绝对地址。 NASM访问数组

在我的Mac电脑上运行此代码,使用命令: nasm -f macho64 -o max.a maximum.asm 这是我尝试在电脑上运行的代码,目的是找到数组中最大的数字。 section .data data_items: dd 3,67,34,222,45,75,54,...