Tag: assembly

无法在内联汇编中声明.data

你好,我有一个问题,我似乎无法声明.data。 我用我的代码尝试了各种不同的东西,它似乎总是打破这一部分 asm( “.data\n” “.file: .ascii \”/dev/mem\\000\”\n” ); 我也可以删除.data之后的任何信息,它仍会在’.data’处中断。 这是在带有内联汇编的树莓派2上完成的。如果其余的代码是相关的,请告诉我,但我很确定它不是。 谢谢你的帮助! 编辑:道歉我忘了包含错误消息 “错误:’此处’方法名称’的.size表达式不会计算为常量

C ++包括汇编函数

我试图找到一些方法来解决一些没有太多C ++ 11支持的平台,但是使用x86程序集。 我知道集会,但我没有做太多。 我想做的是编写一个C ++函数,带有头文件和源文件,编译头文件,并使用GCC 4.8来源代码到x86程序集(无依赖关系,甚至不是STL),然后使用汇编文件使用GCC 4.4编译的程序(可能首先使用4.4 [?]将它们编译为静态库)。 是否有可能做到这一点? 我一直在玩它几个小时,但没有取得很多好成绩。 有人对此有任何煽动吗?

汇编循环通过字符串来计算字符

我尝试制作一个汇编代码,计算字符串中有多少个字符,但是我得到一个错误。 代码,我使用gcc和intel_syntax #include int main(){ char *s = “aqr b qabxx xryc pqr”; int x; asm volatile ( “.intel_syntax noprefix;” “mov eax, %1;” “xor ebx,ebx;” “loop:” “mov al,[eax];” “or al, al;” “jz print;” “inc ebx;” “jmp loop” “print:” “mov %0, ebx;” “.att_syntax prefix;” : “=r” (x) : “r” (s) : “eax”, “ebx” ); printf(“Length of […]

静态编译libc C代码和ASM代码

我有ASM代码: extern my_func extern printf extern exit global _start section .data … section .text _start: … call printf … call my_func … call exit 和C代码: int my_func(int a, int b) { return a+b; } 我在64位机器上使用fedora。 我希望可执行文件是32位。 对于动态链接我做: nasm -f elf32 asm.asm ; this gives me asm.o gcc -m32 -Wall -c c_code.c ; this gives me […]

在Visual Studio中将C与程序集链接

我正在尝试将main.c程序与procedure.asm链接。 我有以下C程序和汇编程序。 main.c中 #include #include using namespace std; extern “C” { void ClearUsingIndex(int[], int); } static int Array[10] ={1, 2, 3, 4, 5, 6, 7, 8, 9, -1}; int main() { int size = 10; ClearUsingIndex( Array, size); system(“pause”); return 0; } procedure.asm ; Listing generated by Microsoft (R) Optimizing Compiler Version 17.00.50727.1 TITLE c:\Users\GS\documents\visual […]

未处理的exception0xC0000008:在动态重新编译器中指定了无效的句柄

代码是MIPS-> ARM动态重新编译器。 在运行recompile_function()多次之后,它会在下面代码的条件子句中崩溃,尽管在早期的函数运行期间它可以运行这行代码而没有任何问题。 void recompile_function(){ //recompilation code …… if (out > (u_char *)((u_char *)base_addr + (1 << TARGET_SIZE_2) – MAX_OUTPUT_BLOCK_SIZE – JUMP_TABLE_SIZE)) out = (u_char *)base_addr; // other code …… } 变量输出是用于编写重新编译代码的指针。 base_addr始终指向已分配内存空间的原始开始。 每次写入指令时,变量输出进行4个字节,而base_addr保持不变。 extern char extra_memory[33554432]; #define BASE_ADDR ((int)(&extra_memory)) void *base_addr; u_char *out; void new_dynarec_init() { protect_readwrite(); base_addr = ((int)(&extra_memory)); out = (u_char *)base_addr; […]

在tbbprimefaces变量上进行位测试和设置(BTS)

我想在tbbprimefaces变量上做bitTestAndSet 。 来自tbb的atomic.h似乎没有任何位操作。 如果我将tbbprimefaces变量视为普通指针并执行__sync_or_and_fetch gcc编译器不允许这样做。 这有解决方法吗? 相关问题: 用于位测试和设置的组件(BTS)

使用gnu链接器更改入口点

我有一个带有_start标签的程序集文件,作为.text段中的第一个东西。 我希望这个标签成为我申请的切入点。 每当我将此文件与另一个具有main函数的文件一起传递时,无论如何,该main函数最终都成为我的应用程序的入口点。 我正在使用GNU链接器并尝试了-e _start标志,同时更改了输入文件顺序。 只要存在一个main函数,它就会成为入口点。如果我重命名main函数,它工作正常,我的_start标签成为入口点。 编辑:似乎是因为编译器的-O2标志。 屁股 .text .global _start _start: jmp main main.c中 int main(){ return 0; } 编 gcc -O2 -c as.s -o as.o gcc -O2 -c main.c -o main.o ld -e _start as.o main.o -o test 产量 00000000004000b0 : 4000b0: 31 c0 xor %eax,%eax 4000b2: c3 retq 00000000004000b3 : 4000b3: e9 […]

avr gcc内联asm变量输入操作数

我希望能够在运行时确定内联asm函数的端口寄存器 asm(“”::”I” (_SFR_IO_ADDR(PORTD))); _SFR_IO_ADDR只接受常量 我找到了这些选项,但似乎无法从变量传递寄存器。 asm(“”::”m” (PORTD)); asm(“”::”n” (&PORTD)); 认为这将是一个常见的问题/请求,但似乎无法找到任何答案

通过arm c内联汇编程序在内存中操作数组

int smplSize = 48; int Smpl[48]; for(int i = 0; i < smplSize; i++) Smpl[i] = 0x0; Smpl[smplSize-1] = 0x1; int *ptrToSmpl = &Smpl[0]; printf("Sample @%p of Size %i :\n",(void*)ptrToSmpl,smplSize); asm volatile( "@ ————————————————- \n" "@ Invert the sample \n" "@ ————————————————- \n" //"0: \n" "ldr r2,[r3] \n" //"cmp r2,#0x1 \n" //"bne 1f \n" "add […]