熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2022-7-17 21:50
正文摘要:我看到匯編語(yǔ)言在轉(zhuǎn)移數(shù)據(jù)的時(shí)候很多地方都要經(jīng)過(guò)累加器A,什么情況下必須要經(jīng)過(guò)A來(lái)中轉(zhuǎn)之后才能賦值呢?可不可以跳過(guò)A直接對(duì)特定的地址賦值呢? 圖1 還有上圖的程序,可不可以改成: MOV DPTR, #4000H ... |
這個(gè)問(wèn)題涉及內(nèi)核的設(shè)計(jì)與實(shí)現(xiàn),不是簡(jiǎn)單一句話就可以更改的 |
zhxiufan 發(fā)表于 2022-7-18 14:35 所以人們發(fā)明了RISC體系扔掉這個(gè)造成交通擁堵的“交通樞紐”。 |
A累加器就好比交通樞紐,南來(lái)北往東去西來(lái)都得經(jīng)過(guò)這里,所以大部分指令都需要借助這個(gè)樞紐到達(dá)彼岸。 |
圖一是可以的 你參考答案的圖片上的匯編代碼,一般這種的是學(xué)過(guò)C的,也不怎么研究匯編,大多就是參考Keil編譯出來(lái)的代碼修改的以下是一個(gè)C代碼編譯后的匯編代碼 你看圖片中對(duì)R6,R7的操作就知道了,實(shí)際上是可以直接操作的,但卻要通過(guò)A來(lái)操作 ![]() 這個(gè)只是8051的匯編系統(tǒng)是這樣子的而已,并不是所有的匯編都支持寄存器之間數(shù)據(jù)直接傳送的,主要是半導(dǎo)體制造成本限制 圖二是不行的,至于原因就是8051的匯編系統(tǒng)就是這么規(guī)定的 |
Hephaestus 發(fā)表于 2022-7-18 02:12 正解,這就是為什么不同的CPU都有不同匯編指令, 需要你去研讀這些指令文檔,了解每條指令的用法,而不能想當(dāng)然的寫出 MOVX 40H, @DPTR, 這指令51系列的CPU就不支持。 這也是為什么要學(xué)習(xí)C語(yǔ)言的原因,C語(yǔ)言對(duì)不同CPU來(lái)說(shuō),相對(duì)都一樣,只是通過(guò)不同的編譯器編譯為不同CPU的匯編代碼,使用起來(lái)就比較方便了,不用考慮CPU的不同匯編指令。 |
本帖最后由 Hephaestus 于 2022-7-18 02:18 編輯 這就是CISC和RISC體系的區(qū)別了,CISC圍繞著一個(gè)ACC來(lái)運(yùn)轉(zhuǎn),RISC圍繞一堆寄存器文件來(lái)運(yùn)轉(zhuǎn),并不需要經(jīng)過(guò)ACC。早期RISC并沒(méi)有普及就是因?yàn)檫@種體系要用到的內(nèi)存是CISC的120~150%,而內(nèi)存非常昂貴。同樣道理,樓主的代碼可以運(yùn)行,但是你看看你編譯成的機(jī)器碼要比通過(guò)ACC的大得多,執(zhí)行時(shí)間也要慢,現(xiàn)在內(nèi)存便宜這么做也可以,但是內(nèi)存利用率和時(shí)間效率都比較差。對(duì)于某個(gè)應(yīng)用這么做看不出什么差異,但一個(gè)大型程序的性能就是這么多細(xì)節(jié)累積出來(lái)的。 沒(méi)仔細(xì)看,MOVX 40H, @DPTR 其實(shí)是非法指令,無(wú)法編譯通過(guò)的。 |
標(biāo)準(zhǔn)a51指令的話,圖一的可以,圖二的不可以。 為什么很多轉(zhuǎn)移需要經(jīng)過(guò)A寄存器,是因?yàn)楹芏嗖僮鳎贾挥袑?duì)于a寄存器的操作指令。 |
Powered by 單片機(jī)教程網(wǎng)