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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 第4章 內(nèi)存數(shù)據(jù)(X86匯編教程)

          第4章 內(nèi)存數(shù)據(jù)(X86匯編教程)

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          內(nèi)存,儲存臨時數(shù)據(jù)的地方.在運(yùn)行中的程序.正在看的圖片,正在編輯的文本,你現(xiàn)在在看的這章教程,一律都被拷貝一份在內(nèi)存里.
          這一章講的就是內(nèi)存數(shù)據(jù)了.現(xiàn)在的電腦,內(nèi)存都上G了吧.但是,你知道么?在電腦剛開機(jī)那會兒,最多能用1MB的內(nèi)存!這是因?yàn)镃PU其實(shí)有幾個模式,實(shí)模式和保護(hù)模式,以及64位模式,(再往后的更強(qiáng)大的模式我就不說了,因?yàn)?.....我也不知道!)訪問內(nèi)存,就需要尋址,剛開機(jī)的時候,CPU在實(shí)模式下,什么是實(shí)模式呢?那是很久以前的CPU的16位模式,那時候的電腦內(nèi)存只有1MB,也就是說尋址方式只要夠?qū)ぶ?MB就行了.自然不可能數(shù)G內(nèi)存都用上.后來80386CPU的32位保護(hù)模式出來了(其實(shí)中間有個80286,從286開始就有保護(hù)模式了,不過似乎不是32位的),386保護(hù)模式的寄存器是32位了.能尋址4GB內(nèi)存(暫時只教實(shí)模式,保護(hù)模式之類就不詳細(xì)說了.以后再看看能不能也寫進(jìn)這教程里)現(xiàn)在新出現(xiàn)的80686有64位模式,寄存器是64位的.
          嘛,說重點(diǎn),實(shí)模式的尋址方式.內(nèi)存是一維的,數(shù)據(jù)都按照一條線排列,訪問內(nèi)存需要提供一個內(nèi)存地址.內(nèi)存第1個字節(jié)的地址是0,(電腦數(shù)學(xué),0是起點(diǎn)),恩,就是那樣,第2個字節(jié)的地址是1.依次類推.尋址方式就是訪問內(nèi)存提供地址的方式.在實(shí)模式里,寄存器有16位,也就是說單獨(dú)一個寄存器能表達(dá)的地址最多只有64KB(請自行驗(yàn)證,驗(yàn)證方法:用計算器的二進(jìn)制模式,輸入16個1,轉(zhuǎn)10進(jìn)制)
          64KB啊!那明顯不夠用啊!所以,實(shí)模式尋址使用2個寄存器進(jìn)行尋址,按照"段:偏移"的方式尋址.
          前面說過段寄存器CS,DS,ES,SS,就是專門用來尋址用的,存儲"段"那部分的數(shù)據(jù).至于"偏移"部分的數(shù)據(jù)嘛...可以用寄存器BX,SI,DI,SP,IP,BP中的任何一個來表示,也可以直接用數(shù)字表示.實(shí)例:
          CS:BX
          CS:1234
          那么,"段:偏移"又如何表達(dá)一個一維地址的呢?請看下邊:
          CPU 通過地址線通知內(nèi)存它要操作的地方.在CPU里面有20根地址線,也就是說,"段:偏移"尋址方式只能尋址20位的地址(所以說就算2個16位寄存器合一起,想尋址32位的內(nèi)存地址那也是不行的...),20位,也就是1MB.那么,把2個16位的數(shù)據(jù)轉(zhuǎn)換成20位呢?
          算法是這樣的:
          (段*16)+偏移
          恩,段寄存器里面的數(shù)值乘以16(在16進(jìn)制中是10)加偏移地址.
          實(shí)例:
          段寄存器=15
          偏移地址=128
          于是尋址得到的內(nèi)存地址為:(15*16)+128=368

          恩, 講完尋址方式了.接著講數(shù)據(jù)的低位高位排序.將來在學(xué)習(xí)過程中,你會碰到一些數(shù)字倒過來儲存的情況,比如說五萬三千二百一十七,儲存在內(nèi)存中卻是 71235,這就是高位和低位按順序排列了,在這個數(shù)字里,7是個位,所以在最前,1是十位所以第2.以此類推.也許你已經(jīng)震驚的發(fā)現(xiàn)了,沒錯,電腦中的數(shù)字沒有反,是我們現(xiàn)實(shí)中用的數(shù)字反了,五萬三千二百一十七我們用53217表示,我們把最高的萬位的5放在了最前面!在寄存器中也是如此,低位在前高位在后.

          接著講講匯編中的數(shù)字表示方式吧.在匯編中可以輸入10進(jìn)制2進(jìn)制16進(jìn)制等數(shù)字(當(dāng)然,編譯生成代碼后都是2進(jìn)制.)這么多的進(jìn)制,如果沒有說明,匯編編譯器一定會弄錯.那么我們?nèi)绾蜗蚓幾g器表示哪個數(shù)字是多少進(jìn)制的呢?
          我們可以在數(shù)字后邊加個英文字母表示,2進(jìn)制的數(shù)字在后邊加B,實(shí)例:01110011B 16進(jìn)制的數(shù)字則在后邊加H,實(shí)例:1F3AH,至于10進(jìn)制則不需要,所有的數(shù)字進(jìn)制后邊都有一個英文字母,那么其中一種進(jìn)制不用也沒關(guān)系的是吧?因?yàn)?0進(jìn)制最常用所以就把后邊不用加英文字母的權(quán)利給了它,在匯編中10進(jìn)制數(shù)字不用特殊表示.
          另外,由于16進(jìn)制涉及到了英文字母,ABCDEF,有可能和匯編代碼弄混,所以,如果16進(jìn)制第一個數(shù)字是英文字母,則必須在前面加個0.
          實(shí)例:
          A2H
          必須寫成:
          0A2H

          好了,本章就說道這里了~


          評論


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