![]() |
發(fā)布時間: 2019-1-18 22:23
正文摘要:關于查表指令的問題 第一:為什么開始匯編程序給累加器是14的偏移量 第二:當進入Roop子程序時,入棧累加器A,那么A是不是要加一,那么偏移量是不是就變成了15 第三:在比較指令不想等時,累加器加一和地址指針分 ... |
ahshmj 發(fā)表于 2019-1-20 18:41 你好前輩,如果給寄存器的算兩個字節(jié)的話,那么我從查表指令數(shù)下來就有16個偏移量啦,這還是不對。? |
第一問: 操作內容:Rn←(direct),(n=0~7) 字節(jié)數(shù): 2 機器周期:2 第二問: 操作內容:Rn←data,(n=0~7) 字節(jié)數(shù): 2 機器周期:1 你問的4條指令全是2字節(jié)。 |
ahshmj 發(fā)表于 2019-1-20 08:01 我想請問一下,它這個機器碼怎么算的啊 MOV R2,DPH和MOV R3,DPL分別占用幾個字節(jié) MOV R2,#00H和MOV R3,#00H分別占用幾個字節(jié)。课宜愠鰜聿恢14個機器碼了 |
zhangzhao2423 發(fā)表于 2019-1-19 17:18 每條指令的機器碼不一定相同,有單字節(jié)的、兩字節(jié)的、三字節(jié)的。 |
ahshmj 發(fā)表于 2019-1-19 08:49 一個字節(jié)是一個機器碼嗎?我數(shù)的是12個機器碼,中間是不是有哪個是兩個機器碼的啊 |
在看不懂你就別用這個指令了。用: MOV DPTR, #TAB4 MOVC A, @A+DPTR 這個可以不用考慮偏移量。 |
本帖最后由 ahshmj 于 2019-1-19 14:08 編輯 上次在你的另外的一個帖子里已經告訴你了:“ MOVC A, @A+PC 本條指令是查表指令,也叫作:“程序存儲器讀指令”,要讀的值在“TAB3”表中!癙C”是當前(本條指令)代碼在程序存儲器中的位置,而TAB3表距離當前“PC”還有6個字節(jié)的距離,所以當前的“PC”值+6,才是TAB3的首字符位置! 你看看從“MOVC A, @A+PC”這語句到“TAB3”之間有幾條指令(不含本語句)?這幾條指令的機器碼就是6個字節(jié)。 在沒有給“TAB3”指定位置的情況下,程序的機器碼是按先后順序存放燒寫的。 “PC”的值就是當前語句的機器碼燒寫在程序存儲器中的地址。再加上6個字節(jié),就到“TAB3”的首地址了。 你可以打開你的本工程目錄下,經過編譯產生的*.lst文件看看便知。 根據(jù)你的提問,你現(xiàn)在理解這些還有一定的難度,如果你真心的想學、想掌握這門技術,建議你還是扎扎實實的打好基礎。 有好幾個網友的回帖都講的非常詳細了,就是基礎再差也該看懂了。 這么詳細還是看不懂? |
從本條指令起,到TAB4表中間的各條指令的機器碼一共有14個,所以是14 |