例子:
assume cs:將data段中的資料按如下格式寫入table中: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
**如下:
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中定義的第乙個字串轉化為大寫,...