扎口机厂家
免费服务热线

Free service

hotline

010-00000000
扎口机厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

内联汇编的技巧

发布时间:2020-07-01 01:47:12 阅读: 来源:扎口机厂家

有时我们的程序需要一些很高的执行效率或者执行系统底层的功能模块,这些关键的部分我们可以采用内联汇编直接插入汇编指令来达到我们的要求,以下是几个技巧与大家共同探讨.

本文引用地址:内联汇编嵌入VC语句:

在VC中内联汇编非常方便,只需要按照如下格式

__asm{

//汇编语句

}

请看如下示例代码

void CAlcmemDlg::OnButton3()

{

DWORD d=(m_size*1024*1024)/sizeof(DWORD);

DWORD*p=(DWORD*)m_p;

DWORD s;

m_tMin(0);

m_tMax((float)d);

m_tEnabled(TRUE);

if(NULL!=m_p){

__asm{

mov ecx,d

mov eax,0

L:mov edx,DWORD ptr p

mov [edx+eax],1//随便写入数据,此处写入1

inc eax

mov s,eax

pushad

}

m_tValue((float)s);

__asm{

popad

loop L

}

}

}

请注意示例代码中两个__asm块中的pushad 和 popad 语句,pushad保存了寄存器环境,popad恢复了寄存器环境,使得m_tValue((float)s);语句对寄存器的影响被抵销,你还可以调用其他任何语句。但建议是尽量少打断内联汇编块,以减少运行时来回倒腾寄存器环境的时间。笔者的测试是,当删除m_tValue((float)s);并且合并两个__asm块,同时删除pushad,和popad后,速度明显提高。可见这种打断通常是得不偿失。

通常要保存的寄存器环境还有Flags寄存器等,这些视具体情况而定。

2.自由使用FPU,MMX等指令

内蒙古劳保工服制做

河北防静电工服订做

滨州劳保工服订做