汇编学习历程(内存定位与数据拷贝)

来源:互联网 发布:酒店管理系统数据库 er 编辑:程序博客网 时间:2024/06/07 19:26
;学习汇编的一个比较综合性的程序,将data段中的数据复制到table段中。并计算平均工资。;程序如下:assume cs:code,ds:data,es:table,ss:stackdata segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994'db '1995';以上是表示21年的21个字符串,共84字节,0-83dd 16,22,382,1356,2390,8000,16000,25586,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年的总收入,共84个字节,84-167dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;以上是21年公司的雇员数,共42个字节,168-210data endstable segmentdb 21 dup('year sumn ne ?? ')table endsstack segmentdw 8 dup(0)stack endscode segmentstart:mov ax,datamov ds,axmov ax,tablemov es,axmov ax,stackmov ss,axmov sp,16;上面代码实现各段与具体寄存器的关联;----------------------------------mov si,0;相关寄存器清零操作mov bx,0mov di,0mov cx,21;设置循环次数year:push cx;保护循环计数,貌似这里用不上mov ax,word ptr ds:[si]mov word ptr es:[bx + 0],axadd si,2mov ax,word ptr ds:[si]mov word ptr es:[bx + 2],axadd si,2add bx,16pop cxloop year;-----------------------------------以上代码实现把年复制到table内存中mov bx,0;相关寄存器清零操作mov di,0mov cx,21sume:push cxmov ax,word ptr ds:[si]mov word ptr es:[bx + 5],axadd si,2mov ax,word ptr ds:[si]mov word ptr es:[bx + 7],axadd si,2add bx,16pop cxloop sume;----------------------------------以上代码实现把总收入复制到table内存中mov bx,0;相关寄存器清零操作mov cx,21ne0:push cxmov ax,word ptr ds:[si]mov word ptr es:[bx + 10],axadd si,2add bx,16pop cxloop ne0;----------------------------------以上代码实现把年度总人数复制到table内存中mov bx,0mov cx,21con:push cxmov dx,word ptr es:[bx + 7]mov ax,word ptr es:[bx + 5]div word ptr es:[bx + 10]mov word ptr es:[bx + 13],axadd bx,16pop cxloop con;-----------------------------------以上代码实现求商指令mov ax,4c00hint 21hcode endsend start