Tag: 汇编

在Python中编译C代码的问题

我在Windows 7,64位中使用Anaconda for Python 2.7.10。 我也使用Visual Studio 2010.我安装了Microsoft Visual Studio for Python。 当我尝试在python中编译C代码时(在cmd中): C:\Anaconda\sms-tools-master\software\transformations_interface>python compileModule.py build_ext –inplace 我得到了很多警告和一些错误,最后一部分如下: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\amd64\link.exe /DLL / nologo /INCREMENTAL:NO /LIBPATH:C:\Anaconda\libs /LIBPATH:C:\Anaconda\PCbuild\am d64 m.lib /EXPORT:initutilFunctions_C build\temp.win-amd64-2.7\Release\utilFunct ions.obj build\temp.win-amd64-2.7\Release\cutilFunctions.obj /OUT:C:\Anaconda\sm s-tools-master\software\models\utilFunctions_C\utilFunctions_C.pyd /IMPLIB:build \temp.win-amd64-2.7\Release\utilFunctions_C.lib /MANIFESTFILE:build\temp.win-amd 64-2.7\Release\utilFunctions_C.pyd.manifest LINK : fatal error LNK1181: cannot open input file ‘m.lib’ error: command ‘C:\\Program […]

如何构建包含Mac OS X入口点的C程序?

如何构建包含Mac OS X入口点的C程序? 我想建立: start() { /* exit system call */ asm(“movl $1,%eax;” “xorl %ebx,%ebx;” “int $0x80” ); } 但是当我跑步时: gcc -nostdlib min.c 我总是得到: ld: could not find entry point “start” (perhaps missing crt1.o) collect2: ld returned 1 exit status 我只是为了看它正在做什么而做的另一个尝试是: gcc -nostdlib -c min.c && otool -tV min.o 输出是: (__TEXT,__text) section _start: 0000000000000000 pushq […]

用于位测试和设置的组件(BTS)

struct node* address; //format 我想用BTS primefaces设置flagBit1位。 编辑 我想盲目地设置这一点,而不关心它是否先前设置过 我可以使用汇编代码来完成这一过程,如使用gcc编译器使用bts汇编指令 但是,我可以使用哪种内在可移植到不同的架构? 例如, gcc Atomic __sync_fetch_and_or有__sync_fetch_and_or 。 这是否与BTS具有相同的属性?

C编译错误(没有这样的文件或目录,编译终止)

我在Windows上试图学习一些OpenGL。 我安装了mingw并有一个测试文件。 我将我的test.c文件放在glut文件夹中,其中包含glut文件,例如glut32.dll和库文件。 我在cmd中使用mingw来运行这个文件: gcc opengl.c -o opengl -lGL -lGLU -lglut 我收到了这个错误: opengl.c:1:23 fatal error: GLUT/glut.h: No such file or directory #include 编译终止。 不知道我做错了什么,有人知道吗? 谢谢!

我如何摆脱__x86.get_pc_thunk.ax的召唤

我试图编译并将一个非常简单的C程序转换为汇编语言。 我使用的是Ubuntu,操作系统类型是64位。 这是C程序。 void add(); int main() { add(); return 0; } 如果我使用gcc -S -m32 -fno-asynchronous-unwind-tables -o simple.S simple.c这就是我的汇编源代码文件应该是这样的: .file “main1.c” .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp call add movl $0, %eax movl %ebp, %esp popl %ebp ret .size main, .-main .ident “GCC: (Debian 4.4.5-8) 4.4.5” […]

将汇编转换为C

我正在尝试写入PIC18F87J11上的闪存,但我在理解汇编时遇到了问题。 我的PIC的数据表只有汇编,我正在使用C编译器。 我想知道是否有人可以帮助我将这部分代码翻译成C语言。 此代码可在此处找到,第7.5节。 MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base address MOVWF TBLPTRU MOVLW CODE_ADDR_HIGH MOVWF TBLPTRH MOVLW CODE_ADDR_LOW MOVWF TBLPTRL MOVLW DATA0 MOVWF TABLAT TBLWT*+ MOVLW DATA1 MOVWF TABLAT TBLWT* PROGRAM_MEMORY BSF EECON1, WPROG ; enable single word write BSF EECON1, WREN ; enable write to memory BCF INTCON, GIE ; disable […]

打开Watcom Inline汇编SEG和OFFSET运算符

今天,我已经了解到MASM中的SEG运算符默认返回GROUP的地址而不是相关表达式的SEGMENT的地址,并且有选项和方法来覆盖它。 由于我目前正在Open Watcom 1.9 / 16位DOS中进行复杂的项目,其中C和汇编(内联和独立)混合(实际上,DOS仅用于启动,然后我自己的MINI-OS控制),并且因为我知道WASM在某种程度上与MASM兼容,我有以下问题: 在进行内联汇编并获取变量段时,SEG运算符是否返回变量所在的GROUP或SEGMENT? 假设有一个名为MY_GROUP的GROUP,一个名为MY_SEG且属于MY_GROUP的SEGMENT,以及一个名为MY_VAR的变量/标签,它位于MY_SEG中。 然后,如果我这样做 _asm { MOV AX, SEG MY_VAR } 哪个值加载到AX? 它是MY_GROUP的地址还是MY_SEG的地址(假设它们不同)? 我没有找到任何与内联汇编中的问题相关的命令行开关。 然后我尝试了MASM语法: _asm { MOV AX, SEG MY_GROUP:MY_VAR MOV AX, SEG MY_SEG:MY_VAR } 上述两行都会导致以下错误:“只允许段或组标签”。 请注意,我的问题仅与内联汇编有关。 实际上,我使用JWASM作为独立的汇编模块,上面的语法效果很好,并且具有预期的结果。 有人能告诉我内联汇编程序在这种情况下做了什么,以及是否有办法控制其各自的行为? 非常感谢你!

获取内存部分信息

有人可以解释一下以下代码是如何工作的吗? # if defined(__ELF__) # define __SECTION_FLAGS “, \”aw\” , @progbits” /* writable flag needed for ld “.[cd]tors” sections bug workaround) */ # elif defined(__COFF__) # define __SECTION_FLAGS “, \”dr\”” /* untested, may be writable flag needed */ # endif asm ( “.section .ctors” __SECTION_FLAGS “\n” “.globl __ctors_begin__\n” “__ctors_begin__:\n” “.previous\n” ); asm /* ld “.[cd]tors” […]

是否可以在Linux上没有链接libc的情况下将C转换为asm?

测试平台在Linux 32位上。 (但也欢迎Windows 32位上的某些解决方案) 这是交响代码段: int a = 0; printf(“%d\n”, a); 如果我使用gcc生成汇编代码 gcc -S test.c 然后我会得到: movl $0, 28(%esp) movl 28(%esp), %eax movl %eax, 4(%esp) movl $.LC0, (%esp) call printf leave ret 而这个汇编代码需要链接到libc才能工作(因为调用printf) 我的问题是: 是否可以将C转换为asm,只使用显式使用系统调用 ,而不使用libc? 像这样: pop ecx add ecx,host_msg-host_reloc mov eax,4 mov ebx,1 mov edx,host_msg_len int 80h mov eax,1 xor ebx,ebx int 80h […]

为什么AVX-256 VMOVAPS指令只复制四个单精度浮点而不是8?

我试图熟悉一些较新的英特尔处理器上提供的256位AVX指令。 我已经validation我的i7-4720HQ支持256位AVX指令。 我遇到的问题是VMOVAPS指令,它应该复制8个单精度浮点值,只复制4。 dot PROC VMOVAPS YMM1, ymmword ptr [RCX] VDPPS YMM2, YMM1, ymmword ptr [RDX], 255 VMOVAPS ymmword ptr [RCX], YMM2 MOVSS XMM0, DWORD PTR [RCX] RET dot ENDP 如果您不熟悉调用约定,Visual C ++ 2015期望在返回时返回此函数(因为它是一个浮点数)在XMM0中。 除此之外,标准是第一个参数在RCX中传递,第二个参数在RDX中传递。 这是调用此函数的C代码。 _declspec(align(32)) float d1[] = { 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f }; _declspec(align(32)) float d2[] = { […]