標(biāo)題: 關(guān)于單片機(jī)movc指令的應(yīng)用程序 [打印本頁(yè)]

作者: zhangzhao2423    時(shí)間: 2019-1-13 15:41
標(biāo)題: 關(guān)于單片機(jī)movc指令的應(yīng)用程序
不懂為什么要add a,r3,
       為什么要ADD   A,#6加這么對(duì)偏移量

Screenshot_20190113-153528.jpg (280.07 KB, 下載次數(shù): 23)

Screenshot_20190113-153528.jpg

作者: xuyaqi    時(shí)間: 2019-1-13 16:03
add a,r3      把r3里的值加到累加器a里去。
ADD   A,#6  把直接數(shù)6加到累加器a里去。
和偏移量沒(méi)任何關(guān)系。

作者: ahshmj    時(shí)間: 2019-1-13 18:24
MOVC  A,  @A+PC 本條指令是查表指令,也叫作:“程序存儲(chǔ)器讀指令”,要讀的值在“TAB3”表中!癙C”是當(dāng)前(本條指令)代碼在程序存儲(chǔ)器中的位置,而TAB3表距離當(dāng)前“PC”還有6個(gè)字節(jié)的距離,所以當(dāng)前的“PC”值+6,才是TAB3的首字符位置。

作者: Y_G_G    時(shí)間: 2019-1-13 20:38
因?yàn)楸硎荄W      用兩個(gè)字節(jié)來(lái)放一個(gè)數(shù)據(jù),如果是DB就是直接計(jì)算偏移量
DW的話,是乘以2來(lái)計(jì)算的

作者: 放大    時(shí)間: 2019-1-13 21:31
MOVC  A,  @A+PC 本條指令是查表指令,也叫作:“程序存儲(chǔ)器讀指令”,要讀的值在“TAB3”表中!癙C”是當(dāng)前(本條指令)代碼在程序存儲(chǔ)器中的位置,而TAB3表距離當(dāng)前“PC”還有6個(gè)字節(jié)的距離,所以當(dāng)前的“PC”值+6,才是TAB3的首字符位置。
作者: zhangzhao2423    時(shí)間: 2019-1-14 00:00
ahshmj 發(fā)表于 2019-1-13 18:24
MOVC  A,  @A+PC 本條指令是查表指令,也叫作:“程序存儲(chǔ)器讀指令”,要讀的值在“TAB3”表中!癙C”是當(dāng) ...

為什么說(shuō)TAB3的首地址距離PC有6個(gè)字節(jié)的距離啊?是怎么求出來(lái)的啊
作者: zhangzhao2423    時(shí)間: 2019-1-14 00:01
Y_G_G 發(fā)表于 2019-1-13 20:38
因?yàn)楸硎荄W      用兩個(gè)字節(jié)來(lái)放一個(gè)數(shù)據(jù),如果是DB就是直接計(jì)算偏移量
DW的話,是乘以2來(lái)計(jì)算的

請(qǐng)問(wèn)ADDC  A,#06H它是怎么得出的。繛槭裁词羌6?
作者: ahshmj    時(shí)間: 2019-1-14 10:49
你看看從“MOVC  A,  @A+PC”這語(yǔ)句到“TAB3”之間有幾條指令(不含本語(yǔ)句)?這幾條指令的機(jī)器碼就是6個(gè)字節(jié)。

在沒(méi)有給“TAB3”指定位置的情況下,程序的機(jī)器碼是按先后順序存放燒寫(xiě)的。

“PC”的值就是當(dāng)前語(yǔ)句的機(jī)器碼燒寫(xiě)在程序存儲(chǔ)器中的地址。再加上6個(gè)字節(jié),就到“TAB3”的首地址了。

你可以打開(kāi)你的本工程目錄下,經(jīng)過(guò)編譯產(chǎn)生的*.lst文件看看便知。

根據(jù)你的提問(wèn),你現(xiàn)在理解這些還有一定的難度,如果你真心的想學(xué)、想掌握這門(mén)技術(shù),建議你還是扎扎實(shí)實(shí)的打好基礎(chǔ)。
作者: Y_G_G    時(shí)間: 2019-1-14 19:01
zhangzhao2423 發(fā)表于 2019-1-14 00:01
請(qǐng)問(wèn)ADDC  A,#06H它是怎么得出的?為什么是加6?

從“MOVC  A,  @A+PC”這個(gè)指令到“TAB3”之間有幾條指令,每條指令占用不同的空間,你得打開(kāi)8051匯編指令看這幾條指令占用的空間,加在一起就是占用了6B,就是6個(gè)字節(jié)
這是一個(gè)非常應(yīng)試教育的題目:一個(gè)酒杯的容積怎么計(jì)算,2B一樣的老師要告訴你,酒杯的高度,直徑,弧度之類(lèi),估計(jì)你還得用到微積分,說(shuō)不定還算不出來(lái)。
實(shí)際上,把酒杯裝滿水,再稱(chēng)水的重量就知道容量了。
明明有更好的方法,非得叫人用PC值,以為這樣就可以練習(xí)基本功什么之類(lèi)的。
用PC值的缺點(diǎn):你得對(duì)著8051匯編指令,慢慢找到你那條指令占用空間的大小,一條一條的加上去。這樣還不行,你還要看PC加上去不是大于255了,大于255了就不行,也就是說(shuō)這個(gè)查表指令是不能隨便放的,你得把這指令放在前面。不然,PC值就會(huì)超過(guò)255了
用16位查表就什么都沒(méi)有了
一般來(lái)說(shuō)盡量少用PC值這個(gè)計(jì)算
一般來(lái)說(shuō)盡量少用匯編,能用C就盡量用C
作者: zhangzhao2423    時(shí)間: 2019-1-14 22:29
Y_G_G 發(fā)表于 2019-1-14 19:01
從“MOVC  A,  @A+PC”這個(gè)指令到“TAB3”之間有幾條指令,每條指令占用不同的空間,你得打開(kāi)8051匯編指 ...

師傅,能不能加我微信?zhangzhao2423,萬(wàn)分感謝,有不懂請(qǐng)多多指教,我們是新人,求帶路
作者: Y_G_G    時(shí)間: 2019-1-15 00:11
zhangzhao2423 發(fā)表于 2019-1-14 22:29
師傅,能不能加我微信。縵hangzhao2423,萬(wàn)分感謝,有不懂請(qǐng)多多指教,我們是新人,求帶路

匯編學(xué)個(gè)差不多就可以了,以后還是要用C多一點(diǎn)的
我也是一直用匯編,準(zhǔn)備學(xué)C了
難不成你要用匯編??
作者: zhangzhao2423    時(shí)間: 2019-1-15 07:03
Y_G_G 發(fā)表于 2019-1-15 00:11
匯編學(xué)個(gè)差不多就可以了,以后還是要用C多一點(diǎn)的
我也是一直用匯編,準(zhǔn)備學(xué)C了
難不成你要用匯編??

二級(jí)C以前學(xué)校學(xué)的,還有一點(diǎn)點(diǎn)印象了。匯編我也學(xué)。我都學(xué)。先從匯編開(kāi)始,F(xiàn)在想把單片機(jī)搞熟了,我剛接觸單片機(jī)不久。還請(qǐng)指教




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1