<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                內嵌匯編是微軟為了提高程序的直接操作硬件能力,以及實現大任務程序效率的提高,而嵌入在VC中的,他不依賴于匯編器對內嵌匯編代碼進行匯編,這些內嵌匯編代碼由C編譯器內部實現,可以使程序好像自陷到匯編狀態一樣。這意味著你如果在C/C++程序中使用了?inline? asm進行?匯編?那么?就注定無法跨平臺的,對于沒有匯編基礎的同學是需要去學習下王爽的8086匯編程序設計。,因為有些時候C++程序員是不得不懂這些東西的 ,否則你永遠無法知道編譯器為你的函數做了什么,.你還有哪些地方需要優化,?不管處于什么目的??我感覺?作為C++程序員?是需要懂得的。 身邊的一位大哥給我講,用匯編不一定會比C/C++要快?這一點我很同意 。所以說程序的效率不單單是所操作的語言層次決定,更多的是程序編寫者的代碼的質量的高低決定。 **內嵌匯編?在C/C++中??通過** **實際發現? 500W條數據??排序結果如下:** **算法名稱 ?? 內嵌匯編算法時間 ?????? C/C++算法 時間 ? ** **冒泡排序 ?? 5W數據? 慢的要死? ??????????????? 5W數據 慢的要死** **快速排序??????600ms左右 ?????????????????????????? 500ms左右 ??? ??** **------------------為啥會出現快速排序算法,匯編出來的結果還沒有C/C++效率高呢,原因就是我寫的內嵌匯編沒有編譯器自動生成的效率高.** **也就是代碼質量不高的緣故 。。~~** ~~~ _asm { ... } _asm .... ~~~ 引入匯編代碼,可以使程序自陷入匯編狀態,MMX匯編指令被大量應用于處理媒體引用中。。 **下面是冒泡排序代的內嵌匯編實現函數: ** ~~~ 時間復雜度 最好 T(n)=O(n)~O(n*n) 穩定算法 ~~~ ~~~ #define SIZE 10 void SortBubble(int arr[],int sizen) { int *p; p=arr-1; //&a[0]-1 __asm { mov esi,p; mov ecx,sizen; _outter: mov edx,ecx; _inner: cmp edx,ecx ;去掉相等情況 jz _exchange_no mov eax,[esi+ecx*4]; ;在函數內部不可以直接通過數組下標獲取傳遞的數組 只能通過指針 進行尋址 mov ebx,[esi+edx*4 ]; cmp eax,ebx; jnb _exchange_no; mov [esi+ecx*4],ebx; ;交換連個元素 mov [esi+edx*4],eax; _exchange_no: dec edx; jnz _inner; loop _outter; } } ~~~ **冒泡排序結果如圖** ![](https://box.kancloud.cn/2016-03-03_56d79b7933ea5.jpg) ** ** **用內嵌匯編實現快速排序算法** ~~~ //堆棧中 內存地位先存? 棧由高地址向低地址延伸 //esp -xxx //注意參數名字不要和內嵌匯編 關鍵字沖突 void? QuickSortAsm(int arr[],int lowIndex,int highIndex) { ? ?int*p=arr;? //為了尋址方便 ?int? begin; // ?int? end; // ?__asm ?{ ? ??? ?//;mov eax,[ebp+16] 堆棧高地址向低 ??? //使用寄存器 ??? mov?? eax,lowIndex? ;index first ??? mov?? ebx,highIndex ;index last ??? cmp?? eax,ebx? ;退程序 ? ??? jg??? _exit_func ? ??? mov?? esi,p???????? ;存儲數組地址-1用于尋址使用 ??? mov?? edx,[esi+4*eax]????????? ;存放key _outer:cmp?? eax,ebx?????????? ; 如果index first >index end ??? jnb?? _endLable???????? ;? 不符合條件退出 ??? ??? ??? ??? ????? ? _find1: cmp?? eax,ebx?????????? ;進入第一層循環 ??? jnb?? _inner1?????????? ;條件1 ??? ;從后尋找第一個小于key的值 ????? cmp?? [esi+4*ebx],edx? ;從后面開始比較數組元素和edx ??? jb??? _inner1????????? ;找出右邊第一個小于key的數組元素 ??? sub?? ebx,1??????????? ;last index -1? last=last-1 ??? jmp? _find1??????????? ;跳轉到循環頭 _inner1: ??? mov ecx,[esi+4*ebx]??? ;找到小于交換值 ??? mov [esi+4*eax],ecx _find2: cmp?? eax,ebx?????????? ;進入第一層循環 ??? ?jnb?? _inner2?????????? ;條件1 ??? ?;從后尋找第一個小于key的值 ??? ?cmp?? [esi+4*eax],edx? ;從左邊找第一個大于key的元素 ??? ?jg??? _inner2????????? ;針對有符號數 ??? ?add?? eax,1??????????? ;first index+1 ? ??? ?jmp? _find2??????????? ;跳轉到循環頭 _inner2: ??? mov ecx,[esi+4*eax]???? ;將第一個大于的 和 軸交換 ??? mov [esi+4*ebx],ecx ??? jmp _outer; _endLable: ??? mov [esi+4*eax],edx? ;軸復位 ? ??? ///進行遞歸?? 參數自由向左 ????? mov? begin,eax ; ??? mov? end,ebx? ? ?} //? QuickSortAsm(arr,lowIndex,begin-1); // ?? ?QuickSortAsm(arr,begin+1,highIndex); ?_asm ?{ ??? ?mov??? ecx,begin? ; 遞歸1 ??? ?sub??? ecx,1????? ;index -1 ??? ?push?? ecx??????? ; ??? ?mov??? edx,lowIndex ; ? ??? ?push?? edx ? ??? ?mov??? eax,arr ??? ?push?? eax ? ??? ?call??????? QuickSortAsm ??? ?add???????? esp,0Ch??? ;堆棧平衡 ??? ?mov???????? ecx,highIndex? ;遞歸2 ??? ?push??????? ecx ? ??? ?mov???????? edx,begin ? ??? ?add???????? edx,1 ? ??? ?push??????? edx ? ??? ?mov???????? eax,arr ? ??? ?push??????? eax ? ??? ?call??????? QuickSortAsm ??? ?add???????? esp,0Ch?? ;恢復堆棧 ?} _exit_func: ?return ; } ~~~ **如圖** **![](https://box.kancloud.cn/2016-03-03_56d79b794d194.jpg)** ** ** **冒泡排序算法的C/C++實現:** ~~~ // 時間復雜度 最好? T(n)=O(n)~O(n*n)? 穩定算法? ? void? SortBubbleC(int arr[],int sizen) { ? bool flag=true ;//若無交換 直接退出 ? int tem; ? for(int i=0;i<sizen-1&flag;i++) ? {? ? ??? ? flag=false ; ??? ? for(int j=0;j<sizen-i-1;j++) //內序冒泡 ??? ? {? ? ??? ??? ? if(arr[j]>arr[j+1]) ??? ??? ? {? ? ??? ??? ??? ? flag=true ; ??? ??? ??? ? tem=arr[j]; ??? ??? ??? ? arr[j]=arr[j+1]; ??? ??? ??? ? arr[j+1]=tem; ??? ?????? ? ??? ??? ? } ??? ? } ? } } ~~~ 如圖 ![](https://box.kancloud.cn/2016-03-03_56d79b795c7bc.jpg) **C/C++快速排序算法的實現** ~~~ //C/C++的快速排序 void QuickSortC(int arr[],int low,int high) { if(low>high) return ; int begin=low ,end=high,key=arr[low]; while(begin<end) { while(begin<end&&arr[end]>=key) --end; arr[begin]=arr[end]; while(begin<end&&arr[begin]<=key) ++begin; arr[end]=arr[begin]; } arr[begin]=key ; QuickSortC(arr,0,begin-1); QuickSortC(arr,begin+1,high); } ~~~ ![](https://box.kancloud.cn/2016-03-03_56d79b7972b4e.jpg) QQ 4223665 技術交流群? 387761601 歡迎大家一起交流學習軟件技術!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看