Questions tagged «assembly»

汇编语言(asm)编程问题。确保还标记您正在使用的处理器和/或指令集以及汇编器。警告:对于.NET程序集,请使用标签[.net-assembly]。对于Java ASM,请改用标记[java-bytecode-asm]。



3
为什么GCC垫可与NOP一起使用?
我已经使用C了很短的时间,最近才开始涉足ASM。当我编译程序时: int main(void) { int a = 0; a += 1; return 0; } objdump反汇编具有代码,但在重新输入后会提示: ... 08048394 <main>: 8048394: 55 push %ebp 8048395: 89 e5 mov %esp,%ebp 8048397: 83 ec 10 sub $0x10,%esp 804839a: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) 80483a1: 83 45 fc 01 addl $0x1,-0x4(%ebp) …
80 c  gcc  assembly 

7
什么是.S文件?
我.S在各种项目中都看到过文件,例如Linux内核,FreeBSD内核或其他一些项目中。这些文件是做什么用的,为什么我们没有.c文件呢?
79 assembly 

3
什么是英特尔微码?
从我读到的内容来看,它用于修复CPU中的错误,而无需修改BIOS。根据我对汇编的基本知识,我知道汇编指令由CPU在内部分解为微代码,并相应地执行。但是intel可以通过某种方式在系统启动和运行时进行一些更新。 有人有更多信息吗?是否有任何关于微码可以做什么以及如何使用的文档? 编辑:我读过维基百科的文章:没弄清楚我怎么能自己写一些,以及它有什么用。
77 linux  assembly  intel 

5
为什么有条件移动不容易受到分支预测失败的影响?
在阅读了这篇文章(关于StackOverflow的答案)(在优化部分)之后,我想知道为什么条件移动不容易受到分支预测失败的影响。我在一篇关于cond move的文章中找到了该文章(AMD撰写的PDF)。同样,他们声称cond的性能优势。动作。但是为什么呢?我没看到 在评估该ASM指令时,尚不清楚先前的CMP指令的结果。

5
为什么这个C ++程序如此之快?
我写了一个基准测试来比较Python,Ruby,JavaScript和C ++的不同解释器/编译器的性能。不出所料,事实证明(优化的)C ++胜过脚本语言,但是这样做的原因令人难以置信。 结果是: sven@jet:~/tmp/js$ time node bla.js # * JavaScript with node * 0 real 0m1.222s user 0m1.190s sys 0m0.015s sven@jet:~/tmp/js$ time ruby foo.rb # * Ruby * 0 real 0m52.428s user 0m52.395s sys 0m0.028s sven@jet:~/tmp/js$ time python blub.py # * Python with CPython * 0 real 1m16.480s user …

2
什么是ARM中的SP(堆栈)和LR?
我一遍又一遍地阅读定义,但仍然没有得到ARM中的SP和LR?我了解PC(它显示下一条指令的地址),SP和LR可能相似,但我不了解它是什么。请你帮助我好吗? 编辑:如果您可以通过示例进行说明,那就太好了。 编辑:终于弄清楚了LR是什么,仍然没有得到SP是什么。
76 assembly  stack  arm 

2
@plt在这里是什么意思?
0x00000000004004b6 <main+30>: callq 0x400398 <printf@plt> 有谁知道? 更新 为什么两个disas printf给我不同的结果? (gdb) disas printf Dump of assembler code for function printf@plt: 0x0000000000400398 <printf@plt+0>: jmpq *0x2004c2(%rip) # 0x600860 <_GLOBAL_OFFSET_TABLE_+24> 0x000000000040039e <printf@plt+6>: pushq $0x0 0x00000000004003a3 <printf@plt+11>: jmpq 0x400388 (gdb) disas printf Dump of assembler code for function printf: 0x00000037aa44d360 <printf+0>: sub $0xd8,%rsp 0x00000037aa44d367 <printf+7>: …

3
如何从GCC / c装配件输出中消除“噪音”?
我想检查boost::variant在我的代码中应用的程序集输出,以查看优化了哪些中间调用。 当我编译以下示例(使用的GCC 5.3 g++ -O3 -std=c++14 -S)时,似乎编译器优化了所有内容并直接返回100: (...) main: .LFB9320: .cfi_startproc movl $100, %eax ret .cfi_endproc (...) #include <boost/variant.hpp> struct Foo { int get() { return 100; } }; struct Bar { int get() { return 999; } }; using Variant = boost::variant<Foo, Bar>; int run(Variant v) { return boost::apply_visitor([](auto& …
76 c++  gcc  assembly  clang 

2
与零比较时的int运算符!=和==
我发现!=和==并不是测试零或非零的最快方法。 bool nonZero1 = integer != 0; xor eax, eax test ecx, ecx setne al bool nonZero2 = integer < 0 || integer > 0; test ecx, ecx setne al bool zero1 = integer == 0; xor eax, eax test ecx, ecx sete al bool zero2 = !(integer < 0 …

4
我应该如何开始编写设备驱动程序?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我想学习如何编写设备驱动程序,因为我认为这很有趣。我使用的是Mac OS X Macbook,但也有一台Ubuntu计算机(在Mac Min上运行)。我对C非常熟悉,目前正在阅读本书。我在网上找到了一些链接,例如Mac Dev Center。我这样做是因为这很有趣。我认为看到由于我编写的软件而使硬件得以运行,我会感到非常满足。 我想我想要的是一些提示,建议和指导,并且有人知道没有驱动程序的设备列表吗,或者我可以为已经支持的设备编写驱动程序吗?(希望使用前者,所以我实际上是提供价值)。什么是入门的好设备?我咬的东西比我咀嚼的还多吗?我不担心底层编程或汇编,也无需付出任何努力。我真的很想挑战!
75 c  assembly  hardware  drivers 

7
如何编译由GCC生成的asm?
我在玩一些汇编代码,有些事情困扰着我。 我编译这个: #include <stdio.h> int main(int argc, char** argv){ printf("Hello World\n"); return 0; } 与gcc file.c -S -o file.S此产生一个很好的小片的汇编代码: .cstring LC0: .ascii "Hello World\0" .text .globl _main _main: LFB3: pushq %rbp LCFI0: movq %rsp, %rbp LCFI1: subq $16, %rsp LCFI2: movl %edi, -4(%rbp) movq %rsi, -16(%rbp) leaq LC0(%rip), %rdi call …

3
将参数std :: min更改为浮点数的编译器输出
我在Compiler Explorer中摆弄东西,发现传递给std :: min的参数顺序更改了发出的程序集。 这是Godbolt编译器资源管理器上的示例 double std_min_xy(double x, double y) { return std::min(x, y); } double std_min_yx(double x, double y) { return std::min(y, x); } 它将被编译(例如,在clang 9.0.0上用-O3)为: std_min_xy(double, double): # @std_min_xy(double, double) minsd xmm1, xmm0 movapd xmm0, xmm1 ret std_min_yx(double, double): # @std_min_yx(double, double) minsd xmm0, xmm1 ret 如果我将std :: …

7
“组装”与“组装”
我被告知,“汇编”是您在文件中编写的内容,可以让“汇编器”将其转换为二进制代码。 但是我看到这两个术语在各种著作中混合并匹配。我什至听说您编写了“汇编程序”,然后将“汇编程序”使其可执行。 请告诉我,什么是正确的词?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.