Tag: 组装

编写固件:汇编还是高级?

相关: 测试固件 启动微控制器模拟器/仿真器 解释汇编代码 如果您正在为微控制器编写代码,那么如果您使用汇编语言或C语言或其他高级语言编写,会有真正的区别吗? 如果您编写C代码,您将如何编译它? 谢谢

C&低级信号量实现

我正在考虑如何使用尽可能少的asm代码来实现信号量(不是二进制)。 我没有成功地在没有使用互斥锁的情况下思考和编写它,所以这是迄今为止我能做的最好的事情: 全球: #include #include #include #include typedef struct { atomic_ullong value; pthread_mutex_t *lock_op; bool ready; } semaphore_t; typedef struct { atomic_ullong value; pthread_mutex_t lock_op; bool ready; } static_semaphore_t; /* use with static_semaphore_t */ #define SEMAPHORE_INITIALIZER(value) = {value, PTHREAD_MUTEX_INITIALIZER, true} function: bool semaphore_init(semaphore_t *semaphore, unsigned long long init_value) { if(semaphore->ready) if(!(semaphore->lock_op = \ calloc(1, sizeof(pthread_mutex_t)))) […]

c编译器如何处理无符号和有符号整数? 为什么无符号和有符号算术运算的汇编代码是相同的?

我正在读这本书:CS-APPe2。 C具有unsigned和signed int类型,并且在大多数体系结构中使用二进制补码算法来实现有符号值; 但在学习了一些汇编代码之后,我发现很少有指令区分无符号和有符号。 所以我的问题是: 编译器是否有责任区分已签名和未签名? 如果是的话,它是如何做到的? 谁实现了二进制补码算法 – CPU或编译器? 添加更多信息: 在学习了一些更多的指令之后,实际上有一些指令区分了有符号和无符号,例如setg,seta等。 此外,CF和OF分别适用于无符号和。 但是大多数整数算术指令都处理无符号并且签名相同,例如 int s = a + b 和 unsigned s = a + b 生成相同的指令。 因此,当执行ADD sd ,CPU是否应该对s&d进行无符号或签名? 或者它是无关紧要的,因为两个结果的位模式是相同的,编译器的任务是将基础位模式结果转换为unsigned或signed? PS我正在使用x86和gcc

最优化的计算C模数的方法

我用C计算模数的成本最小化。假设我有一个数字x而n是将x除以的数字 当n == 65536(恰好是2 ^ 16)时: mod = x%n(由GCC制作的11条assembly说明)或 mod = x&0xffff等于mod = x&65535(4个汇编指令) 因此,海湾合作委员会并未对此进行优化。 在我的情况下,n不是x ^(int),而是小于2 ^ 16的最大素数,即65521 正如我在n == 2 ^ 16中所展示的那样,逐位运算可以优化计算。 当n == 65521计算模数时,我可以执行哪些按位操作。

如何从VS2005中的C文件获取汇编程序输出

我认为生成的文件是一个.asm文件,任何想法如何在构建时在Visual Studio中生成它?

为什么它使用movl而不是push?

注意这段代码: #include void a(int a, int b, int c) { char buffer1[5]; char buffer2[10]; } int main() { a(1,2,3); } 之后 : gcc -S ac 该命令在程序集中显示我们的源代码。 现在我们可以在main函数中看到,我们从不使用“push”命令将函数的参数推入堆栈。 它用“movel”而不是那个 main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $16, %esp movl $3, 8(%esp) movl $2, 4(%esp) movl $1, (%esp) call a leave 为什么会这样? 他们之间有什么区别?

将ASM转换为C(不是逆向工程)

我用谷歌搜索,我看到一个惊人的轻浮反应基本上嘲笑提问者问这样一个问题。 Microchip免费提供一些源代码(我不想在这里发布,以防万一。基本上,谷歌AN937,点击第一个链接,有一个链接“源代码”及其压缩文件)。 它在ASM中,当我看到它时,我开始睁大眼睛。 我想把它转换成类似ac类型语言的东西,这样我就可以跟随它。 因为行如: GLOBAL _24_bit_sub movf BARGB2,w subwf AARGB2,f 可能很简单,但它们对我毫无意义。 必须有一些自动ASM到C的翻译器,但我能找到的只是人们说它不可能。 坦率地说,它不可能是不可能的。 两种语言都有结构,这种结构肯定可以翻译。 谢谢。