彙編實驗 定址方式在資料訪問中的應用

2022-04-09 17:58:27 字數 3458 閱讀 7738

例子:

assume cs:

codesg

datasg segment

db '1975

','1976

','1977

','1978

','1979

','1980

','1981

','1982

','1983

','1984

','1985

'db

'1986

','1987

','1988

','1989

','1990

','1991

','1992

','1993

','1994

','1995';

表示21年的21個字串

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

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

;21年總收入的21個dword資料

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

dw 11542,14430,15257,17800

;表示21年公司雇員人數的21個資料

datasg ends

table segment

db 21 dup ('

year summ ne ?? ')

table ends

將data段中的資料按如下格式寫入table中:

**如下:

assume cs:

codesg

datasg segment

db '1975

','1976

','1977

','1978

','1979

','1980

','1981

','1982

','1983

','1984

','1985

'db

'1986

','1987

','1988

','1989

','1990

','1991

','1992

','1993

','1994

','1995';

表示21年的21個字串

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

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

;21年總收入的21個dword資料

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

dw 11542,14430,15257,17800

;表示21年公司雇員人數的21個資料

datasg ends

table segment

db 21 dup ('

year summ ne ?? ')

table ends

stacksg segment

db 16 dup (0

)stacksg ends

codesg segment

start:

movax,datasg

movds,ax

movax,table

moves,ax

movax,stacksg

movss,ax

mov sp,16

;棧用來儲存cx中的資料來進行雙重迴圈

mov cx,21

mov bx,0

;bx儲存table段中每行的記憶體單元,0<=(bx)<=f,所以每次迴圈bx要清0

mov di,0

;di用來訪問儲存公司收入的資料段

mov si,0

;si用來訪問儲存公司員工數量的資料段

mov bp,0

;bp用來訪問儲存公司年份的資料段

s0:push

cx

mov cx,4

mov bx,0

s1:mov al,ds:

[bp]

moves:

[bx],al

incbp

incbx

loop s1

;mov al,'

'mov

es:[bx],al

incbx

mov ax,ds:[si+84

]

;21個年份字串,每個年份有4個數字字元,共佔84byte,si = 0時ds:[si+84]指向第一年公司收入

moves:

[bx],ax

add bx,2

add si,2

mov ax,ds:[si+84

]

moves:

[bx],ax

add si,2

add bx,2

;mov al,'

'mov

es:[bx],al

incbx

mov ax,ds:[di+168

]

moves:

[bx],ax

add di,2

add bx,2

mov al,'

'mov

es:[bx],al

mov ax,es:[5

]

mov dx,es:[7

]

div word ptr es:

[0ah]

;注意一下被除數32位除法的規則

moves:

[0dh],ax

mov al,'

'mov

es:[bx],al

movax,es

incax

moves,ax

;在第一次迴圈結束時給es自增1,使其指向table:10h,在以後的迴圈同理

;讓其指向「下一行」

popcx

loop s0

movax,4c00h

int21h

codesg ends

end start

執行結果:

彙編中的資料定址方式

通俗的說,資料定址方式就是尋找資料的方式。在彙編中這是很重要的。英文 data addresing mode 資料定址方式有三種 一 立即數定址 舉個例子 mov eax 22h 這個22h就是立即數,也就是說立即數只能在源運算元中,而且是常量。能夠立即定址,由此得名。二 暫存器定址 把運算元放在暫...

8086定址方式(資料訪問方式)

累加器 ax 基址暫存器 bx bp 基址指標暫存器 計數器 cx 資料暫存器 dx 變址暫存器 si 源變址暫存器 di 目的變址暫存器 1 立即數定址方式 指令的運算元直接存放在機器 中,緊跟在操作碼之後 mov ax,1234h2 暫存器定址方式 指令的運算元存放在暫存器中 mov ax,12...

彙編中類似陣列的定址方式

bx 可以表示乙個記憶體單元,段位址在ds暫存器中,偏移位址為bx。bx idata 也表示乙個記憶體單元,其段位址在ds中,偏移位址為bx idata 這裡的bx表示暫存器bx中的值 這是不是c語言中陣列定址有點類似。下面通過一段 來學習一下。上面 用來將datasg中定義的第乙個字串轉化為大寫,...