一个小的asm

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个小的asm相关的知识,希望对你有一定的参考价值。

操作系统是如何工作的

操作系统借用一套完备的处理过程,对输入的程序执行并输出结果

 

 

#include <stdio.h>

#include <stdlib.h>

main{

_asm_ volatile(
 "movl $0,%%eax\n\t"
 "addl %1,%%eax\n\t"
 "addl %2,%%eax\n\t"
 "movl %%eax,%0\n\t"
 :"=m"(val3);
 :"c"(val1),"d"(val2);)
printf("val1:%d+val2:%d=val3:%d\n",val1,val2,val3);
return 0;

}

 

?

上述代码的意思是内嵌一段汇编程序,并且不让操作系统优化

将0赋值给eax,此时eax=0;

将1号里的值也就是val3与eax相加再给1号;

将此时的eax=1号+2号,的值给2号;

将eax=1号+2号,赋给0号;

将val3存入m指示的内存中;

val1赋给ecx,val2赋给edx;

输出结果检查;

函数执行完毕;

总结:通过本次学习,对linux稍有理解,如何在c中内嵌asm,还有转义字符%,指示m等的用法也有了一定的理解。

原创作品转载《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 

 

以上是关于一个小的asm的主要内容,如果未能解决你的问题,请参考以下文章

MSE+ASM实现双擎微服务治理

在PaddlePaddle中的Notebook代码片段

在调用asm函数之前调用printf与否的神秘副作用?

Java ASM系列:(070)如何编写ASM代码

动态代码生成技术在 Presto 中使用简介

动态代码生成技术在 Presto 中使用简介