久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲一区二区三区 | 91av视频| 91免费版在线观看 | 国产精品美女久久久久久久网站 | 精品成人免费一区二区在线播放 | 亚洲精品一区二区三区 | 久久午夜国产精品www忘忧草 | 日本三级精品 | 国产精品久久久久9999鸭 | 国产成人免费视频网站高清观看视频 | 国产99免费视频 | 中文字字幕在线中文乱码范文 | 国产精品福利在线观看 | 免费观看黄a一级视频 | 亚洲色图在线观看 | 中文字幕免费视频 | 久久爱黑人激情av摘花 | 国产一区二区免费 | 国产成人精品一区 | 日韩精品免费 | 一级毛片视频 | 欧美日韩一区二区三区四区 | 亚洲网站在线观看 | 国产高潮好爽受不了了夜色 | 337p日本欧洲亚洲大胆精蜜臀 | 涩涩视频网站在线观看 | 日韩综合在线 | 久久99精品久久久久久国产越南 | 午夜丰满寂寞少妇精品 | 国产中文字幕网 | 91精品中文字幕一区二区三区 | 精品一区二区三区中文字幕 | 免费同性女女aaa免费网站 | 亚洲精品久久久蜜桃网站 | 亚洲欧美在线视频 | 成人h动漫精品一区二区器材 | 18性欧美 | 五月婷婷视频 | 精品欧美激情在线观看 | 久久久精品一区 | 国产亚洲欧美另类一区二区三区 |