汇编语言随笔(7)-访问内存的寻址方式和实验7(不同寻址方式的使用)
尋址方式小結(jié):
| [idata] | EA=idata,SA=(ds) | 直接尋址 | [idata] |
| [bx],[si],[di] | EA=(bx)或(si)或(di),SA=(ds) | 寄存器間接尋址 | [bx] |
| [bp] | EA=(bp),SA=(ss) | 寄存器間接尋址 | [bp] |
| [bx+idata],[si+idata],[di+idata] | EA=(bx)+idata或(si)+idata或(di)+idata,SA=(ds) | 寄存器相對尋址 | [bx+10] |
| [bp+idata] | EA=(bp)+idata,SA=(ss) | 寄存器相對尋址 | [bp+10] |
| [bx+si],[bx+di] | EA=(bx)+(si)或(bx)+(di),SA=(ds) | 基址變址尋址 | [bx+si] |
| [bp+si],[bp+di] | EA=(bp)+(si)或(bp)+(di),SA=(ss) | 基址變址尋址 | [bp+si] |
| [bx+si+idata],[bx+di+idata] | EA=(bx)+(si)+idata或(bx)+(di)+idata,SA=(ds) | 相對基址變址尋址 | [bx+si+10] |
| [bp+si+idata],[bp+di+idata] | EA=(bp)+(si)+idata或(bp)+(di)+idata,SA=(ss) | 相對基址變址尋址 | [bp+si+10] |
關(guān)于處理數(shù)據(jù)的長度
??????1,通過寄存器來指明要處理數(shù)據(jù)的尺寸。如mov ax,[bx]和mov al,[bx]分別針對的是內(nèi)存中的字節(jié)單元和字型數(shù)據(jù)。
??????2,在沒有寄存器的情況下,可以用 數(shù)據(jù)長度 ptr 的格式來指明,其中數(shù)據(jù)長度可以為byte或word,分別表示字節(jié)和字。如下面幾種操作表示操作的是字型數(shù)據(jù):
????????????mov word ptr ds:[0],1??????可將數(shù)據(jù)直接傳送到字型內(nèi)存單元。
????????????inc word ptr ds:[0]
????????????add word ptr [bx],1
??????對字節(jié)單元的數(shù)據(jù)采用 byte ptr。
??????3,在push和pop中不需要指明內(nèi)存單元的長度,因為只能是字型數(shù)據(jù)。如:push ds:[0]
實驗7
??????將data段中21年的數(shù)據(jù)按照填入table表中,其中人均收入需要計算。table表一共21行,每一行共計16字節(jié),格式如下:
??????程序如下:
assume cs:codedata segamentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995'//用21個字符串來表示年份dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 245980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000//用21個雙字型數(shù)據(jù)來表示公司每年的總收入dw 3,7,9,13,28,38,130,220,476,778,100,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800//用21個字型數(shù)據(jù)來表示公司每年的員工數(shù)量data endstable segmentdb 21 dup('year summ ne ?? ')table endscode segmentstart:mov ax,datamov ds,ax 用ds來存放數(shù)據(jù)段的段地址mov ax,tablemov es,ax 用es來存放table段的段地址mov di,0 di保存table中每一行的初始地址mov bx,0 bx表示數(shù)據(jù)段起始的偏移地址。mov al,21mov dl,8mul dlmov si,ax 計算21*8的字節(jié)數(shù),保存到si中,這是雇員數(shù)在數(shù)據(jù)段的起始偏移地址mov cx,21 外層循環(huán)次數(shù)21次s: mov ax,[bx]mov es:[di],axmov ax,[bx+2]mov es:[di+2],axmov ax,[bx+84] bx+84為總收入的偏移地址mov es:[di+5],axmov ax,[bx+86]mov es:[di+7],axmov ax,[si]mov es:[di+10],axmov dx,[bx+86]mov ax,[bx+84]div word ptr [si] 計算人均收入mov es:[di+13],axadd di,10hadd si,2add bx,4loop smov ax,4c00hint 21hcode endsend start??????注明:空格已經(jīng)在table段給出,故沒必要在程序在設(shè)置空格符了。關(guān)于用ax作為周轉(zhuǎn)寄存器執(zhí)行從內(nèi)存到內(nèi)存的數(shù)據(jù)傳送,建議可以用棧來代替。關(guān)于乘除法的運算規(guī)則可以參考https://blog.csdn.net/Little_ant_/article/details/108149575
總結(jié)
以上是生活随笔為你收集整理的汇编语言随笔(7)-访问内存的寻址方式和实验7(不同寻址方式的使用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言随笔(6)-大小写转换与实验6(
- 下一篇: 汇编语言随笔(8)-实验9(显示字符串)