<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 第11章 棧(X86匯編教程)

          第11章 棧(X86匯編教程)

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          ,是什么呢?其實啊,棧,就是一種數(shù)據(jù)放進(jìn)內(nèi)存和從內(nèi)存讀取出來的方法.用棧來操作數(shù)據(jù),幾乎無需自己操心數(shù)據(jù)會被保存在內(nèi)存的什么地方(不出意外的話.....)

          棧操作內(nèi)存的方法是寫入的時候把數(shù)據(jù)一個一個推進(jìn)去,寫一次推一個數(shù)據(jù).而提取數(shù)據(jù)當(dāng)然也是一個一個提取出來.注意:提取過的數(shù)據(jù)就會消失(實際上沒有消失,可以再次提取,但....那還不如直接用正常方式操作內(nèi)存呢..).不像普通內(nèi)存操作可以反復(fù)讀取.棧提供了一種"后進(jìn)先出"的數(shù)據(jù)操作方法.把最后放進(jìn)內(nèi)存的數(shù)據(jù)最先拿出來.這種內(nèi)存操作方法在某些方面會有巨大的用處.

          本文引用地址:http://www.ex-cimer.com/article/201612/324268.htm

          使用棧來操作內(nèi)存,先在內(nèi)存中定義一個位置,作為"棧頂",這個定義的方法也沒啥,直接把你要作為棧頂?shù)膬?nèi)存地址寫進(jìn)SS:SP寄存器即可.這2個寄存器就是"棧頂指針寄存器組合" (一般系統(tǒng)會自動定義棧頂,無需自己操作,所以這步可以跳過,知道SS:SP寄存器的作用即可.)

          我們用堆棧往內(nèi)存里面推入數(shù)據(jù)之后,棧頂就會移動(自動的喲!).所以不用擔(dān)心會把曾經(jīng)推進(jìn)堆棧的數(shù)據(jù)覆蓋(當(dāng)然,你可別因為這樣就拼命往堆棧里邊壓數(shù)據(jù)...內(nèi)存會爆掉的[=_=0])

          CPU用堆棧操作內(nèi)存的步驟:

          數(shù)據(jù)入棧:

          1:往內(nèi)存的[SS:SP]寫入數(shù)據(jù)

          2:新的SP寄存器值=SP寄存器值-入棧數(shù)據(jù)的長度(單位:字節(jié),一般是字形數(shù)據(jù).也就是2個字節(jié))

          數(shù)據(jù)出棧:

          1:SP寄存器值+出棧數(shù)據(jù)的長度(同上個括號)

          2:在[SS:SP]讀取數(shù)據(jù)

          然后,用棧操作指令就能把數(shù)據(jù)推進(jìn)棧里,或從棧里把數(shù)據(jù)弄出來....


          指令名 :PUSH
          操作數(shù)數(shù)量:1
          操作數(shù)名 :數(shù)據(jù)
          指令用途 :把一個數(shù)據(jù)推進(jìn)棧里,可以是直接數(shù),也可以是寄存器或內(nèi)存地址(內(nèi)存地址的話需要指定推進(jìn)堆棧里的數(shù)據(jù)長度)

          指令名 :POP
          操作數(shù)數(shù)量:1
          操作數(shù)名 :存放數(shù)據(jù)的地方
          指令用途 :把一個數(shù)據(jù)從堆棧里提取出來.可以放到寄存器或內(nèi)存地址里.(此處內(nèi)容同上面那個括號)
          實例:
          PUSH AX;把AX里面的數(shù)據(jù)推進(jìn)堆棧里
          POP BX;把最后推進(jìn)堆棧的數(shù)據(jù)讀取出來放進(jìn)BX
          內(nèi)存地址實例:
          PUSH WORD [DS:0];那個WORD就是用來指定數(shù)據(jù)長度的,字形(WORD)為2個字節(jié)
          POP DWORD [DS:0];4個字節(jié)出棧

          本章就到這里,作業(yè):把4個通用寄存器[AX BX CX DX]都壓棧再取回吧!


          關(guān)鍵詞: 棧X86匯編教

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();