Dev C++调用汇编

参考:

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;
}
原文地址:https://www.cnblogs.com/LPworld/p/14060667.html