草庐IT

汇编指令

全部标签

c - 使用 ARM 内联汇编在没有 libc 的情况下进行系统调用

这个问题在这里已经有了答案:Can_startbethethumbfunction?(3个答案)关闭8年前。我想在不使用libc的情况下编写一个小型独立可执行文件。模拟一些libc函数我需要的是具有使用内联汇编进行系统调用的函数:intsyscall(inta,...){return__asm__volatile(/*DOSTHHERE*/);}我正在使用Linux和ARM处理器。编辑:找到解决方案:intsyscall(intn,...){return__asm__volatile("movr7,r0\nmovr0,r1\nmovr1,r2\nmovr2,r3\nswi#1\n");

c - 使用 ARM 内联汇编在没有 libc 的情况下进行系统调用

这个问题在这里已经有了答案:Can_startbethethumbfunction?(3个答案)关闭8年前。我想在不使用libc的情况下编写一个小型独立可执行文件。模拟一些libc函数我需要的是具有使用内联汇编进行系统调用的函数:intsyscall(inta,...){return__asm__volatile(/*DOSTHHERE*/);}我正在使用Linux和ARM处理器。编辑:找到解决方案:intsyscall(intn,...){return__asm__volatile("movr7,r0\nmovr0,r1\nmovr1,r2\nmovr2,r3\nswi#1\n");

linux - 在 i386 的 linux 内核 2.6.11 中,此内联汇编 (:"0"(THREAD_SIZE - 1)) 的含义是什么

在do_IRQ中可以找到如下代码!#ifdefCONFIG_DEBUG_STACKOVERFLOW/*Debuggingcheckforstackoverflow:istherelessthan1KBfree?*/{longesp;__asm____volatile__("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));if(unlikely(esp我没看懂这个asm汇编的意思asm_volatile_("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));THREAD_SIZE-1意味着什么?我记得括号里的符

linux - 在 i386 的 linux 内核 2.6.11 中,此内联汇编 (:"0"(THREAD_SIZE - 1)) 的含义是什么

在do_IRQ中可以找到如下代码!#ifdefCONFIG_DEBUG_STACKOVERFLOW/*Debuggingcheckforstackoverflow:istherelessthan1KBfree?*/{longesp;__asm____volatile__("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));if(unlikely(esp我没看懂这个asm汇编的意思asm_volatile_("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));THREAD_SIZE-1意味着什么?我记得括号里的符

c++ - 使用 Intel Quark 的 Linux 共享库中的非法指令

我有一个linux“.a”库,它被编译用于x86。我没有这个库的源代码,程序员也不给我。我在具有这种架构的PC上运行我的程序没有问题,但是最近我买了一个带有IntelQuark处理器的嵌入式系统。该处理器具有精简的指令集,因此当我编译我的程序并尝试运行它时,我收到了一条明确的消息:“非法指令”。我知道这不是内存违规问题,因为当我使用GDB对其进行调试时,它在带有操作码(如CMOVE)的指令中完全失败,它属于PentiumPro处理器中引入的CMOVxx指令集。在我的嵌入式linux系统(Ubuntu14.04)/proc/cpuinfo"flags"字段中没有显示"cmov",所以这是

c++ - 使用 Intel Quark 的 Linux 共享库中的非法指令

我有一个linux“.a”库,它被编译用于x86。我没有这个库的源代码,程序员也不给我。我在具有这种架构的PC上运行我的程序没有问题,但是最近我买了一个带有IntelQuark处理器的嵌入式系统。该处理器具有精简的指令集,因此当我编译我的程序并尝试运行它时,我收到了一条明确的消息:“非法指令”。我知道这不是内存违规问题,因为当我使用GDB对其进行调试时,它在带有操作码(如CMOVE)的指令中完全失败,它属于PentiumPro处理器中引入的CMOVxx指令集。在我的嵌入式linux系统(Ubuntu14.04)/proc/cpuinfo"flags"字段中没有显示"cmov",所以这是

Avalon 学习系列(三)—— 数据和指令同步

Avalon有很多个指令,通过这些指令可以对DOM进行一些事件操作、或者样式修改。ms-duplexAvalon实现数据与视图的同步的方式是用ms-duplex将元素跟数据绑定在一起,如果有其中一个的值改变另一个值也将改变。ms-duplex是avalon的双向绑定属性,负责将VM中对应的值放到表单元素的value中,还对元素绑定一些事件,用于监听用户的输入从而自动刷新VM。实例:DOCTYPEhtml>html>headlang="en">metacharset="UTF-8">title>Avalondemotitle>metaname="viewport"content="width=d

linux - 小数值相减(汇编)

如何在程序集中减去十进制值。IA32(Linux)1:movedx,1/2subecx,ebxsubecx,edxmovbal2,ecx我试过了,但它有些跳过小数点的减法。如果我输入.5,它会给我一个错误。error:junk`.5'afterexpression 最佳答案 正如lightbulbone在他的回答中正确指出的那样,在使用通用寄存器(eax等)时,您不能处理浮点值。您可以使用FPU,正如灯泡所建议的那样,但这相对乏味。或者-除非您的代码需要在古老的CPU上运行-您可以使用SSE指令来完成此任务,这要简单得多。与您所展示

linux - 小数值相减(汇编)

如何在程序集中减去十进制值。IA32(Linux)1:movedx,1/2subecx,ebxsubecx,edxmovbal2,ecx我试过了,但它有些跳过小数点的减法。如果我输入.5,它会给我一个错误。error:junk`.5'afterexpression 最佳答案 正如lightbulbone在他的回答中正确指出的那样,在使用通用寄存器(eax等)时,您不能处理浮点值。您可以使用FPU,正如灯泡所建议的那样,但这相对乏味。或者-除非您的代码需要在古老的CPU上运行-您可以使用SSE指令来完成此任务,这要简单得多。与您所展示

linux - 如何在 x86 汇编中调用 fgets?

根据thedocumentationforfgets(),该函数接受三个参数:char*-将保存输入的字符串int-一个整数,表示要读取的最大字符数FILE*-要读取的流的FILE*我调用这个函数没有问题。我只是将三个参数压入堆栈,调用函数,并将ESP增加12。我的问题是参数#3。什么应该作为标准输入的FILE*传递?在C中,我只能使用stdin,但我不知道x86汇编中的等价物是什么。更新:我在Linux上使用NASM。 最佳答案 stdin的问题在于,它是一个宏,不仅可以扩展为特定于平台的内容,而且很可能难以从汇编中手动访问。如果