汇编 --- 栈结构的妙用
生活随笔
收集整理的這篇文章主要介紹了
汇编 --- 栈结构的妙用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在js中雙重循環,代碼如下:
for(let i =0; i < l1;i++){for(let j=0; j< l2;j++){// todo...} }以上代碼在匯編中是如何實現的呢.
- 匯編中用cx和loop來代表一次循環
- 但是如果使用如下方法實現雙重循環將會出錯
- 原因如下:
- 每當執行 loop 語句時, 實際是執行 cx = cx -1 然后判斷 cx 是否為0. 于是在內層循環后(loop s), cx =0 , 然后再到 loop s0時,此時先執行 cx = cx - 1, 即此時 cx = FFFF 因此會陷入死循環
- 改進辦法.用寄存器dx來保存進入內層循環的cx,然后再內存循環結束時,將寄存器dx中的值賦給cx
- 以上方法可以解決兩層循環的問題,但是CPU中的寄存器畢竟是有限的,當循環次數多的時候,寄存器將不夠用.
- 考慮到內存,可以將寄存器cx的值存入內存中.然后在內存循環結束后,在從內存中讀取值給cx
- 以上方法可以解決CPU中寄存器不夠用的情況,但對于保存的多個數據,程序猿們必須要記住數據保存在哪個內存單元中.當代碼量大的時候,需要寫很多注釋,也不利于閱讀與維護
- 看VC++ 6.0編譯器是如何處理的
- 通過反編譯,查看匯編源碼可以發現.
- 在遇到函數時,編譯器將當前環境push進一個棧中,當執行完畢,將棧中的環境pop出來
- 于是上面的代碼可以改為如下:
總結
以上是生活随笔為你收集整理的汇编 --- 栈结构的妙用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python教程很详细_Python编程
- 下一篇: 汇编 --- 从磁盘(扇区2到18)上