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

          新聞中心

          GNU ARM匯編--(一)開篇

          作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
          在大學(xué)的時(shí)候,匯編就是學(xué)的很爛.一是對匯編這門語言沒概念,二是那些指令集很難記清楚,用的機(jī)會也少,自然學(xué)的不好.但是現(xiàn)在覺得相當(dāng)有必要重頭學(xué)習(xí)一下匯編.部分原因我在上一篇寫完設(shè)備模型的總結(jié)時(shí)提到了而.最近在看一本書《ARM:Assembly Language Programming》,作者是Peter Knaggs & Stephen Welsh.作者在開頭也提出學(xué)習(xí)匯編的必要性和重要性,借他們的話重新說一下:
          他們首先用三個(gè)問句來引出為什么要學(xué)習(xí)匯編:
          外科醫(yī)生為了知道手術(shù)刀的用法而需要學(xué)習(xí)冶金嗎?飛行員需要學(xué)習(xí)熱力學(xué)理論來理解飛機(jī)引擎是如何工作的?報(bào)社的記者要學(xué)習(xí)電子學(xué)來理解照相機(jī)如何工作的?答案當(dāng)然是“NO”,那么為什么要讓學(xué)生學(xué)習(xí)匯編語言和計(jì)算機(jī)結(jié)構(gòu)呢?
          第一就是教育和培訓(xùn)不是一碼事,大學(xué)就應(yīng)該學(xué)大學(xué)里該教的內(nèi)容,當(dāng)然學(xué)生也得好好學(xué).
          第二是匯編語言是計(jì)算機(jī)體系結(jié)構(gòu)和計(jì)算機(jī)軟件的基礎(chǔ)
          第三:匯編可以幫助我們更好的理解數(shù)據(jù)類型,指針,堆棧、函數(shù)調(diào)用、遞歸調(diào)用以及參數(shù)傳遞,匯編可以更直接的訪問IO和設(shè)備,幫助理解設(shè)備驅(qū)動等等.
          總之匯編會告訴我們計(jì)算機(jī)系統(tǒng)內(nèi)部正在發(fā)生什么
          而按照目前我個(gè)人的體會是:
          學(xué)習(xí)匯編可以讓我更好的寫C,學(xué)習(xí)匯編可以讓我更好的理解loader,學(xué)習(xí)匯編可以讓我更好的理解進(jìn)程和內(nèi)存管理,虛擬存儲器和存儲器映射等知識.總之,好處多多.目前匯編成了我的一個(gè)瓶頸,那搞定它可以讓我上一個(gè)臺階.
          接下來學(xué)習(xí)匯編的環(huán)境為:操作系統(tǒng)為ubuntu,編譯器arm-linux-gcc,平臺是s3c2440(ARM920).
          ARM匯編的指令集就那些,但是windows下的arm匯編和linux的arm匯編有細(xì)微區(qū)別.windows下是用ADS codewarrir等環(huán)境來開發(fā),編譯器是armasm,而linux用的是gnu arm,更個(gè)接近于AT&T風(fēng)格.偏向于linux下的環(huán)境,所以就選擇了GNU ARM匯編.
          學(xué)習(xí)GNU ARM匯編的計(jì)劃和目標(biāo):
          ARM體系結(jié)構(gòu)
          ARM下的指令集
          GNU匯編的風(fēng)格
          在s3c2440平臺上的驗(yàn)證
          當(dāng)然最終的目的還是為了學(xué)習(xí)loader和linux.
          開始吧,新的學(xué)習(xí)目標(biāo)~~~


          關(guān)鍵詞: 匯編編譯器linu

          評論


          技術(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); })();