- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我用c语言写了一个简单的程序,经典的helloworld。我想知道当编译器将它翻译成汇编代码时它看起来像什么。
我使用 MinGW 和命令:
gcc -S hellow.c
当我打开这个文件时,我预计它至少会有点类似于直接用汇编编写的 hello-world 程序,即:
jmp 115
db 'Hello world!$' (db = define bytes)
-a 115
mov ah, 09 (09 for displaying strings ... ah = 'command register')
mov dx, 102 (adress of the string)
int 21
int 20
它看起来像这样:
.file "hellow.c"
.def ___main;
.scl 2;
.type 32;
.endef
.section
.rdata,"dr"
LC0:
.ascii "Hello world!\0"
.text
.globl _main
.def _main;
.scl 2;
.type 32;
.endef
_main:
LFB6:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
andl $-16, %esp
subl $16, %esp
call ___main
movl $LC0, (%esp)
call _puts
movl $0, %eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
LFE6:
.def _puts;
.scl 2;
.type 32;
.endef
我对汇编语言知之甚少,但我确实认识所谓的助记符,如 ADD、POP、PUSH、MOV、JMP、INT 等。在 C 编译器生成的代码中看不到这些。
我误解了什么?
最佳答案
这准备调用函数 __main
的参数,该函数可能完成 C 程序所需的所有初始设置
andl $-16, %esp
subl $16, %esp
call ___main
这会准备参数并调用函数 _puts
。 LC0
是包含要打印的字符串的符号。
movl $LC0, (%esp)
call _puts
这准备了main
的返回值并返回
movl $0, %eax
leave
ret
关于c - 汇编语言 - C 语言和助记符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18765776/
我在 View 中使用“访问键”功能(通过按 ALT + First char of label 我可以“跳转”到该字段): 按 ALT + m焦点应该跳转到“邮件”字段。 但是我有一条色带在使用,按
我有一个 JFrame 和一些 JButtons、JLabels 和一个 JTextfield。我需要创建一个键盘快捷键,以便在按下该快捷键时,JTextfield 获得焦点。 我该怎么做? 谢谢 最
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我有一个使用 JMenu 创建的菜单。我想为这个菜单分配一个快捷键 Alt-F。我使用 setMnemonic('F') 来做到这一点,但菜单无法识别助记符。 解决或调试此问题的最佳方法是什么?我发现
我对此很陌生。我试图以清晰的方式理解上述术语之间的区别,但是,我仍然感到困惑。这是我发现的: 在计算机汇编语言中,助记符是操作的缩写。它被输入到每个汇编程序指令的操作码字段中。例如 AND AC,37
这个问题在这里已经有了答案: Test whether a register is zero with CMP reg,0 vs OR reg,reg? (2 个答案) 关闭 5 年前。 在Shel
我正在尝试使 JavaFX 助记符工作。我在场景中有一些按钮,我想要实现的是通过按 Ctrl+S 来触发这个按钮事件。 这是一个代码 sceleton: @FXML public Button btn
做什么: ORRS R1、R3 做什么? 是否只是 R1 |= R3,可能设置 N- 或 Z 标志? 这可能是显而易见的,但我还没有找到任何描述 ORR 助记符没有操作数 2 的文档。 非常感谢您的反
有人可以向我解释为什么融合乘法累加指令有 3 种变体:vfmadd132pd , vfmadd231pd和 vfmadd213pd ,而只有一个 C 内在函数 _mm256_fmadd_pd ? 为了
我是一名优秀的程序员,十分优秀!