77得票7回答
为什么位序对于位域是一个问题?

任何使用位域的可移植代码似乎都区分大小端平台。以Linux内核中struct iphdr的声明为例,可以看到这样的代码。我不明白位元顺序为什么成为问题。 据我所知,位域是纯粹的编译器构造,用于便捷的位级操作。 例如,考虑以下位域: struct ParsedInt { unsig...

7得票2回答
FWORD中的F代表什么?

我正在学习汇编语言,遇到了FWORD(6字节)。我很好奇F代表什么?维基页面上没有相关信息,MSDN上也没有。 https://en.wikipedia.org/wiki/FWord https://msdn.microsoft.com/en-us/library/26c4cbza.aspx

8得票3回答
如何在Windows中打开磁盘并以低级别读取数据?

我知道在Linux中,打开磁盘并从低级别开始读取数据很简单,只需使用/dev/sda命令即可。但在Windows中,如何打开磁盘并开始低级别的数据读取呢? 在Python中,我尝试了以下代码: f = open("K:", "r") 我遇到了这个错误: Traceback (most...

10得票2回答
计算8个AVX单精度浮点向量的8个水平求和

我有8个AVX向量,每个向量包含8个浮点数(总共64个浮点数),我想将每个向量中的元素相加在一起(基本上执行8个水平求和)。 目前,我正在使用以下代码:__m256 HorizontalSums(__m256 v0, __m256 v1, __m256 v2, __m256 v3, __m2...

8得票5回答
为什么要使用函数调用而不是变量地址来检测堆栈增长方向?

我看到了关于检测堆栈增长的不同回答,我了解到在现代架构中,堆栈可能会随机增长,可能会在堆上创建等等。 然而,在这个经典的面试问题中,我想要理解为什么人们使用函数调用而不是比较同一函数中的2个本地变量。我认为肯定有某些特殊的原因,但作为一个非C/低级开发者[Java :)],我只是猜测。 这...

7得票3回答
我该如何学习编写控制台模拟器?

可能重复: 模拟器如何工作以及它们是如何编写的? 我想尝试编写一个基本的Gameboy模拟器,甚至可能是NES模拟器。我知道C语言的基础知识,我还擅长Java,所以我知道编程的必要基础。但我不知道的是,人们如何将所有数据处理成C程序并从中创建模拟器。我知道应该从源代码学习,但是仅凭一堆代码...

10得票2回答
CPU如何执行像MUL/MULT这样的指令?

MUL(x86)/MULT(mips)在不同的汇编语言中均表示乘法。对于程序员来说,它是一个黑匣子。我对CPU如何实现乘法感兴趣,而不考虑架构。假设我的寄存器中有两个16位值,并且我是CPU,因此必须使用我拥有的其他位操作指令(and、or、xor、not、shl、shr等)来实现MUL。我该...

8得票2回答
为什么内存重排在单核处理器上不是问题?

考虑以下摘自维基百科的例子,稍作改动,其中程序步骤对应于单个处理器指令: x = 0; f = 0; Thread #1: while (f == 0); print x; Thread #2: x = 42; f = 1; 我知道当线程在两个不同的物理核心...

27得票7回答
CPU仿真和锁定到特定的时钟速度

如果您阅读过我其他的问题,就会知道这个周末我花了很多时间编写了一个6502 CPU模拟器作为一个编程练习。CPU模拟器大部分完成,根据我的有限测试来看,它似乎相当准确,但是其运行速度非常快,我想将其降到实际机器的时钟速度。我当前的测试循环是这样的: // Just loop infini...

12得票4回答
编译器如何编译另一个编译器?

作为一个高级编程背景的人,我对学习低级编程很感兴趣。我想知道编译器是如何编译的? 在查看了一些维基百科文章后,数值机器码被认为是最低级别的语言,但是必须有编译器来编译这个机器码。那么编写这个编译器的语言是什么呢?