参考:
https://blog.csdn.net/ljx0305/article/details/5831742
https://www.cnblogs.com/jokerjason/p/9578646.html
https://blog.csdn.net/weixin_42528089/article/details/83713351
https://www.cnblogs.com/orlion/p/5765339.html
#include<stdio.h> int a; int main(){ printf("Test inline asm "); __asm(" mov $789,%eax mov %eax,a "); printf("A is : %d ",a); return 0; }
注意:mov不能同时直接寻址和间接寻址——mov $5,(%eax) 是错误的,要拆分为 mov $5 ,%ax mov ax,(%eax)
//测试代码 #include<stdio.h> int a=160,b=255,c,*pa=&a,*pb=&b,*pc=&c,stepnow=15,stepall=30; unsigned char rgb[3],*p=rgb; int main(){ printf("Test inline asm "); // __asm(" // mov $789,%eax // mov %eax,a // "); // __asm(" // mov pa,%eax; // mov pb,%ebx; // mov (%eax),%ax // mov (%ebx),%bx // add %bx,%ax // mov stepnow,%bx // mul %bx // mov stepall,%bl // div %bl // mov pc,%ebx; // mov %al,(%ebx) // mov (%ebx),%ax // mov %ax,(%ebx) // "); __asm(" mov $1,%ax mov $0,%bx mov $5,%cx loop_start: cmp %bx,%cx jle loop_exit add %ax,%bx jmp loop_start loop_exit: mov %bx,c "); // __asm(" // mov p,%eax // mov $1,%bl // mov $5,%bh // movb %bl,(%eax) // add $1,%eax // mov %bh,(%eax) // "); //*pt=*pa*(step_all-step_now)/step_all+*pb*step_now/step_all; // __asm(" // mov stepall,%eax // mov stepnow,%ebx // sub %ebx,%eax // mov pa,%ebx // mov (%ebx),%bx // mul %bx // mov stepall,%ebx // div %bx // mov %eax,%ecx // mov pb,%eax // mov (%eax),%eax // mov stepnow,%ebx // mul %ebx // mov stepall,%ebx // div %bl // add %cl,%al // mov %al,c // "); printf("c=%d",c); return 0; }