草庐IT

汇编移位指令

全部标签

c - 如何从 ml64.exe(MSVC 64 位 X64 汇编程序)访问线程本地存储?

以下C函数尝试使用线程局部存储变量以线程安全的方式防止多核代码中的递归。但是,由于有些复杂的原因,我需要在X64汇编程序(IntelX86/AMD64位)中编写此函数,并使用VC2010中的ml64.exe进行汇编。如果我使用全局变量,我知道如何执行此操作,但我不确定如何使用具有__declspec(thread)的TLS变量正确执行此操作。__declspec(thread)inttls_VAR=0;voidnorecurse(){if(0==tls_VAR){tls_VAR=1;DoWork();tls_VAR=0;}}注意:这是VC2010踢出来的功能。但是,MASM(ml64.

windows - Windows 上的 ARM 汇编语言 IDE

Windows上是否有任何ARM汇编语言IDE(如Eclipse,...),我可以编写我的指令并让它模拟这些指令?在其他平台上呢?我该如何详细使用它们? 最佳答案 AndroidSDK有一个适用于Windows的版本,其中包括EclipseIDE;它包括一个设备模拟器,您可以在其上运行创建的代码。如果添加AndroidNDK(native开发工具包),您还会获得ARM交叉编译器。Android模拟器/仿真器实际上是ARM的QEMU,它执行原生ARM代码。简而言之:获取AndroidSDK/NDK适用于Windows,您将拥有所需的一

windows - ssi 处理此指令时发生错误

我的shtml文件中出现以下错误[anerroroccurredwhileprocessingthisdirective]包含另一个文件时不会发生此错误,当我执行if表达式时会发生:open我正在使用xampp在Windows机器上运行这个开发环境 最佳答案 原来我必须在我的httpd.conf中添加以下指令SSILegacyExprParseron我使用的shtml文件最初来自遗留的apache服务器(1.X) 关于windows-ssi处理此指令时发生错误,我们在StackOverf

c++ - 使用内联汇编获取变量地址

我想要一个代码来使用C++的内联汇编来获取变量的地址。我是这样做的,但它需要一个值而不是地址#include#includeintmain(){intn=5;DWORDaddr;__asmmovebx,n;__asmmovaddr,ebx;printf("%x",addr);return0;} 最佳答案 如果你真的需要通过汇编程序来做,试试__asmleaebx,n;__asmmovaddr,ebx; 关于c++-使用内联汇编获取变量地址,我们在StackOverflow上找到一个类似的

windows - C++Builder - 在汇编中实现整个功能

我正在尝试实现thisinlineassemblytrick在C++Builder中获取EIP的值。以下代码适用于Release模式:unsignedlongget_eip(){asm{moveax,[esp]}}但是它在Debug模式下不起作用。在Debug模式下,代码必须更改为:unsignedlongget_eip(){asm{moveax,[esp+4]}}通过检查生成的程序集;不同之处在于,在Debug模式下,为get_eip()函数(第一个版本)生成的代码是:pushebpmovebp,espmoveax,[esp]popebpret但是在Release模式下代码是:mov

c++ - 从 Matlab 运行 exe 代码。在 cmd (dos) 中工作的完全相同的指令在 Matlab 中失败

这让我发疯,我必须承认。在终于能够成功编译我需要处理语音文件的两个函数之后,从我从一个值得信赖的在线存储库下载的C/C++代码(代码已经在Linux中经过彻底测试),我现在正在努力从Matlab启动这些文件...当我在cmd(dos)中键入以下命令时分析b2.wavconfig_default它有效,没问题(参见此处Works)。然后,我将完全相同的命令构建到一个字符串中,并将其提供给“系统”Matlab函数。然后代码崩溃了...(请参阅此处Fails)我已经尝试使用完整路径(c:\b2.wav等)但仍然无法正常工作...关于为什么会发生这种情况有什么想法吗?

windows - Windows 内核是否有读写 fork() 指令?

BecausePOSIX.1compliancewasamandatorygoalforWindows,theoperatingsystemwasdesignedtoensurethattherequiredbasesystemsupportwaspresenttoallowfortheimplementationofaPOSIX.1subsystem(suchastheforkfunction,whichisimplementedintheWindowsexecutive,andthesupportforhardfilelinksintheWindowsfilesystem).这个f

windows - Windows 8 x64 上的汇编代码

我是硬件方面的新手,接近使用汇编代码编程。所以我读了一本关于它的书并找到了NASM汇编程序的示例代码:segment.text;codesegmentglobalmain;mustbedeclaredforlinkermain:;telllinkerentrypointmovedx,len;messagelengthmovecx,msg;messagetowritemovebx,1;filedescriptor(stdout)moveax,4;systemcallnumber(sys_write)int0x80;callkernelmoveax,1;systemcallnumber(s

windows - 汇编循环循环太多次

我对汇编很陌生(昨天开始学习)并且遇到循环问题:下面的代码应该打印值0-49,但它打印的是0-49,然后是~20行垃圾(我假设这是堆栈的一部分,其他程序/程序的其他部分正在使用)。我预计问题出在第二个循环.loop,因为它打印了错误的行数,而打印由.loop处理。我正在使用FASM(FlatAssembler)程序来编译它。代码:formatPEconsoleinclude"win32ax.inc"start:movecx,50;numberofloops.mainloop:;fortestingpurposes,justpushes49-0ontothestackpushecx;pu

windows - 代码段描述符中的 D 标志对 x86-64 指令有何作用?

当在x86-64代码中使用时,我试图了解代码段描述符中D标志的工作原理。它设置在代码段描述符的D/B位22中,如下图所示:英特尔文档(来自3.4.5SegmentDescriptors部分)陈述如下:D/B(defaultoperationsize/defaultstackpointersizeand/orupperbound)flagPerformsdifferentfunctionsdependingonwhetherthesegmentdescriptorisanexecutablecodesegment,anexpand-downdatasegment,orastacksegm