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\n");
  __asm("\
          mov $789,%eax\n\
        mov %eax,a\
        ");
  printf("A is : %d\n",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\n");
//    __asm("\
//        mov $789,%eax\n\
//        mov %eax,a\
//    ");
//    __asm("\
//        mov pa,%eax;\n\
//        mov pb,%ebx;\n\
//        mov (%eax),%ax\n\
//        mov (%ebx),%bx\n\
//        add %bx,%ax\n\
//        mov stepnow,%bx\n\
//        mul %bx\n\
//        mov stepall,%bl\n\
//        div %bl\n\
//        mov pc,%ebx;\n\
//        mov %al,(%ebx)\n\
//        mov (%ebx),%ax\n\
//        mov %ax,(%ebx)\n\
//    ");
    __asm("\
        mov $1,%ax\n\
        mov $0,%bx\n\
        mov $5,%cx\n\
        loop_start:\n\
        cmp %bx,%cx\n\
        jle loop_exit\n\
        add %ax,%bx\n\
        jmp loop_start\n\
        loop_exit:\n\
        mov %bx,c\n\
    ");
//    __asm("\
//        mov p,%eax\n\
//        mov $1,%bl\n\
//        mov $5,%bh\n\
//        movb %bl,(%eax)\n\
//        add $1,%eax\n\
//        mov %bh,(%eax)\n\
//    ");
    //*pt=*pa*(step_all-step_now)/step_all+*pb*step_now/step_all;
//    __asm("\
//        mov stepall,%eax\n\
//        mov stepnow,%ebx\n\
//        sub %ebx,%eax\n\
//        mov pa,%ebx\n\
//        mov (%ebx),%bx\n\
//        mul %bx\n\
//        mov stepall,%ebx\n\
//        div %bx\n\
//        mov %eax,%ecx\n\
//        mov pb,%eax\n\
//        mov (%eax),%eax\n\
//        mov stepnow,%ebx\n\
//        mul %ebx\n\
//        mov stepall,%ebx\n\
//        div %bl\n\
//        add %cl,%al\n\
//        mov %al,c\n\
//    ");    
    printf("c=%d",c);
    return 0;
}
复制代码

 

posted @   海底淤泥  阅读(1049)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示