偽指令是什么?書上也好,百度上也好,都沒說清。 對于ORG的功能和用法,書上所說,要么不完整,要么就有錯誤。 一、解釋 對于ORG的正確而完整的解釋是:以下程序在匯編成機器代碼后,將以其所指出的地址作為首地址,在進行燒寫時在程序存儲器中順序存放,直到被下一個ORG所改變。 ORG后面的地址值,在編寫源程序時并無數字大小之順序規定,允許交叉,也就是說你可以先寫大數值再寫小數值或亂序。這個,有些書上說的是錯的。 二、原理 51機的指令運行規定是:上電后,控制電路將程序存儲器中0000H地址的內容當作指令而非數值,這個是該程序的第一條指令,然后程序順序往下執行除非遇到跳轉指令。 51機的程序匯編工具對對源程序匯編的規定是:按源程序的順序進行編譯并順序填入匯編工具自己的預寫表中,除非遇到ORG指令。 51機的機器代碼燒寫入程序存儲器中的規定是:按匯編工具預寫表中代碼的順序,將所有代碼順序寫入程序存儲器中,在燒寫過程中不會有任何改變。 所以,ORG指令可以稱作程序匯編跳轉指令,它告訴匯編工具以下程序從指定位置開始寫入而不是順序寫入,它是為了讓程序員按自己的思路編寫主程序然后再去編寫其它程序,以免受到匯編工具順序匯編的影響。如中斷處理程序,51機規定其必須放在程序存儲器中從03H開始的一段空間內,但程序員想先寫完主程序后再回過頭來寫中斷,那就必然用到ORG。 三、用法 可使用在程序中任何位置,可倒序、交叉使用,其使用次數并無特別限制。 四、使用注意事項 1、允許亂序,但是別讓后面的程序把前面的程序給覆蓋了,所以,各ORG之間的地址相隔空間應留足。如果沒把握估算,或想充分利用程序存儲器空間,那就得計算每一段程序的長度了,也就是要對程序存儲器的空間進行事先規劃。 2、主程序前一定要有ORG,也就是程序員一定要指定主程序的入口地址。否則,主程序一定會覆蓋掉中斷向量入口部分的空間。 3、如果你將中斷處理程序(包括其跳轉指令)放在主程序前面,而不在主程序前指定主程序的入口地址,那程序也能運行。 多說一點:有的程序員把這個中斷處理程序非要放在前面而不敢放在后面,就是因為沒弄懂ORG的用法而未指定主程序的入口地址而造成的。這樣的程序看上去有點別扭,一般子程序都是放在后面的啊。這種情況,主程序在程序存儲器中的存儲位置是緊跟在最后一個中斷處理程序的最后一個字節后面的,。上電后,這些主程序前面的程序之所以沒被執行,是因為在0000H開始段有一個跳至主程序的跳轉指令,否則,這些程序是會被先執行的,搞不好程序會飛。
|