1. gzyueqian
      13424082685
      首頁 > 新聞中心 > > 正文

      基址偏址的間接尋址方式

      更新時間: 2007-01-23 16:09:32來源: 粵嵌教育瀏覽量:1093

        MCS-51中的查表指令中有尋址方式是采用基址偏址的間接尋址方式MOVC  A, @A+DPTR

        我對這個命令一直不理解,@DPTR中應該是數據吧,@A中也是數據,他們相加怎么能是地址呢?

        DPTR是程序地址,A是偏移量,A+DPTR仍是程序地址,@A+DPTR是該地址中的數據值。

      內容    地址
      …    
      25    TABLE+5
      16    TABLE+4
      9    TABLE+3
      4    TABLE+2
      1    TABLE+1
      0    TABLE
      …      


        例子:根據累加器A中的數(0-5),用查表的方法求平方值。

        將0-5的平方值利用DB偽指令將其存放在程序存儲器的平方值表中,將表的首地址送到DPTR中,將待查的數(設在R0中)送到A中,程序如下:

      MOV    DPTR,#TABLE        ;(1)
      MOV    A,R0            ;(2)
      MOVC    A,@A+DPTR        ;(3)
      ……
      TABLE:DB    0,4,9,16,25

        要理解這個程序,要從后面看起。

        DB是一條偽指令,它的用途是將其后面的數,這里也就是0,4,9,16和25放在ROM中,注意,這里的“放”不是在程序執行時,而是在程序被編譯時就完成了。上面的圖是存儲器的映象圖,其中有就有這些數,并且這些數在ROM中是順序存放的,而0所在單元的地址就是TABLE。TABLE在這里只是一個符號,到了終變成代碼的時候(匯編時),TABLE就是一個確定的值,如1FFH或23FH等等。但在這里,用符號來表示更方便,所以就以TABLE稱呼之。

        來看一下程序的執行情況。

        首先執行行,即將TABLE送入DPTR中。然后執行第二行,取出欲查表x的值,如果設這個值是2,來看一看會有什么情況。

        在執行第三行時,將DPTR中的值(現在是TABLE)和A中的值相加,即得到結果TABLE+2,然后以這個值為地址,到ROM中相應單元中去取數,看一下圖3-10中這個單元中的值是多少,是4,正是2的平方,所以就獲得了正確的結果。

        為什么這個例子要用TABLE來作說明,好像很別扭,如果我們將數據存放在1000H單元開始的5位地址中,即1000H單元放入0,1001H單元放1,1002單元放4……依此類推,不是更好理解嗎?先把1000H送到DPTR,即DPTR的值是1000H,然后A獲得的值是2,然后再執行第三行時,就是從1000+2=1002H單元中找數,即找到4。這樣更直觀些。

        的確,這樣更直觀些,也可以這樣做,但是好多時候這樣做并不方便。因為在編程時并不知道哪些ROM單元是可以空出來放這些數據,如果隨意定一個值可能會造成浪費或不能夠放下程序。即便精確地計算好放置的位置,一旦表格前面的程序有所改動又會變得不恰當??傊?,如果直接給出數值,則表格在ROM中的位置是由人為固定的,使用不方便,而比較好的方法是表格的位置是浮動的,也就是說根據表格前面的程序量的不同其位置可以發生變化。因而在程序中給出一個標號,由匯編程序根據前面所需放的程序的量來算出存放的位置。很多時候,不直接給出具體的數值,而是用標號來表示

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 一级电影在线亚洲 | 亚洲中文字幕日产乱码在线 | 综合久久久久久综合久 | 亚洲国产日韩一级精品视频网站 | 亚洲第一中文字幕 | 中文字字幕在线中文乱码不 |