inline-assembly 相关问题

嵌入在另一个更高语言的源中的程序集,例如嵌入在C或C ++中的x86程序集。

汇编代码,必须计算标量积

我是汇编程序新手。无法在以太网中找到解决方案,所以在这里询问。这段代码输出错误的数字,我不明白为什么。 #包括 长点积(短 int* vec1, s...

回答 1 投票 0

使用 Assembly 和 C++ 调用函数两次

我有一段代码可以将要调用的函数更改为我的新函数,但我不想只调用我的新函数,我还想调用旧函数。 这是一个示例,因此您可以了解...

回答 2 投票 0

_syscallN 宏到哪里去了<linux/unistd.h>?

过去的情况是,如果你需要直接在linux中进行系统调用而不使用现有的库,你可以只包含,它会定义一个宏...

回答 1 投票 0

通过内联汇编使用 FSIN

我想通过gcc / clang的内联汇编来使用x87的FSIN。内部使用 __asm__ 块的 sin() 函数与 64 位双参数看起来如何?使用 __builtin_si...

回答 1 投票 0

错误:‘asm’操作数具有不可能的约束

我想计算单词的长度,但有错误。我不明白为什么。 int new_strlen(字符* 字) { int 长度 = 0; __asm__(“mov ecx,100 ” ...

回答 1 投票 0

如何创建具有多变量寄存器偏移量的内联汇编命令?

以下代码使用 ARMv4 的 gcc,非常好: asm("strb.w r2, [r0, #24 + 8 * 1]"); 现在,如果我尝试以下操作: asm("strb.w r2, [r0, %[偏移] + %[delta] * %[比例]]&q...

回答 1 投票 0

关于arch/arm64/include/asm/atomic.h的atomic_add函数的问题

我对基于 Linux 内核的 C 编码风格非常陌生。我试图理解“arch/arm64/include/asm/atomic.h”中“atomic_add”函数的以下实现 fi...

回答 1 投票 0

这个比较交换函数中的内联汇编是如何工作的? (ARM 上的 %H 修饰符)

静态内联 unsigned long long __cmpxchg64(unsigned long long *ptr,unsigned long long old,unsigned long long new) { 无符号长长oldval; 无符号长解析; 预取(ptr); _...

回答 1 投票 0

确保 clang-cl 中自定义 ASM 函数的 x64 合规性

对于我自定义编译的本机 x64 JIT 代码,我有某些固有函数。其中很多只是从我的代码中调用的,因此我将使用自己的编译器生成。然而,其中一些是可怕的......

回答 1 投票 0

如何使用名为 ptr 的变量解决 Visual Studio 中的 C2400 错误?

我正在使用与块 _asm {} 集成的 x86 汇编语言进行 C++ 编程,但我一直遇到相同的错误 C2400。 我正在尝试计算前 n 个素数。 错误:C2400 装配错误...

回答 1 投票 0

汇编代码有错误运行时检查失败

我遇到运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用用一个函数调用约定声明的函数的结果...

回答 1 投票 0

我的汇编语言代码哪里可能有错误

我有一个在 C++ Visual Studio 中使用汇编器插入编写的程序。我想将其安排为 Visual Studio 中的汇编程序。我不明白为什么我数错了。我瘦了...

回答 1 投票 0

我可以修改gcc内联汇编中的输入操作数吗

我们知道,如果我将 %eax 设置为输入,那么我无法将其包含到破坏寄存器列表中。所以我的问题是,在没有任何内容的情况下修改汇编代码中 %eax 的值是否合法?

回答 1 投票 0

如何使用内联汇编将ID_AA64MMFR1_EL1寄存器的内容读取到64位变量中?

这是此答案的后续问题。 我正在尝试使用内联汇编将 ID_AA64MMFR1_EL1 寄存器的内容读入 64 位变量: #包括 #包括 这是this答案的后续问题。 我正在尝试使用内联汇编将 ID_AA64MMFR1_EL1 寄存器的内容读取到 64 位变量中: #include <stdio.h> #include <stdint.h> #include <inttypes.h> int main(void) { uint64_t foo; __asm volatile("mov %0, ID_AA64MMFR1_EL1" : "=r"(foo) ::); printf("%"PRIx64"\n", foo); } 注意:我需要读取 ID_AA64MMFR1_EL1 才能知道 AFP 字段的值。 但是,汇编器拒绝此代码: $ gcc t1b.c /tmp/ccTDGH7d.s: Assembler messages: /tmp/ccTDGH7d.s:22: Error: undefined symbol ID_AA64MMFR1_EL1 used as an immediate value 一个简单的问题:如何正确做? 如果您的程序在 EL0 上运行,您应该使用 hwcaps 中提供的 HWCAP_CPUID API - 更多详细信息,请参阅本文 ARM64 CPU 功能寄存器。请参阅此处了解工作示例代码。 mov助记符仅用于在通用和/或 FP/SIMD 寄存器(x0-x30、xzr、sp、q0-q31)之间移动,以及将立即值移动到通用寄存器中。移入和移出系统寄存器分别使用 msr 和 mrs。所以在这里你想要 mrs 而不是 mov。 请注意,从您的标头来看,您似乎是在普通用户空间 C 程序中执行此操作。在典型的操作系统上,用户空间运行在异常级别 0 (EL0)。但ID_AA64MMFR1_EL1名称上的EL1标签表明它只能在EL1及更高版本(即内核模式)下读取。所以执行这条指令会陷入陷阱。 某些操作系统可能通过模拟指令来处理陷阱。我知道 Linux 对某些功能 ID 寄存器执行此操作,但不记得这是否是其中之一。但是,在这种情况下,返回到程序的值不一定等于硬件实际返回的值。例如,操作系统可以屏蔽它不想让您知道的功能位。 在其他操作系统上(例如 MacOS,如果我没记错的话),你的程序会因 SIGILL 而死掉。 通常,操作系统会提供其他类似这样的CPU特性查询机制。例如,Linux 有 /proc/cpuinfo,MacOS 有 sysctl。

回答 2 投票 0

在 aarch64 上使用 asm!("mov...") 编译错误

我正在 Mac/aarch64 上运行书中的代码示例,并收到编译错误。 fn 解引用(ptr: *const usize) -> usize { 让 mut res: 使用; 不安全{ asm!(“移动...

回答 2 投票 0

Rust:使用 asm 编译错误!("mov... 在 aarch64 上

我正在 Mac/aarch64 上运行书中的代码示例,并收到编译错误。 fn 解引用(ptr: *const usize) -> usize { 让 mut res: 使用; 不安全{ asm!(“移动...

回答 1 投票 0

如何在 C++ 中使用内联汇编将两个大小矩阵相乘

我用 C++ 编写了这段代码,并使用内联汇编 _asm 进行方阵乘法。 #包括 使用命名空间 std; int main() { 整数 n = 2; int A[2][2] = { {1, 2}, {3, 4} }...

回答 1 投票 0

ARM中有与rdtsc等效的指令吗?

对于我的项目,我必须使用内联汇编指令(例如rdtsc)来计算某些C/C++指令的执行时间。 以下代码似乎适用于 Intel,但不适用于 ARM 处理器...

回答 3 投票 0

如何求汇编中偶数之和?

我正在自学组装。我想求偶数之和。但是,它不起作用,我不明白为什么,它没有显示任何错误。 我的代码如下 移动ebx,0; 移动...

回答 3 投票 0

汇编 - 除了 C 和 C++ 之外,还有其他语言允许使用内联代码与汇编进行交互吗?

我最近读了这篇题为“嵌入式系统/混合 C 和汇编编程”的文档 它基本上涉及 C 和 C++ 如何允许用户通过称为内联汇编的技术使用汇编代码

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.