資料處理的兩個基本問題

2021-09-24 16:23:31 字數 3108 閱讀 9415

計算機是進行資料處理,運算的機器,所以存在兩個問題:

處理的資料的位置

處理的資料的長度

這兩個問題,必須在機器指令中給出說明(有時候是明確的,有時候是隱式的),否者計算器就無法工作。

定義的描述性符號:

總結:在8086中,只有這四個暫存器可以用在[...]中進行記憶體定址。

[...]中,他們可以單個出現,或者以組合形式出現(組合中不能有其他暫存器,但可以有idata)

bp的預設段位址在ss中(和bx,si,di在ds中不同)

資料處理大致可分為三類:讀取,寫入,運算

指令執行前,所要處理的資料可以在3個地方:cpu內部,記憶體,埠

立即數(idata)

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

暫存器

指令要處理的資料存放在暫存器中,給出對應暫存器名

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

記憶體中的資料,通過sa+ea給出資料位置

定位記憶體單元的方法,即稱為定址方式

前面將到分為隱式給出和顯式給出,例如通過暫存器和push,pop等方法就是隱式給出。

加入不能夠明確指定資料長度的化,就需要顯式給出資料長度。顯式給出資料長度的方法有ptr指令,例如:

mov word ptr ds:[0], 1

mov byte ptr ds:[0],1

inc ...

add ...

div指令為除法指令

被除數 / 除數 = 商......餘數

除數:有8位和16位兩種(byte和word),在乙個reg或者記憶體單元中

被除數:預設放在ax或dx和ax中,當除數為8位時,被除數則為16位,預設在ax中存放。當除數字16時,被除數則為32位,dx存放高16位,ax存放低16位。

結果:除數為8位,則al儲存商,ah儲存餘數。如果除數為16位,則ax儲存商,dx儲存餘數。

有用到過db和dw,例如:

db 1 ;佔1個位元組

dw 1 ;佔1個word(2個位元組)

dd用來定義dword(double word,雙子)。dd 1則占用2個word(4個位元組)。

dup是乙個用於定義資料的操作符,由編譯器識別。和db,dw,dd配合使用,用來進行資料的重複定義。

例如:

db 3 dup (0)

db 3 dup(0,1,2)

db 3 dup ('abc','abc')

答案

assume cs:code, ds:data, es:table

data segment

db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983'

db '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992'

db '1993', '1994', '1995'

; 21年, 4*21=84個位元組

dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514

dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000

; 21年每年總收入,84位元組

dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8826

dw 11542, 14430, 15247, 17800

; 21年每年僱傭人數, 42位元組

data ends

table segment

db 21 dup ('year summ ne ?? ')

table ends

stack segment

dw 16 dup(0)

stack ends

code segment

start:

mov ax, data

mov ds, ax

mov ax, table

mov es, ax

mov bx, 0

mov si, 0

mov di, 0

mov cx, 21

s0: mov ax, 0[bx].[0]

mov es:[si].[0], ax

mov ax, 0[bx][2]

mov es:[si].[2], ax

mov ax, 84[bx].[0]

mov es:[si].[5], ax

mov ax, 84[bx][2]

mov es:[si].[7], ax

mov ax, 168[di].[0]

mov es:[si].[10], ax

mov ax, es:[si].[5] ; 計算人均收入

mov dx, es:[si].[7]

div word ptr es:[si].[10]

mov es:[si].[13], ax

add bx, 4

add si, 10h

add di, 2

loop s0

mov ax, 4c00h

int 21h

code ends

end start

table段的dup實際定義了21*16個位元組,空格也在對應的位置填上了。

來自為知筆記(wiz)

8 資料處理的兩個基本問題

1.兩個基本問題 1 處理的資料在什麼地方?2 處理的資料有多長?2.暫存器集合 reg ax,bx,cx,dx,al,ah,bl,bh,cl,ch,dl,dh,sp,bp,di,si 段暫存器集合 sreg cs,ds,ss,es 3.幾種錯誤的指令 1 mov ax,cx 2 mov ax,dx...

彙編 資料處理的兩個基本問題

只有這四個暫存器可以用來進行暫存器間接定址 暫存器 其中,bp隨機訪問,沒有規則 四個暫存器可以單個出現,亦可以以以下組合出現 bx與si di,bp與si di bp預設段位址在ss中 1 由暫存器名指明 2 由x ptr給出 mov word ptr ds 0 1 move byte ptr d...

8 資料處理的兩個基本問題

1.兩個基本問題 1 處理的資料在什麼地方?2 處理的資料有多長?2.暫存器集合 reg ax,bx,cx,dx,al,ah,bl,bh,cl,ch,dl,dh,sp,bp,di,si 段暫存器集合 sreg cs,ds,ss,es 3.幾種錯誤的指令 1 mov ax,cx 2 mov ax,dx...