癡人說夢繼續(xù)。
計(jì)算機(jī)工作速度是很快的,每運(yùn)行一步指令大概也就是幾億分之一秒。即便是51單片機(jī),也能達(dá)到千萬分之一秒,如果我們的思緒跟著計(jì)算機(jī)跑,會被累死的,好囧!
不如我們用慢動作將整個工作過程放慢,一點(diǎn)點(diǎn)體會它到底是怎么工作的,至于多慢,一個小時一步可以了吧?呵呵,隨便了,能理解了就繼續(xù)下一步。
以單片機(jī)為例,通電后,系統(tǒng)在第一個周期內(nèi)干什么呢?
單片機(jī)內(nèi)部有很多部門,我們假設(shè)它就是一個工廠,工廠的中間是一條寬闊的大路,路兩邊是各個車間和管理部門,然后在廠區(qū)內(nèi)安裝了一個所有人都能聽到的大喇叭,對所有部門發(fā)號施令。
好了,零號指揮員開始喊了:第一步,指針指向地址0000H,其它部門原地待命!這時候,所有的沒有接到任務(wù)的部門什么都不干,只有指針?biāo)查g移動到了倉庫的0000H位置。你要是問了:指針是個什么東西?
這么解釋吧,你見過電唱機(jī)這個東東嗎?沒見過?沒見過先去見見......電唱機(jī)都有一個唱頭,唱頭和唱片接觸的部門是一根針,針和唱片上蝕刻的軌跡摩擦,發(fā)出聲音,經(jīng)過電路放大送到喇叭就可以聽啦! 這時候,你要是認(rèn)為把唱頭移動到另外一個位置,本來唱的好好的歌曲就換成別的音樂了(夜店里面DJ有一種專門磨片的唱機(jī),我沒去過夜店,也不知道那個唱機(jī)叫什么名字,DJ可以把一段節(jié)奏比較好的段落反復(fù)播放,就是利用的唱頭的瞬間移位)!這里的唱頭就像是計(jì)算機(jī)里的指針,指針指向0000H就像唱頭回到唱片起點(diǎn)一個道理。
地址0000H在單片機(jī)里位于程序存儲器(貌似是,懶得去翻資料了)的第一個位置,而程序存儲器共有128個位置,分別是0000H,0001H,0002H,0003H......等等。
至于為什么單片機(jī)通電后會將指針指向0000H,我們學(xué)習(xí)最最底層的東西,這些都是繞不開的,我暫時理解為:通電后,系統(tǒng)將所有的部門都訪問了一個遍,然后把別的數(shù)據(jù)都拋棄了,只留下0000H的數(shù)據(jù),相當(dāng)于訪問了0000H。
假如說0000H里面存放了01010101這些數(shù)據(jù),這些就是CPU下一步的指令,沒有上帝,CPU的命令從來都是從上一個錦囊里面得到的!
我似乎有點(diǎn)開竅了!
這就是單片機(jī)第一個脈沖周期內(nèi)干的全部工作,是不是感覺有點(diǎn)浪費(fèi)啊?就干這一點(diǎn)小事?是的,計(jì)算機(jī)每一個周期確實(shí)干不了太多的事,但是計(jì)算機(jī)的特長是這些個周期都特別短,短到你剛想思考,它就運(yùn)行了千萬個周期......“天下武功,唯快不破”。
CPU系統(tǒng)的工作就是這樣,每個部門都等著大喇叭里面給自己派任務(wù),絲毫不敢懈怠,但是每次只有一個部門接到了任務(wù),這就是程序,一步一步執(zhí)行。
第二個周期,單片機(jī)又要干什么呢?0000H里面的數(shù)據(jù)已經(jīng)告訴你了,如果沒有告訴你的話,這個程序員是要被炒掉的,因?yàn)檫@里是一條無條件跳轉(zhuǎn)指令,必須的,因?yàn)橄旅娴牡刂肥潜A舻刂罚墙麉^(qū)。那么,跳到哪里呢?程序員設(shè)定哪里就是哪里,只要被系統(tǒng)允許。然后指針就去訪問那個地址,再打開那里的錦囊。
同理,系統(tǒng)將所有部門的電平都巡測了一個遍,唯獨(dú)留下了指針?biāo)诘刂返臄?shù)據(jù)。在這個周期,程序不再需要跳轉(zhuǎn)了,開始執(zhí)行正文了,當(dāng)然也不排除繼續(xù)跳轉(zhuǎn),除此之外,指針在沒有跳轉(zhuǎn)指令的情況下,在下一個周期自動加1,訪問下一個地址。
本期重點(diǎn):1,系統(tǒng)加電后先指向0000H;2,每個周期內(nèi),所有的部門都在工作,但是只有目標(biāo)地址的數(shù)據(jù)被保留,其它的數(shù)據(jù)扔掉,可以理解為系統(tǒng)只訪問了該地址,即指針指向了該地址。