了解汇编程序的一个原因是,有时可以使用它来编写比使用更高级语言编写代码更高效的代码,特别是C. 但是,我也听过很多次说虽然这并非完全错误,但汇编程序实际上可用于生成更高性能代码的情况极为罕见,需要专业知识和汇编经验.
这个问题甚至没有涉及汇编程序指令将是机器特定的和不可移植的,或汇编程序的任何其他方面的事实.当然,除了这一点之外,还有很多很好的理由知道汇编,但这是一个特定的问题,征求例子和数据,而不是关于汇编语言与高级语言的扩展讨论.
任何人都可以提供一些特定的例子,其中汇编将比使用现代编译器的编写良好的C代码更快,并且您是否可以通过分析证据来支持该声明?我非常有信心这些案例存在,但我真的想知道这些案件究竟有多深奥,因为它似乎是一些争论的焦点.
与我的其他问题相关,请帮我调试"未知模块中发生未处理的类型'System.AccessViolationException'异常.附加信息:尝试读取或写入受保护的内存.这通常表明其他内存已损坏." 逐步执行代码,一切都会一直运行,直到实际调用del()并在该行中失败.
这段代码基于本文的示例和python代码,它在python中运行.我无法得到代码示例,因为它可以工作(相同的例外),但我希望它只是有点过时或者其他东西.
编辑:如果你关心我们如何到达这里,看看编辑历史,这是无趣的.
public static class CpuID
{
public static byte[] Invoke(int level)
{
IntPtr codePointer = IntPtr.Zero;
try
{
// compile
byte[] codeBytes;
if (IntPtr.Size == 4)
{
codeBytes = x86CodeBytes;
}
else
{
codeBytes = x64CodeBytes;
}
codePointer = VirtualAlloc(
IntPtr.Zero,
new UIntPtr((uint)codeBytes.Length),
AllocationType.COMMIT | AllocationType.RESERVE,
MemoryProtection.EXECUTE_READWRITE
);
Marshal.Copy(codeBytes, 0, codePointer, codeBytes.Length);
CpuIDDelegate cpuIdDelg = (CpuIDDelegate)Marshal.GetDelegateForFunctionPointer(codePointer, typeof(CpuIDDelegate));
// invoke
GCHandle handle = default(GCHandle);
var buffer = new byte[16];
try
{ …Run Code Online (Sandbox Code Playgroud) 我理解计算机如何在基本原理上工作,例如,程序可以用C#,C等"高级"语言编写,然后将其分解为目标代码,然后分解为处理器才能理解.但是,我真的想学习装配,以及它如何在现代应用中使用.
我知道处理器在基本x86指令集之上有不同的指令集.所有汇编语言都支持所有指令集吗?
有多少汇编语言?有多少与其他语言一起使用?
如何在程序集中编写例程,然后将其编译为对象/二进制代码?
那么有人会如何用C或C++这样的语言引用汇编代码中的函数/例程?
我们怎么知道我们在汇编中编写的代码可能是最快的?
是否有关于汇编语言的推荐书籍/将它们与现代程序一起使用?
对于问题的数量感到抱歉,我希望它们足够通用,对其他人有用,并且足够简单,让其他人回答!