inline-assembly 相关问题

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

使用内联汇编器读取 GPR

我正在使用 PowerPC 的 Diab C 编译器 (v5.9.4),我需要将通用寄存器的内容复制到函数的局部变量中。 有没有关于如何读取 GPR 的示例...

回答 1 投票 0

汇编和模板类

我正在开发一个小项目,并尝试将一些硬编码值用于内联汇编。为此,我使用模板。我创建了一个代码片段来显示我所看到的 #包括 我正在开发一个小项目,并尝试将一些硬编码值用于内联汇编。为此,我使用模板。我创建了一个代码片段来显示我所看到的 #include <iostream> template <size_t T> struct MyClass { size_t myValue = T; void doSomething() { size_t value = T; __asm { mov eax, [T] mov [value], eax } std::cout << value << std::endl; } }; int main() { auto o = new MyClass<999>(); o->doSomething(); return 0; } 事实证明,对于汇编代码,它试图使用数据段而不是“直接将数字粘贴到那里” ; 25 : { push ebp mov ebp, esp push ecx ; 26 : auto o = new MyClass<999>(); push 4 call ??2@YAPAXI@Z ; operator new add esp, 4 ; 14 : size_t value = T; mov DWORD PTR _value$2[ebp], 999 ; 000003e7H ; 26 : auto o = new MyClass<999>(); mov DWORD PTR [eax], 0 mov DWORD PTR [eax], 999 ; 000003e7H ; 15 : __asm ; 16 : { ; 17 : mov eax, [T] mov eax, DWORD PTR ds:0 ; 18 : mov [value], eax mov DWORD PTR _value$2[ebp], eax ; 19 : } ; 20 : std::cout << value << std::endl; 我正在使用 Visual Studio 2015。还有其他方法可以实现此目的吗? 啊,多么可爱又扭曲的问题啊! 我尝试使用 T 初始化 constexpr 变量。结果是相同的 - 从内存加载值。宏可用于将文字传递给内联汇编,但它们与模板不能很好地混合。 使用 T 在类中初始化枚举在理论上应该可行(https://msdn.microsoft.com/en-us/library/ydwz5zc6.aspx提到枚举可以在内联汇编中使用),但是在内联汇编使 Visual Studio 2015 编译器崩溃:-)。 似乎有效的是一个函数模板,它使用模板参数声明一个枚举,然后在内联程序集中使用该枚举。如果必须将其放在模板类中,则可以在类中实例化模板函数,如下所示: #include <iostream> template <size_t T> void dosomething() { enum { LOCALENUM = T }; size_t value = 0; __asm { mov eax, LOCALENUM mov[value], eax } std::cout << value << std::endl; } template <size_t T> struct MyClass { size_t myValue = T; void doSomething() { ::dosomething<T>(); } }; int main() { //dosomething<999>(); auto o = new MyClass<999>(); o->doSomething(); return 0; } 这会产生以下汇编代码: auto o = new MyClass<999>(); 001B1015 mov dword ptr [eax],0 001B101B mov dword ptr [eax],3E7h o->doSomething(); 001B1021 mov eax,3E7h <--- Victory! 001B1026 mov dword ptr [ebp-4],eax 001B1029 mov ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (01B2048h)] 001B102F push offset std::endl<char,std::char_traits<char> > (01B1050h) 001B1034 push dword ptr [ebp-4] 001B1037 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (01B2044h)]

回答 1 投票 0

SIGSYS 错误系统调用(Android)

我正在为 Android 编写一些内联汇编代码,在 x64 Android 模拟器中使用 GDB 逐步执行代码时,我看到我尝试执行的系统调用出现了 SIGSYS Bad System Call 错误。我

回答 1 投票 0

内联汇编器的字符串化模板类型

我正在寻找一种通过模板函数自动执行 gcc 内联汇编调用的方法。 例如,我有以下虚拟函数将值存储到指针中。现在我专注于技术...

回答 1 投票 0

尝试使用 x86 asm SSSE3 将 16 位大尾数转换为小尾数

我已经做arm asm有一段时间了,并尝试使用x86 asm SSSE3优化简单循环。我找不到将大端转换为小端的方法。 ARM NEON 有一条向量指令...

回答 1 投票 0

如何在c函数中混合c代码和asm?

我喜欢做一些优化,所以我喜欢用两行汇编程序代替一行c代码。 rb->am += N 环缓冲区结构 rb 增加变量 N 我正在努力...

回答 1 投票 0

C 内联汇编写入系统调用仅打印 4 个字符,但仅在使用“=a”作为输出寄存器时

作为一项统一任务,我为 write 系统调用编写了一个非常简单的包装器。这是针对 i386 的。代码编译为: gcc -ffreestand -fno-stack-protector -nostdlib -nostdinc -static -m32 -Wall -g -O2 我是

回答 1 投票 0

在函数外部使用内联汇编时无法指定操作数

我的代码是 无符号长用户堆栈指针; __asm__( “.全局异常_处理_条目 ” “异常处理条目: ” “添加%0,sp,x0 ” :“=r...

回答 1 投票 0

有人可以翻译一下 Cortex M7 的 ASM 指令代码吗?

“%0 夫人,ipsr”:“=r”(reg_tmp) 出于好奇,我需要翻译这个 ASM 代码,它是针对 ARMV7,特别是在特权模式下执行的 cortex-M7。我知道 MRS 指令...

回答 1 投票 0

内联汇编中的string_cmp

我正在尝试在汇编中编写 string_cmp 函数,在其中尝试比较两个字符串是否相同。 int string_cmp(const char* str1, char* str2) { 内部资源; // 你的内联汇编代码...

回答 1 投票 0

在 stm32f3 中使用内联汇编指令时,我得到了“错误#29:需要一个表达式”。怎么解决?

我正在尝试学习arm cortex m4的汇编编码。 __asm 易失性( " LDR r0,=MY_NUM " /* 恢复上下文。 */ “……

回答 1 投票 0

在 Rust 内联汇编中使用字符串常量

我正在尝试使用 Rust 中的内联汇编来执行写入系统调用。基本上我正在尝试重现这个 hello world 示例。我正在尝试传递对字符串切片的引用作为我的消息,...

回答 1 投票 0

RISC-V GCC 编译器错误编译 ASM 代码

我正在编写一个嵌入式C程序来测试我在FPGA板上开发的硬件IP。我在使用 RISC-V GCC ASM 语法时发现了这个奇怪的问题。 这是我写的代码...

回答 1 投票 0

内联汇编和寄存器

我正在尝试使用 GCC 的内联汇编器。 我想要的是读取 while 循环的结果。 对于上下文,代码写在一个 C 文件内,有自己的头文件,外部并称为 fr...

回答 1 投票 0

标签地址(MSVC)

我们正在为高级编译语言编写字节码,经过一些分析和优化,很明显当前最大的性能开销是 switch 语句...

回答 4 投票 0

我如何告诉 gcc 我的内联汇编破坏了堆栈的一部分?

考虑像这样的内联汇编: uint64_t 标志; asm(“推 pop %0" : "=rm"(flags) : : /* ??? */); 尽管事实上可能存在某种内在的东西来获取内容......

回答 2 投票 0

为什么在 MSVC 中使用 QWORD 会出现“无效操作数类型”错误?

我正在学习基本的内联汇编以实现自我利益,并且正在尝试定义一些加载到内存中的指令。在弄清楚如何传输字节(定义为字符)之后...

回答 1 投票 0

x86-64 的 32 位立即数是否有内联汇编约束

x86-64 是否有类似于“i”约束的约束,但仅当操作数值适合 32 位有符号立即数时才匹配? 对于下面所示的功能,我会

回答 1 投票 0

将指针的地址加载到寄存器内联拇指组件中

我正在尝试使用内联拇指组件将地址从我的 c 指针读入寄存器。 这是一个可重现的: 静态 uint32_t 易失性 * 易失性 CurrentTaskStackPtr; 当前任务堆栈指针 = (

回答 1 投票 0

gcc 是否优化了我的等待代码,尽管将其标记为易失性?

在 ST32 ARM Cortex M4 上,我有一个简单的裸机闪烁灯,可以使 LED 闪烁。当我使用旋转等待时它工作正常: typedef 易失性 uint32_t vuint32_t; #define SET(地址, 位) (*((vuint32_t*) (

回答 1 投票 0

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