工具
gcc asm去编译汇编,这个叫做汇编器
编译器将C代码编译成汇编代码,汇编器将汇编代码编译成机器码
教程: https://www.ibm.com/developerworks/cn/aix/library/au-inline_assembly/index.html
https://www.jianshu.com/p/1782e14a0766
代码AT&T格式汇编
|
|
编译运行
intel格式汇编
https://blog.werner.wiki/72829768/
编译运行
intel格式汇编与AT&T格式汇编的区别
https://blog.csdn.net/tigerjibo/article/details/7708811
https://blog.csdn.net/tianshuai1111/article/details/7900084
C转汇编
1,把.c程序转变为AT&T格式汇编.s
[root@xxx asm_study]# gcc -S asm.c -o asm.s
[root@xxx asm_study]# ls -al asm.s
-rw-r–r– 1 root root 1387 06-30 10:41 asm.s
2,把.c程序转变为Intel格式汇编.s
[root@xxx asm_study]# gcc -masm=intel test.c -o test.s
当然,要想把c程序转为Intel汇编时,其中不能包含AT&T格式的汇编,否则无法转。
C++
AT&T风格
|
|
编译
intel风格
|
|
编译运行
读取cpuid
原理:
读cpu的信息只需要一条汇编指令 cupid ,入口参数在EAX寄存器,返回的信息在EAX,EBX,ECX,EDX寄存器,也就是说执行cupid之前先给EAX寄存器赋值,在执行cupid,执行过之后,cpu的相关信息就在EAX,EBX,ECX,EDX寄存器中了,入口参数EAX
https://blog.csdn.net/fisher_jiang/article/details/4348194
https://blog.csdn.net/razor87/article/details/8711712