欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2657|回復: 2
打印 上一主題 下一主題
收起左側

匯編之單片機數據傳輸尋址的機器指令碼原理例解

[復制鏈接]
跳轉到指定樓層
樓主
ID:266429 發(fā)表于 2019-3-4 17:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機匯編指令集中,每條指令均有長度,這個長度,其實指的是這條指令的機器代碼的字節(jié)長度。每條指令的機器代碼中,第一字節(jié)必然是機器指令碼,其它字節(jié)則是操作數。
數據要在不同存儲位之間傳輸,首先必須在指令中明確操作數的所在存儲器種類和地址,即必須明確源操作數在哪種存儲器中、其地址在哪,目的操作數在哪種存儲器中,其地址在哪。
我們舉一個例子:
匯編指令:MOV R0#data
匯編程序中例子:MOV R0#22H
程序功能說明:將十進制數據22送入寄存器R0中,即把程序存儲器中的一個數據22H,送入數據存儲器中的工作寄存器R0中。
機器指令: 1001110  00010110 (即78H  22H,前面78H為操作指令碼,后面22H為被操作數(一般稱為源操作數))。
該指令中的源操作數存于程序存儲器這類存儲器中,其地址為緊跟操作指令碼78H所在單元之后的一個單元;
目的地為數據存儲器中低128B區(qū)中,其地址為R0的地址。
我們來看看在這條指令中,是如何明確這幾個內容的:
源操作數所在存儲器種類:操作指令碼直接明確指出為程序存儲器;
源操作數所在程序存儲器中的地址:操作指令碼直接明確指出在操作指令碼之后的一個單元中;
目的操作數所在存儲器種類:操作指令碼直接明確指出為數據存儲器中;
目的操作數所在數據存儲器中的地址:數據存儲中低128B中的R0(如果是第一組工作寄存器,則其地址為00H)。
綜上所述,我們可以明白,51單片機為“將程序存儲器中機器指令碼之后的一個單元中的數據送入單片機內工作寄存器R0,單設計了一條機器指令碼。同樣的,51單片機也為R1~R7各自對應設計了一條機器指令碼,對應的為79H~7FH
該條指令為2字節(jié)指令,執(zhí)行完成后,PC+2
吐槽:51單片機為8位機,最多只能做到256條機器指令碼,這每一個位置都是寶貴的資源。象這樣8個工作寄存器每個都對應設計一條機器指令碼,顯然不是最優(yōu)化設計,在這種功能上平時也用不了這么多吧。也許是51出來得太早,當時考慮得并不是那么科學合理吧。現(xiàn)在要改也不是不行,但是兼容性是個繞不過去的坎。
處理器操作過程:處理器從程序存儲器中取出78H,并被當作指令被送入指令解析控制器;指令解析控制器見到是78H,立即解析成將程序存儲器中下一個地址中的內容取出并將其當作操作數送入R0中。(如果程序存儲器中存的不是78H而是79H,那么緊隨其后的內容就會被送入R1而不是R0,匯編程序就寫成MOV R1#22H)。操作完成后,程序存儲中的下一個內容將被當作操作指令碼。
解讀:從以上過程可以看出,現(xiàn)有匯編語言所稱的立即數,其實是指存于程序存儲器中緊隨操作指令所在地址之后的一個地址中的內容。所以,以上程序例子可以這樣解讀:將一個操作數據送入R0中,該數據原存放于程序存儲器中該操作指令所在地址之后的一個地址中;或者說將程序存儲器中的一個數據送入R0中,該數據原存放于程序存儲器中該操作指令所在地址之后的一個地址中。PC值的變化與該指令的字節(jié)長度一致。
該指令功能的其它實現(xiàn)方法:我們知道數據存儲器低128B區(qū)是可以直接尋址的,所以,我們也可以用MOV direct,#data這個比較通用的語句來實現(xiàn),其中的direct ,直接寫成R0的地址就是了。但是,這就變成了3字節(jié)指令,單片機的執(zhí)行時間必然延長,且只能使用一個固定的R0。這也是為什么本來可以用MOV direct,#data來實現(xiàn)卻占用寶貴的資源專門來設計一類2字節(jié)指令的原因。
MOV direct,#data的機器指令碼為75H,在這條語指令中,75H指出了源操作數存于程序存儲器中該機器指令碼之后的一個單元中,目的操作數在數據存儲器中,其地址則由direct指定。
另外再細說明一下,教材中所指的“立即數”、“立即尋址”,其實就是指該數據存于機器指令碼之后的一個單元中,該數據在匯編工具將整個程序匯編成機器碼時,緊跟在該機器指令碼之后,燒寫工具按其順序寫入程序存儲器中。
個人見解,不妥之處請高手指正。

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2019-3-5 03:51 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:266429 發(fā)表于 2019-3-5 08:15 | 只看該作者
    寫去寫來還是寫漏了一點重要的東西,那就是數據的傳輸方向,這個在指令中是必須明確指出的。在51的芯片設計中,其傳輸方向,全部在機器指令碼中指定。象以上的例子中,78H指令碼就已明確指明了傳輸方向是由程序存儲器向數據存儲器傳輸。這一點,也是因為與尋址方式是兩回事,所以忘了,但這一點,對于我們弄明白51的指令系統(tǒng)設計,卻是很重要的。
    按說,單片機可以設計或只設計一個通用數據傳輸指令,這個指令后面列一堆參數來指明存儲器種類、具體地址、傳輸方向什么的,成為多字節(jié)指令,也能實現(xiàn)其功能,而且因為其通用性,編程序要簡單得多。但是,正如前面說的,指令字節(jié)越少,則執(zhí)行時間越短。這只是一個方面,另一方面,字節(jié)長了,則整個程序機器代碼也就長了,在程序存儲器中的占位也就多了,現(xiàn)在的ROM容量大了也許不覺得,但當年,蓋子們可是為了能將一段程序裝進當時容量可憐的ROM中,絞盡了腦汁的。
    還有,以上例子中所說的存儲器,全部都說的是內部的。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表