马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
个人有点笨,花的时间长了点,万幸还是解决了
开始时因为对data段中定义的字符串数据在内存中的表现形式产生了误解,不明白为什么‘1975’在内存中是:31,39,37,35, 后来才明白这是ASCII 码 还有一个重要疑问就是不明白在data段中定义的数据 比如年份,收入,雇员各占多少字节 编写代码的时候该如何定位这些数据。 这个问题后来在我们亲爱的鱼C上看了很多鱼油以前的帖子在对着书本才一点点明白。 所以真的很感谢各位鱼油们 谢谢!
下面是写好的图片以及代码↓ 开始学不久,希望能和大家一起进步!
代码:
- 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'
- ;收入(双字)
- dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
- dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
- ;雇员(字)
- dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
- dw 11452,14430,15257,17800
- data ends
- ;---------------------------------------写入
- table segment
- db 21 dup ('year summ ne ?? ')
- table ends
- ;---------------------------------------写入
- ;-------------------↓代码↓--------------------
- codesg segment
- start:mov ax,data
- mov ds,ax ; ds = data
- mov ax,table
- mov es,ax ; es = table
-
- mov bx,0 ; data偏移
- mov si,2 ; 年份和收入的后2为偏移
- mov bp,0 ; table行偏移
- mov di,0 ; 雇员偏移
- ;年份写入
- mov cx,21 ; 循环21次
- s:mov ax,[bx] ;
- mov es:[bp],ax; 年份前2位给table
- mov ax,[bx+si];
- mov es:[bp+si],ax; 年份后2位给table
- ;收入写入
- mov ax,[54h+bx]
- mov es:[bp+5h],ax; 收入前2位给table
- mov ax,[54h+bx+si]
- mov es:[bp+5h+si],ax; 收入后2位给table
- ;雇员写入
- mov ax,[0A8h+di]
- mov es:[bp+0Ah],ax; 雇员给table
- ;人均写入
- mov ax,es:[bp+5h]
- mov dx,es:[bp+7h] ; 被除数(直接取得table段的收入值)
- div word ptr es:[bp+0Ah]
- mov es:[bp+0Dh],ax ; 商存入table
-
- add bx,4
- add bp,10h
- add di,2
- loop s
-
- mov ax,4c00h
- int 21h
- codesg ends
- end start
复制代码 |