cpu訪問資料處理流程 資料處理的兩個基本問題

2021-10-17 08:19:53 字數 3818 閱讀 7350

計算機是進行資料處理、運算的機器,那麼有兩個基本的問題包含其中:

① 處理的資料在什麼地方;

② 處理的資料有多長.

這兩個問題,在機器指令中必須以明確或隱含的說明,否則計算機就無法工作. 現在我們主要針對8086cpu對這兩個問題進行討論. (其實這兩個問題是普遍的,對任何乙個處理機都存在).

我們定義的描述性符號:reg和sreg.

為了描述上的簡潔,我們將使用兩個描述性的符號: reg表示乙個暫存器,sreg來表示乙個段暫存器.

reg的集合包含:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di;

sreg的集合包含:ds、ss、cs、es

① 在8086cpu中,只有這4個暫存器(bx, si, di, bp)可以用在"[...]"中來進行記憶體單元的定址. 比如下面的指令是正確的.

mov ax, [bx]

mov ax, [bx + si]

mov ax, [bx + di]

mov ax, [bp]

mov ax, [bp + si]

mov ax, [bp + di]

而下面的指令是錯誤的:

mov ax, [cx]

mov ax, [ax]

mov ax, [dx]

mov ax, [ds]

② 在[...] 中,這4個暫存器可以單個出現,或只能以4種組合出現:bx和si、bx和di、bp和di. 比如下面的指令是正確的.

mov ax, [bx]

mov ax, [si]

mov ax, [di]

mov ax, [bp]

mov ax, [bx + si]

mov ax, [bx + di]

mov ax, [bp + si]

mov ax, [bp + di]

mov ax, [bx + si + idata]

mov ax, [bx + di + idata]

mov ax, [bp + si + idata]

mov ax, [bp + di + idata]

下面的指令是錯誤的

mov ax, [bx + bp]

mov ax, [si + di]

③ 只要在[...]中使用暫存器bp,而指令中沒有顯性地給出段位址,段位址就預設在ss中. 比如下面的指令.

mov ax, [bp]               ; (ax) = ((ss) * 16 + (bp))

mov ax, [bp + idata] ; (ax) = ((ss) * 16 + (bp) + idata)

mov ax, [bp + si] ; (ax) = ((ss) * 16 + (bp) + (si))

mov ax, [bp + si + idata] ; (ax) = ((ss) * 16 + (bp) + (si) + idata)

大多數指令都是進行資料處理的指令,處理大致分為3類:讀取、寫入、運算. 其實,指令所要處理的資料可以在3個地方:cpu內部、記憶體、埠.

表1 指令舉例

① 立即數(idata)

對於直接包含在機器指令中的資料(執行前在cpu的指令緩衝器),在組合語言中稱為:立即數,在彙編指令中直接給出:

mov ax, 1

add bx, 2000h

or bx, 00010000b

mov al, "a"

② 暫存器

指令要處理的資料在暫存器中,在彙編指令中給出相應的暫存器名.

mov ax, bx

mov ds, ax

push bx

mov ds:[0], bx

push ds

mov ss, ax

mov sp, ax

③ 段位址(sa)和偏移位址(ea)

指令要處理的資料在記憶體,在彙編指令中可用[x]的格式給出ea, sa在某個段暫存器中.

mov ax, [0]

mov ax, [di]

mov ax, [bx + 8]

mov ax, [bx + si]

mov ax, [bx + si + 8]

等這些指令的段位址預設在ds中.

mov ax, [bp]

mov ax, [bp + 8]

mov ax, [bp + si]

mov ax, [bp + si + 8]

等這些指令,段位址預設在ss中.

mov ax, ds:[bp]            ; (ax) = ((ds) * 16 + (bp))

mov ax, es:[bx] ; (ax) = ((es) * 16 + (bx))

mov ax, ss:[bx + si] ; (ax) = ((ss) * 16 + (bx) + (si))

mov ax, cs:[bx + si + 8] ; (ax) = ((cs) * 16 + (si) + 8)

8086cpu有多種定址方式,前面已經說過,這裡進行一下總結:

表2 定址方式小結

8086cpu的指令,可以處理兩種尺寸的資料,byte和word. 所以在機器指令要指明,指令進行的是字操作還是位元組操作.

① 通過暫存器名指明要處理的資料的尺寸

下面的指令表明了指令進行的是字操作:

mov ax, 1

mov bx, ds:[0]

mov ds, ax

mov ds:[0], ax

inc ax

add ax, 1000

下面的指令表明了指令進行的是位元組操作:

mov al, 1

mov al, bl

mov al, ds:[0]

mov ds:[0], al

inc al

add al, 100

② 在沒有暫存器的情況下,用操作符x ptr指明記憶體單元的長度,x在彙編指令可以為word或byte.

下面的指令中,用word ptr指明了指令訪問的記憶體單元是乙個字單元:

mov word ptr ds:[0], 1

inc word ptr [bx]

inc word ptr ds:[0]

add word ptr [bx], 2

下面的指令中,用byte ptr指明了指令訪問的記憶體單元是乙個位元組單元:

mov byte ptr ds:[0], 1

inc byte ptr [bx]

inc byte ptr ds:[0]

add byte ptr [bx], 2

在沒有暫存器參與的記憶體單元訪問指令中,用word ptr或byte ptr顯性地指明所要訪問的記憶體單元的長度是必要的. 否則,cpu無法得知所要訪問的單元是字單元,還是位元組單元.

③ 其他方法

有些指令預設了訪問的是字單元還是位元組單元,比如,push [1000h]就不用指明訪問的是字單元還是位元組單元,因為push指令只進行字操作.

資料處理流程

本題是乙個綜合練習題目總共包括以下部分 1.資料的預處理階段 2.資料的入庫操作階段 3.資料的分析階段 4.資料儲存到資料庫階段 5.資料的查詢顯示階段 給出資料格式表和資料示例,請先閱讀資料說明,再做相應題目。建立video user orc表 create table video user o...

大資料處理流程

q 大資料處理的流程是什麼,需要對應掌握哪些技能?a 1 資料採集 flume 資料採集與聚合 2 資料清洗 對髒資料進行清洗 spark hive mr 或其他 清洗之後可以存放到hdfs hive spark sql 3 資料處理 按照業務邏輯處理資料 spark hive mr 或其他 4 處...

Pytorch資料處理流程

1.numpy.genfromtxt path,delimiter dtype str,skip header 1 將資料從csv匯入array 型別為string 若資料為影象,還需對影象進行處理 增廣 string split list np.array ndarray reshape 最後轉換...