我有一个在受保护模式下在裸x86(没有操作系统)上运行的C程序.我需要将程序的执行延迟一段时间.目前,我这样做:
for(p=0; p<1000000; ++p) asm("pause");
Run Code Online (Sandbox Code Playgroud)
但这看起来非常错误(我确实得到了延迟,但显然,我对其持续时间没有真正的控制权:"暂停"的长度未定义).
现在,我并没有真正体验过这么低级别的东西,而且我一直在网上寻找解决方案,但到目前为止,我发现唯一一个涉及BIOS中断,这在pmode中不起作用(或者我被告知).
那么,在保护模式下如何延迟执行?
我查看了以下网站,了解有关编写AGAL以向Stage3D对象渲染纹理/位图的一些信息:
http://iflash3d.com/shaders/my-name-is-agal-i-come-from-adobe-1/
但它似乎更多地涉及如何在3D空间中创建对象.也许这是无法避免的?
但无论如何我会问这个问题:
什么是裸骨必需的AGAL代码和AS3代码写入以呈现多个精灵Stage3D?
注意:不需要滤镜,效果或着色器 - 只需位置,缩放和旋转变换.此外,我不是在寻找现有的第三方API.我想自己试一下这种低级语言.
我不明白以下C转换函数是如何工作的(以及为什么它们以这种方式编写); 我很确定原作者知道他在做什么:
typedef union TValue {
uint64_t u64;
double n;
struct {
uint32_t lo; /* Lower 32 bits of number. */
uint32_t hi; /* Upper 32 bits of number. */
} u32;
[...]
} TValue;
static int32_t num2bit(double n)
{
TValue o;
o.n = n + 6755399441055744.0; /* 2^52 + 2^51 */
return (int32_t)o.u32.lo;
}
static uint64_t num2u64(double n)
{
#ifdef _MSC_VER
if (n >= 9223372036854775808.0) /* They think it's a feature. */
return (uint64_t)(int64_t)(n - 18446744073709551616.0);
else
#endif
return …Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题 。是否可以编写VHDL for循环,步长不等于1,例如16
循环应该像
0-> 16-> 32-> 48 ....到某个值
任何即时帮助,我们感激不尽
我对文件描述符感到困惑。我知道要复制它们,我们需要系统调用 dup2() 或 dup()。但是为什么我们不能通过将旧值分配给新变量来复制它们呢?例如,为什么我们可以这样做
int f[2];
pipe(f); // I call pipe just to create two file descriptors, nothing special
int new_descriptor = f[0]; // this line is where I'm confused
Run Code Online (Sandbox Code Playgroud)
是因为 f[0],f[1] 的整数具有特定含义,并且是某种编码吗?谢谢!
我正在分析这个小小的 ELF 文件:
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 3e 00 01 00 00 00 78 00 40 00 00 00 00 00 |..>.....x.@.....|
00000020 40 00 00 00 00 00 00 00 98 00 00 00 00 00 00 00 |@...............|
00000030 00 00 00 00 40 00 38 00 01 00 40 00 03 00 02 00 |....@.8...@.....|
00000040 01 00 00 00 …Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经被问了一千次,我已经通读了每一个答案,但我仍然不明白。我的 RAM 模型可能存在一些基本错误,这使我无法理解任何答案。
我从互联网上获得了所有这些小信息,但我无法连接它们。
以下是我目前所知道的:以 IA-32 架构为例,其字边界为 32 位(边界 = CPU 可以从内存中读取的最大值?)。它将始终在其字边界内读取。
1)那么,无论我给它什么地址,它总是会读取 4 个字节?如果我在地址 x 有一个简单的字符怎么办。它会从那个地址读取 4 个字节,然后做一些奇怪的事情来只得到一个字节吗?
2)如果是这样,那么字符串(字符序列)n_chars * 4 字节大吗?我很确定它不是那样的,但是我应该如何解释“将始终阅读其单词边界”呢?
3)内存对齐似乎只与数据结构有关。为什么?内存的其余部分是否未对齐?我的意思是物理、虚拟、内核空间等?
4) 为什么我只能在可被 4 整除的地址中存储 32 位值?我的意思是我知道它最终只会读取 32 位,但为什么它不能从奇数地址读取 32 位?比如这里的限制是什么?
我只是很困惑请帮助我
我正在尝试重新实现 malloc 并且我需要了解对齐的目的。据我了解,如果内存对齐,代码将执行得更快,因为处理器不必采取额外的步骤来恢复被切割的内存位。我想我明白 64 位处理器读取 64 位 x 64 位内存。现在,让我们假设我有一个按顺序排列的结构(没有填充):一个字符、一个短字符、一个字符和一个整数。为什么短路会错位?我们拥有区块中的所有数据!为什么它必须在一个 2 的倍数的地址上。对于整数和其他类型,同样的问题?
我还有第二个问题:使用我之前提到的结构,处理器如何知道当它读取它的 64 位时前 8 位对应于一个字符,然后接下来的 16 位对应于一个短等等......?
我想知道; 像Cubase和Audacity这样的音频软件是否使用PlaySound调用?
我在哪里可以了解低级音频编程?至于我在网上找到的信息,MCI似乎是Windows中最低级别的音频API ...
谢谢
编辑:我不要求仅针对Windows的信息.
排除将一种高级语言转换为另一种语言的编译器,编译为机器代码的编译器是否需要用汇编编写?
compiler-construction programming-languages machine-code low-level