摘要:本文論述了學習難點的突破,為掌握現(xiàn)代計算機理論和控制技術(shù)應(yīng)用編程鋪平道路,提供了一個提高學習質(zhì)量的借鑒方法。
關(guān)鍵詞:突破難點 存儲器分段 存儲器訪問
《微型計算機接口技術(shù)及應(yīng)用》這門課程具有很強的理論性、實踐性、應(yīng)用性。它和工程實際有著緊密的聯(lián)系,在工程實際中能夠解決很多關(guān)鍵的難題。但是在實際教學這門課程的過程中,由于《微型計算機接口技術(shù)及應(yīng)用》課程具有很多的難點,很多學生都無法真正的消化掉這些難點,不僅制約了編程應(yīng)用,也無法提高學生的實際應(yīng)用能力。
為了更好的為實際工程服務(wù),及時的解決一些在實際的工程應(yīng)用中會遇到的問題,應(yīng)該掌握計算機控制技術(shù)理論知識,這是提高自身實踐能力的基礎(chǔ)和前提。因為只有把計算機控制技術(shù)理論掌握好,才有能力掌握和應(yīng)用計算機,進而在工程應(yīng)用出現(xiàn)問題時有能力解決那些問題。以下幾個部分組成了微型計算機:
①中央處理器CPU。②存儲器。③I/O接口電路。④I/O設(shè)備。
在學習《微型計算機接口技術(shù)及應(yīng)用》這門課程的過程中,最大的難點就是存儲器的組織和使用。在進行難點突破時,我們以存儲器的分段為例,存儲器是存儲程序和數(shù)據(jù)的裝置,屬于計算機不可分缺的一個組成部分。計算機要想發(fā)揮自身的作用,存儲器是必要部件,反之,計算機的存在就沒有意義了。雖然微型計算機有很多類型,但是只要掌握其中的一種,其他的類型也都大同小異。因此我們在講解存儲器的使用方法時可以以8086/8088微型計算機系統(tǒng)為例。首先說明該計算機中央處理器CPU的結(jié)構(gòu)及原理,然后學習該計算機系統(tǒng)的存儲器組織。
1 存儲器分段的原因
8086/8088CPU的20根地址總線決定了8086/8088系統(tǒng)的存儲器容量,其存儲器容量是1MB。但是該系統(tǒng)要想尋址1MB的內(nèi)存空間,還存在著一些問題,因為該系統(tǒng)CPU內(nèi)部的寄存器是16位的寄存器,這與20位地址的要求是沖突的。即16位寄存器裝配不了20位的地址或數(shù)據(jù),只能裝配16位的地址或數(shù)據(jù)。要想解決這個問題,就需要裝配20位的寄存器,但是由于客觀原因所限,8086/
8088CPU無法裝配20位的寄存器。為了有效的解決這個問題,8086/8088CPU的設(shè)計師,很巧妙的把1MB的內(nèi)存進行分段,實現(xiàn)對全部內(nèi)存的管理和使用。
2 實現(xiàn)分段管理的辦法
8086/8088CPU內(nèi)部提供了4個16位的段寄存器,分別是CS、DS、ES、SS;2個專用寄存器;8個16位的通用寄存器。
4個段寄存器的用途:
裝配20位地址的高16位地址是4個段寄存器的作用,并且該地址能夠被16整除。我們可以發(fā)現(xiàn),這樣的地址低4位都是0,也就是xxxx xxxx xxxx xxxx 0000的形式。如果20位地址是這樣形式的,那么我們把這樣的20位地址叫做段的地址起始,簡稱段地址。雖然段地址也是20位地址的,但是由于其低4位都是0,可以把都是0的這4位省略掉,保留高16位地址。如此一來,4個段寄存器中就可以裝配段地址的高16位地址,那么16位段寄存器的要求也就得到了滿足。
一般情況下,代碼段寄存器CS裝配的是某一程序代碼的起始地址。數(shù)據(jù)段寄存器DS裝配的是某一數(shù)據(jù)段的起始地址。附加數(shù)據(jù)段寄存器ES裝配的是某一附加數(shù)據(jù)段的起始地址。堆棧段寄存器SS裝配的是系統(tǒng)堆?;蛴脩粼O(shè)置的堆棧段的起始地址。
8個16位通用寄存器的用途:
裝配16位數(shù)據(jù)是AX、BX、CX、DX四個寄存器的主要作用。裝配16位偏移地址是BX、SI、DI、SP、BP這5個寄存器的主要作用。由于在8086/8088系統(tǒng)中,寄存器是16位的,而8086/8088卻有20根地址線,8086/8088的尋址是通過段地址與偏移地址合成的,這樣的話,如果用cs來指明段地址,用IP指出偏移地址,由于IP是16位的,它能表示的偏移地址只有0000H-FFFFH,也就是共64KB,而8086/8088地址線有20根,也就是可以尋址空間為1M,這樣就需要通過分段管理,把內(nèi)存地址分為若干段,每段有一些存儲單元構(gòu)成。用段地址指出是哪一段,偏移地址標明是段中的哪一個單元。每段最多為64KB,最小為16個字節(jié),并且每段必須以16的倍數(shù)開始,也就是說每段的最后一位必須為0,如00000H,10000H,00010H等。邏輯地址是用戶編程時使用的地址,分為段地址和偏移地址兩部分。實行分段管理就是把段地址裝配到相應(yīng)段寄存器中,把偏移地址裝配到地址寄存器中。如此一來,8086/8088CPU內(nèi)部的寄存器都是16位的寄存器,所有矛盾都獲得了解決。
3 地址轉(zhuǎn)換方法
要想得到20位的實際地址(物理地址),程序地址(邏輯地址)利用以下公式就可以實現(xiàn):
段地址×16d+偏移地址=物理地址(實際地址)
參考上述公式,利用CPU的地址加法器就可以把程序地址轉(zhuǎn)換成物理地址。實際上是當你在編程時,寫一條指令,例如:
MOV AL,DS:[2002H]
已知DS的值,比如:5678H,那么56780H就是數(shù)據(jù)段的起始地址,并且在指令中偏移地址已經(jīng)給出就是2002H。數(shù)據(jù)在內(nèi)存的物理地址是:56780H+2002H=
58782H。
通過指令譯碼器把指令譯碼后,發(fā)出一系列控制信號,把數(shù)據(jù)段空間偏移地址為2002H單元中數(shù)據(jù)傳送給AL寄存器。實際上,源操作數(shù)程序地址已經(jīng)被地址加法器轉(zhuǎn)換成物理地址58782H,之后20位地址信息被發(fā)出,這20位地址信息就是所對應(yīng)的數(shù)據(jù)內(nèi)存單元地址58782H,把內(nèi)存單元地址58782H中存放的數(shù)據(jù)傳送給寄存器AL。完成了這一條指令的操作。
4 4個段寄存器CS、DS、ES、SS和幾個通用寄存器及專用寄存器的默認搭配關(guān)系
①CS與IP搭配,用于程序代碼段空間的訪問。
②DS與BX、SI、DI搭配,用于數(shù)據(jù)段空間的訪問。
③ES與DI搭配,用于附加數(shù)據(jù)段空間的訪問。
④SS與BP、SP搭配,用于堆棧段空間的訪問。
5 存儲器的尋址方式
以上已經(jīng)學習了存儲器的組織和存儲器分段問題,之后應(yīng)該學習存儲器的尋址方式這個問題。如果學生已經(jīng)真正掌握了存儲器的分段問題,那么學習存儲器的尋址方式這個問題就簡單多了。比如,指令
MOV BX,3002H
MOV AX,DS:[BX]
對于第二條指令的功能就能真正理解,從而從實質(zhì)上進行掌握。她的意思是:源操作數(shù)在內(nèi)存數(shù)據(jù)段中存放,數(shù)據(jù)段的段地址在寄存器DS中存放,相對于數(shù)據(jù)段的起始地址,偏移地址是3002H單元,這個地址在寄存器BX中存放。因此,叫做寄存器間接尋址。在這個單元中存放的數(shù)據(jù)要傳送給寄存器AX。因為,存儲器的分段問題的難點已經(jīng)掌握,所以對存儲器的尋址方式也很容易掌握了。
6 指令的功能和用途
在學習了存儲器的分段方法和對存儲器的訪問方法之后,應(yīng)該學習指令的功能和用途,只有這樣才能使其真正的發(fā)揮作用,達到預期的目的和應(yīng)用效果。
7 提高編程能力和應(yīng)用能力
如果能夠突破存儲器的分段問題的難點,那么正確使用內(nèi)存資源在編程的過程中就簡單多了。由于數(shù)據(jù)都是在數(shù)據(jù)段中,并且都是存放在內(nèi)存中。因此很多在實際的工程當中遇到的問題也就迎刃而解了,比如如何存放采集到的大量數(shù)據(jù);一旦一個數(shù)據(jù)段不夠用,存放時是否應(yīng)多安排幾個數(shù)據(jù)段等。
例如,模/數(shù)、數(shù)/模轉(zhuǎn)換問題:聲音數(shù)據(jù)采集,錄音和播放聲音實際工程應(yīng)用問題。通過對內(nèi)存的有效安排,將采集的數(shù)據(jù)分別存放在內(nèi)存的不同數(shù)據(jù)段區(qū)域。為數(shù)據(jù)的管理提供了方便,也提高了效率。
通過對實際應(yīng)用工程的編程實踐,學生感受到現(xiàn)代科技的力量和作用及其價值,自己動手設(shè)計編程,獲得成果,興趣大增。編程應(yīng)用能力和應(yīng)用水平顯然得到了很大提高。
參考文獻:
[1]李繼燦.新編16/32位微型計算機原理及應(yīng)用(第二版)[M].北京:清華大學出版社,2001
[2]沈美明,溫冬嬋.IBM-PC 匯編語言程序設(shè)計(第二版)[M].北京:清華大學出版社,2001.
[3]李暉,張世彤.如何在計算機教學中培養(yǎng)學生的編程能力[J]. 遼寧教育行政學院學報,2008(12).
作者簡介:鄭克忠(1951-),男,副教授,服務(wù)單位:廣東科技學院。