什么是DMA數(shù)據(jù)傳送方式
先看正常的數(shù)據(jù)傳送:
8086的串傳送指令:
格式:movsb
功能:執(zhí)行movsb指令相當(dāng)于進行下面幾步操作。
((es)16+(di)) = ((ds)16+(si))
傳送數(shù)據(jù):源地址是DS:SI,目的地址是ES:DI
修改地址:如果df=0 則 (si)=(si)+1 (di)=(di)+1,如果df=1則: (si)=(si)-1 (di)=(di)-1

上面的指令就是把源地址SI的內(nèi)存塊內(nèi)容傳送到目標(biāo)塊DI。傳送過程中用到了CPU內(nèi)部寄存器:DS、ES、SI、DI等,也就是說,這樣的數(shù)據(jù)傳送是通過CPU才得以進行的。

這種數(shù)據(jù)傳送方式當(dāng)數(shù)據(jù)量很大的時候,CPU的資源將被大量消耗。為了將CPU從這種單一的數(shù)據(jù)傳送工作中解放出來,由此產(chǎn)生了DMA的數(shù)據(jù)傳送方式:

從上圖可以看出,在CPU和外設(shè)之間,增加了一個DMA控制電路,這個芯片的結(jié)構(gòu)如下圖:

8237DMA芯片結(jié)構(gòu)圖

上圖是一塊實際的DMA芯片。目前DMA 芯片大部分已經(jīng)集成到了南橋中。

下圖是DMA簡單的功能框圖:

當(dāng)DMA工作時,需要取得總線控制權(quán)。
對于串傳送指令,可以簡單認(rèn)為,DMA芯片代替CPU完成了類似于 (si)=(si)+1 、(di)=(di)+1或者 (si)=(si)-1、 (di)=(di)-1的源數(shù)據(jù)塊和目標(biāo)數(shù)據(jù)塊的地址加減工作,從而實現(xiàn)了數(shù)據(jù)塊的傳送,并將CPU解放出來。