草庐IT

汇编指令

全部标签

为什么使用JMP阻止叮当汇编器弄清.fill的绝对表达式?

我很难写一个简单的玩具启动加载程序(帖子底部的其他信息)。以下nasm代码在我尝试切换到Clang之前,显示了引导加载程序的外观。编译时nasm-fbin-onasm.outboot.asm,然后使用qemu-system-i386nasm.out,打印无尽的流!屏幕的字符:bits16globalmainmain:movah,0x0emoval,'!'int0x10jmpmaintimes510-($-$$)db0x00db0x55db0xaa我很好奇我是否可以将Clang用作我的汇编器而不是NASM,因此我尝试将程序转换为我认为是气体语法等效的内容:.code16.globalmainma

c++ - 减少指令缓存未命中(在 C++ 中)

假设我有一个C++类,其实现如下所示://...MyClass::iterativeFunction(){for(inti=0;i在C++级别,我是否可以控制这些方法的空间局部性,或者我是否只能希望编译器注意到相关方法并相应地优化其汇编?理想情况下,我希望它们紧挨着彼此,这样它们将一起加载到指令缓存中,但我不知道如何让编译器知道我真的希望这种情况发生。 最佳答案 在任何一种情况下,代码在进入缓存之前都无法运行。在任何一种情况下,对于CPU来说,代码流的去向都同样显而易见,因为该流是无条件的。所以这不会有任何区别。现代代码缓存不会在地

c++ - 构建时错误的预处理器指令

构建VS2013解决方案(从VS8迁移)时出现以下错误:Error1errorC2220:warningtreatedaserror-no'object'filegeneratedC:\ProgramFiles\MicrosoftVisualStudio12.0\VC\atlmfc\include\afx.h38Warning2warningC4996:'MBCS_Support_Deprecated_In_MFC':MBCSsupportinMFCisdeprecatedandmayberemovedinafutureversionofMFC.C:\ProgramFiles\Micr

无需在 VS 2013 中包含指令 "math.h"即可使用 C++ 数学函数

我很好奇为什么我可以在不包含“math.h”的情况下使用C++中的数学函数。我无法通过Google搜索找到答案。这是我正在执行的简单代码。一切都在编译和运行。#includeusingnamespacestd;intmain(){constfloatPI=acosf(-1);cout 最佳答案 允许任何标准header包含任何其他标准header。 关于无需在VS2013中包含指令"math.h"即可使用C++数学函数,我们在StackOverflow上找到一个类似的问题:

c++ - 调用内联汇编的正确方法

这个问题在这里已经有了答案:Whatisthedifferencebetween'asm','__asm'and'__asm__'?(4个答案)关闭6年前。我只是在探索在C++源代码中包含程序集。它似乎是从调用asm()开始的,但我也看到了_asm()和__asm()。下划线之间有什么区别?如果相关的话,我对GNU编译器最感兴趣。编辑:来自thisforum_asm-simplyinvokestheinlineassembler__asm-istreatedlikeanintrinsicfunctioncall不确定这是真的还是胡扯?

c++ - 如何从C++动态调用汇编函数?

要求:对于某些项目,我们有独特的要求。该应用程序支持一种表达式语言,该语言允许用户定义自己的复杂表达式,这些表达式可以在运行时(每秒数百次)求值,并且需要在计算机级别执行才能提高性能。工作:我们的表达式解析器将脚本完美地转换为相应的汇编语言例程。我们通过静态链接用我们的C测试程序生成的目标文件进行了检查,它们产生了正确的结果。由于客户端可以随时更改脚本,因此我们的程序(在运行时)检测到更改,并调用解析器,该解析器生成相应的汇编例程。然后,我们从后端调用汇编器以创建目标代码。问题HowcanwecallthisassemblyroutinedynamicallyfromtheC++pro

c++ - SSE 内联汇编和可能的 g++ 优化错误

让我们从代码开始。我有两种结构,一种用于vector,另一种用于矩阵。structAVector{explicitAVector(floatx=0.0f,floaty=0.0f,floatz=0.0f,floatw=0.0f):x(x),y(y),z(z),w(w){}AVector(constAVector&a):x(a.x),y(a.y),z(a.z),w(a.w){}AVector&operator=(constAVector&a){x=a.x;y=a.y;z=a.z;w=a.w;return*this;}floatx,y,z,w;};structAMatrix{//Row-ma

c++ - 有没有办法在 GCC 中禁用内联汇编程序?

我正在为LeetCode、Codeforces等编程竞赛开发一个在线评委系统。对于大多数编程竞赛,C/C++中不允许使用内联汇编程序,因此我想在我的系统中添加相同的限制。我想让GCC和G++在编译包含内联汇编的C/C++程序时产生错误,这样任何包含内联汇编的代码都会导致编译错误。有办法实现吗?我应该将一些命令行参数传递给GCC/G++吗?注意:禁用内联汇编只是为了遵守规则,而不是出于安全考虑。 最佳答案 有没有办法在GCC中禁用内联汇编程序?是的,有几种方法。在编译器中关闭汇编要在编译阶段执行此操作,请使用参数-fno-asm。但是

c++ - 为什么简单的内联汇编函数不能在 GCC 中正常工作?

我有一个简单的内联汇编函数,它在MSVC中运行良好,但由于某种原因拒绝在AppleGCC4.2.1下运行(i386arch,强制32位模式)。幸运的是,更复杂的汇编函数可以正常工作,但是我不明白为什么这个函数不起作用...不幸的是,我无法调试它-从外观上看,XCode中没有寄存器窗口4.0.2(它是3.2版本)。我很肯定这个问题与英特尔风格的汇编无关。intConvert(doublevalue){_asm{fldvaluepusheaxfistpdwordptr[esp]popeax}//Thereturnedvalueisinsane} 最佳答案

c++ - getch 相当于汇编语言

我在汇编语言中编程,在C++中使用x86,我需要知道汇编语言中的getch等价物而不是C++语言,因为我不想使用C++编程语言中的任何函数。我在网上找到了代码,但它将给定值保存到一个变量中,并在C++中创建。我只想使用该功能来停止程序,直到按下任何键。我不必在进一步的编程中使用输入的键值。 最佳答案 这是一个特定于操作系统的问题。例如,如果您使用的是Linux,则可以像这样发出read系统调用:;Allocatesomestackbuffer...subesp,256moveax,3;3=__NR_readfrommovebx,0;