上次在《关于内联汇编的几个技巧》一文中只是简单地介绍了如何在C++中使用内联汇编,这一次先对上一次的文章作一补充,然后介绍如何使用MMX指令。 一、 内联汇编的一般原则:1、 自由使用通用寄存器;(EAX,EBX,ECX和EDX)2、 其它寄存器利用堆栈保留,使用,最后恢复;一般的像下面这样: __asm{ push ebp push esp ……….//使用EBP和ESP pop esp pop ebp} 二、 内联汇编__asm可以单独使用:例如:__asm mov eax,anyval1__asm mov ebx,anyval2 三、 函数返回值可以直接放到eax中,可以不理会警告例如: Read More
posted @ 2008-11-05 16:01 绿色冰点 Views(943) Comments(1) Diggs(0) Edit
有时我们的程序需要一些很高的执行效率或者执行系统底层的功能模块,这些关键的部分我们可以采用内联汇编直接插入汇编指令来达到我们的要求,以下是几个技巧与大家共同探讨. 1. 内联汇编嵌入VC语句:在VC中内联汇编非常方便,只需要按照如下格式__asm{ //汇编语句}请看如下示例代码void CAlcmemDlg::OnButton3() { DWORD d=(m_size*1024*1024)/sizeof(DWORD); DWORD*p=(DWORD*)m_p; DWORD s; m_pr.SetMin(0); m_pr.SetMax((float)d); m_pr.SetEnabled(T. Read More
posted @ 2008-11-05 15:56 绿色冰点 Views(577) Comments(2) Diggs(0) Edit
问题源自一段简单的代码: 在以上代码中,如果你输入:abcd,那么如你所望,你会看到"正确"的输出"c"。但是会有错误提示出现: Debug Error!Program: test.exeDAMAGE: after Normal block(#64) at 0x003429f8更离奇的是,如果将代码 Read More
posted @ 2008-11-05 11:25 绿色冰点 Views(297) Comments(0) Diggs(0) Edit