马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第八章实验7我自己想代码的时候想了有点久,最终差不多用了1个多小时才把这些代码写完
用了1个多小时才写完这一点点代码没办法人比较笨,大家一起努力学习共同进步
首先我觉得这道实验题想让我们滚顾的知识点在于
伪指令dd,db,dw分别是占用了多少个字节
div除法指令的使用
还有就是多种寻址的方法
我的思路基本上是先计算年份-收入-人员的偏移地址是多少到多少(0-53h),(54h-a7h),(a8h-d1h)
然后再计算table段里面需要填入的具体地址,随后考虑data段分别占用的字节
然后再进行写代码,我写的时候还出了1-2次错误,第一次少定义了一个偏移导致只能寻址雇员数的时候第一次存入3,第二次存入变成9了,为什么我会做错是因为我一开始认为dw也是4字节了
我的代码如下:里面都有注释,看不清楚的可以自己把代码复制到Notepad++或者MASMPlus中看一下
- assume cs:codesg,ds:data,es:table
- data segment
- db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
- db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
- db '1993','1994','1995';0-53h
- dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
- dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;54h-a7h
- dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
- dw 11542,14430,15257,17800;a8h-d1h
- data ends
- table segment
- db 21 dup ('year summ ne ?? ');0-3年份,4空格,5-8收入,9空格,10-11雇员,12空格,13-14人均收入,15空格
- table ends
- codesg segment
- start:
- mov ax,data
- mov ds,ax;设定data段地址
- mov ax,table
- mov es,ax;设定table段地址
- mov cx,21;定义循环次数
- mov bx,0;bx用来存放data段的偏移地址
- mov bp,0;bp用来存放table的行偏移
- mov di,0;di用来存放雇员数与人均收入的偏移
- mov si,2;因为ax是字形数据,而我们定义的年份与收入都是2个字的
- s:mov ax,[bx];取年份的数据前2个字节(因为年份占用了4个字节)
- mov es:[bp],ax;存入年份数据前2个字节
- mov ax,[bx+si];取年份数据后2个字节
- mov es:[bp+si],ax;存入年份数据后2个字节
- mov ax,[bx+54h];取收入前2个字节
- mov es:[bp+5],ax;存入收入前2个字节
- mov ax,[bx+si+54h];取收入后2个字节
- mov es:[bp+si+5],ax;存入收入后2个字节
- mov ax,ds:[di+0a8h];取雇员数
- mov es:[bp+10],ax;存入雇员数
- mov ax,[bx+54h];设置被除数
- mov dx,[bx+54h+si];设置被除数
- div WORD ptr ds:[di+0a8h];取字形数据的除数
- mov es:[bp+13],ax;把商数的结果放入
- add di,2
- add bx,4
- add bp,16
- loop s
- codesg ends
- end start
复制代码
|