草庐IT

Assembly

全部标签

performance - go 中 ASM 函数调用的开销

我目前在玩围棋,它是汇编、浮点运算的性能(float32)以及纳秒级的优化。我对一个简单函数调用的开销感到有点困惑:funcBenchmarkEmpty(b*testing.B){fori:=0;idoNop的实现:TEXT·doNop(SB),0,$0-0RET结果(gotest-bench.):BenchmarkEmpty20000000000.30ns/opBenchmarkNop20000000001.73ns/op我不习惯汇编和/或go的内部结构。go编译器/链接器可以内联汇编中定义的函数吗?我能以某种方式给链接器一个提示吗?对于一些简单的函数,例如“添加两个R3向量”,这会

assembly - 如何在golang中使用汇编代码中定义的函数?

在golangsAES加密包中cipher_amd64.go使用在汇编代码(asm_amd64.s)中定义的函数。在提到的go文件中,只定义了函数头://definedinasm_amd64.sfuncencryptBlockAsm(nrint,xk*uint32,dst,src*byte)funcdecryptBlockAsm(nrint,xk*uint32,dst,src*byte)funcexpandKeyAsm(nrint,key*byte,enc*uint32,dec*uint32)如何在我自己的代码中使用这些函数?仅声明header并导入上述.go文件中的“crypto/a

assembly - 为什么汇编 POPCNTQ 基准测试会比使用整数技巧的 native Go 函数慢?

ASM版本TEXT·CountBitsUint64PopCnt(SB),NOSPLIT,$0POPCNTQx+0(FP),AXMOVQAX,ret+8(FP)RETGo版本const(m1quint64=0x5555555555555555m2q=0x3333333333333333m4q=0x0f0f0f0f0f0f0f0fhq=0x0101010101010101)funcCountBitsUint64(xuint64)int{x-=(x>>1)&m1q//putcountofeach2bitsintothose2bitsx=(x&m2q)+((x>>2)&m2q)//putcou

assembly - 堆栈变量在去?

这个问题在这里已经有了答案:Returnpointertolocalstruct(2个答案)关闭5年前。packagemainimport("fmt""os")funcmain(){varl=test(4)test(5)fmt.Fprintf(os.Stdout,"%d\n",*l)}functest(vint)*int{varp=vreturn&p}在C中,等效代码将打印5,因为第一个堆栈帧中的变量p将被第二个堆栈帧中的相同变量p覆盖。我反汇编了代码,但无法理解它。#includeint*test(intv);intmain(){int*p=test(4);test(5);print

go - SSE2 从 golang 中的打包数据中提取 float

我正在用Golang编写一个汇编函数。为简化起见,假设我想执行以下功能:funcsseSumOfMinimums(d1,d2[2]float64)float64它将计算d1[0]、d2[0]的最小值以及d1[1]和d2[1]的最小值并计算总和在assembly中我这样做:TEXT·sseSum(SB),$0-40MOVUPDd1+0(FP),X0//loadingd1toX0MOVUPDd2+16(FP),X1//loadingd1toX1MINPDX0,X1//computepairminimumsandstoretoX1MOVSDX1,X2//movefirstmintoX2//H

gcc - golang 在使用和不使用 cgo 进行构建时使用的汇编程序

假设我有一个golang包,其中包含一些汇编代码:demopkg/source1.gosource2.goasm_amd64.s如果我尝试使用gobuild构建它,工具链将使用gotoolasm来组装*.s文件。但是如果我将Cgo添加到混合物中,通过将单个import"C"放入任何源代码,go将切换到gcc汇编程序。我可以通过执行gobuild-n看到它。第一种情况下对/usr/local/go/pkg/tool/linux_amd64/asm的调用被对gcc的调用所取代。除此之外,它开始提示语法错误。是否记录了此行为,以便我可以依靠它来维护我的包?我可以强制gobuild使用一个确切

c# - 从资源复制文件

好吧,在我的C#项目中,我向资源添加了一个.xml文件,我希望将其从中提取/复制到应用程序路径,我正在尝试这样做:stringappPath=Path.GetDirectoryName(Application.ExecutablePath);//DeclarationoftheapppathFile.Copy(appPath,Properties.Resources.config);//processforcopy但是不工作:/,我怎样才能做我想做的事? 最佳答案 确保资源上的构建操作设置为“嵌入资源”。varassembly=As

.net - 使用 Assembly.Load(byte[] asm) 加载 XMLSerializers Dll 失败

关于xml序列化我有一个奇怪的情况...如果我使用正确生成的MyApp.XMLSerializers.dll运行MyApp.exe(.NET2.0WinForms应用程序),一切都很好并且序列化速度很快(在运行时不会生成序列化程序集,因为序列化程序dll已找到并且正在运行).现在,如果我将MyApp.exe作为资源嵌入到MyOtherManagedApp.exe(也是.net2.0)中,并从内部执行原始应用程序,如下所示...pasm=System.Reflection.Assembly.Load(MyOtherManagedApp.Properties.Resources.MyApp

windows - 异常处理

我正在尝试编写代码来处理异常,但覆盖了另一个异常处理程序,这可能吗?我在asm中开发一个.exe来调试一个.dll,并检测一些引发的异常(访问冲突)但是.dll有自己的异常处理,所以正常的SEH不应该工作。我想知道是否有任何类型的全局异常处理程序可以覆盖这些现有的异常处理程序? 最佳答案 查看矢量异常处理(http://msdn.microsoft.com/en-us/library/ms681420.aspx))。该页面指出“应用程序可以注册一个函数来监视或处理应用程序的所有异常。矢量处理程序不是基于帧的,因此,您可以添加一个无论

windows - call immediate 与 call dword near [dword addr]

所以最近我一直想从汇编中调用一些win32调用,并且我一直在使用NASM作为我的外部汇编程序。我调用SendMessage在我的代码中以下列方式:call__imp__SendMessageW@16这被组装成一个相对跳转(0xE8操作码),结果是访问冲突。在调试器中,计算出的跳转偏移似乎是正确的(因为__imp__SendMessageW@16似乎确实驻留在那儿)但它仍然不起作用。当我从C++调用函数时检查VisualStudio生成的程序集,我注意到它不是使用相对直接跳转,而是(用MASM的语言)calldwordptr[__imp__SendMessageW@16],对应于0xFF