第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 汇编语言随笔(7)-访问内存的寻址方式和实验7(不同寻址方式的使用)

汇编语言随笔(7)-访问内存的寻址方式和实验7(不同寻址方式的使用)

时间:2020-07-27 23:19:37

相关推荐

汇编语言随笔(7)-访问内存的寻址方式和实验7(不同寻址方式的使用)

寻址方式小结:

关于处理数据的长度

1,通过寄存器来指明要处理数据的尺寸。如mov ax,[bx]和mov al,[bx]分别针对的是内存中的字节单元和字型数据。

2,在没有寄存器的情况下,可以用数据长度 ptr的格式来指明,其中数据长度可以为byte或word,分别表示字节和字。如下面几种操作表示操作的是字型数据:

mov word ptr ds:[0],1可将数据直接传送到字型内存单元。

inc word ptr ds:[0]

add word ptr [bx],1

对字节单元的数据采用 byte ptr。

3,在push和pop中不需要指明内存单元的长度,因为只能是字型数据。如:push ds:[0]

实验7

将data段中的数据按照填入table表中,其中人均收入需要计算。table表一共21行,每一行共计16字节,格式如下:

程序如下:

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个双字型数据来表示公司每年的总收入dw 3,7,9,13,28,38,130,220,476,778,100,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800//用21个字型数据来表示公司每年的员工数量data endstable segmentdb 21 dup('year summ ne ?? ')table endscode segmentstart:mov ax,datamov ds,ax用ds来存放数据段的段地址mov ax,tablemov es,ax用es来存放table段的段地址mov di,0di保存table中每一行的初始地址mov bx,0bx表示数据段起始的偏移地址。mov al,21mov dl,8mul dlmov si,ax计算21*8的字节数,保存到si中,这是雇员数在数据段的起始偏移地址mov cx,21外层循环次数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

注明:空格已经在table段给出,故没必要在程序在设置空格符了。关于用ax作为周转寄存器执行从内存到内存的数据传送,建议可以用栈来代替。关于乘除法的运算规则可以参考/Little_ant_/article/details/108149575

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。