小编Ale*_*nze的帖子

在操作码中汇编段

我注意到在程序段中使用了代码段.

例:

MOV DWORD PTR SS:[EBP-30],30
Run Code Online (Sandbox Code Playgroud)

我认为"PTR SS:"用于指定EBP-30来自堆栈?(SS:堆栈段)我是对还是我完全错了?:)那么,请你告诉我上面的例子与之间的区别

MOV DWORD PTR[EBP-30],30
Run Code Online (Sandbox Code Playgroud)

那么在操作码中使用的DS(数据段)呢?

x86 assembly segments opcodes

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

为什么我不能保存rip的价值?

#include <stdint.h>
uint64_t rip;
int main()
{
    asm(
        "movq %%rip, %0\n" : "=m" (rip)
        );

    sleep(10);
}
Run Code Online (Sandbox Code Playgroud)

当我编译我得到

cc -m64    rip.c   -o rip
/tmp/ccwNbZi1.s: Assembler messages:
/tmp/ccwNbZi1.s:12: Error: suffix or operands invalid for `movq'
make: *** [rip] Error 1
Run Code Online (Sandbox Code Playgroud)

x86 assembly

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

在c ++中将int转换为16位浮点(半精度浮点)

如何将integera 转换为a half precision float(将存储到数组中unsigned char[2]).输入int的范围是1-65535.精确度确实不是问题.

我正在做类似的事情转换16bit int成一个unsigned char[2],但我知道没有half precision floatC++数据类型.以下示例:

int16_t position16int = (int16_t)data;
memcpy(&dataArray, &position16int, 2);
Run Code Online (Sandbox Code Playgroud)

c c++ floating-point

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

Why does main() compiled by D have a 32-bit return value on a 64-bit machine?

Here is a very small source file in D:

void main()
{
}
Run Code Online (Sandbox Code Playgroud)

and here objdump's disassembly of the .o file:

Disassembly of section .text._Dmain:
0000000000000000 <_Dmain>:
void main()
   0:   55                      push   %rbp
   1:   48 8b ec                mov    %rsp,%rbp
   4:   31 c0                   xor    %eax,%eax
{
   6:   5d                      pop    %rbp
   7:   c3                      retq   
Run Code Online (Sandbox Code Playgroud)

The compiler is DMD64 D Compiler v2.056 running on an x86_64 Linux machine.

What I wonder is why only 32-bit EAX is being cleared rather than the whole …

assembly d

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

如何在Windows中使用C创建可中断睡眠?

我希望当前线程在给定时间内休眠.但是,另一个线程应该能够中断它并提前唤醒它.在unix中,使用sleep+ 非常简单pthread_kill.在窗口有SleepExSleepConditionVariableCS.SleepEx似乎并没有真正导致线程休眠,因为它仍处理事件,所以睡在条件变量上是一个更好的解决方案吗?此外,我有点不清楚如何唤醒SleepEx睡眠的线程.什么是这个问题的正确解决方案,SleepExSleepConditionVariableCS?(另外,你能指出如何唤醒一个正在睡觉的线程SleepEx吗?MSDN文档非常令人困惑.

c windows winapi multithreading

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

C动态printf double,不损失精度,没有尾随零

我是C的新手,从书本上学习/在互联网上学习.我正在尝试编写一个我可以传递给任何函数的函数,double并返回一个intprintf("%.*lf" ...语句中使用的函数,这样返回的函数int既不会降低精度也不会产生尾随零.

我有一个工作函数,但它很大,因为它是为了可读性而编写的,所有注释都是如此.

为了总结这个函数,我计算得到该double范围所需的除以10的除法10 > d >= 0,只取小数部分并将其放入string带有n个小数位的位置n = 15 - number_of_digits_left_of_decimal(我读取该类型double只能跟踪15位数),检查string从右到左的尾随零并保持计数,最后返回一个int代表小数点右边非零数字的数字.

有没有更简单的方法?谢谢.

int get_number_of_digits_after_decimal(double d)
{
  int i = 0;      /* sometimes you need an int */
  int pl = 0;     /* precision left = 15 - sigfigs */
  int sigfigs = 1; /* the number of digits in d */
  char line[20];  /* used to find …
Run Code Online (Sandbox Code Playgroud)

c floating-point printf

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

寻找在C中读取音频的基础知识

我不想使用库 - 我想从头开始编写.我想玩通过无线电传输WEFAX的解码器.不同的音频转换为不同的像素暗度.只有灰度 - 没有颜色.

每分钟有120行,每行超过1000像素.我想检测频率并将其转换为8位值.等效的硬件类似于LM567频率到电压转换器.

我不知道从哪里开始.这是FIR还是IIR?任何人都可以指出我可以学习的代码吗?我不是为Windows编写的,严格来说是unix.

艾伦

c signal-processing

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

通过COM从32位应用程序调用x64程序集

简短的问题:是否可能(当然是在x64操作系统上)?如果不是,为什么呢?

我为excel 32开发了ac#plugin dll.

在x86中编译时,它工作正常.

在x64中编译时,COM调用失败.

我需要64位版本的Excel吗?

我认为COM不可能编译体系结构,并且可以在不同技术和不同体系结构中开发的dll之间进行通信,但我猜后者是错误的.

我猜一个x64位dll显然不能通过COM(或其他)从32位应用程序调用.

.net c# com .net-assembly

5
推荐指数
1
解决办法
405
查看次数

在什么情况下内存是字节或字可寻址的以及为什么

内存可以是字节可寻址的,也可以是字(2字节、4字节等)可寻址的(如果我错了,请纠正我)。

这(字节可寻址或字可寻址)取决于处理器架构吗?如果是,在什么情况下我们使用字节可寻址内存,在什么情况下我们使用字可寻址内存?

其原因是什么?换句话说,为什么存储器字节可寻址(如果是这样)以及为什么字可以寻址(如果是这样)及其原因。我在这个网站上看到了一些关于字节可寻址内存的问题,但没有人提供这些问题的答案。

memory cpu-architecture microprocessors

5
推荐指数
1
解决办法
1500
查看次数

缺少switch.pm - Active Perl x64/windows

我已经安装了Active Perl(v5.14.2,64位,适用于Windows),并且我的代码包含use Switch;错误导致失败Can't locate Switch.pm in @INC (@INC contains: C:/Perl64/site/lib C:/Perl64/lib .) at myfilename.pl line 3..

switch.pm从较旧的32位安装复制修复了问题,但我不明白.switch.pm在此期间已被弃用?

perl activeperl

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