|
发表于 2013-6-12 04:05:28
|
显示全部楼层
本帖最后由 金色暢想犬舍 于 2013-6-12 04:09 编辑
我写的,很烂,凑合看看吧 ,顺便说一下,有没有学到第八章了的?共同交流下? QQ81881894{:1_1:}- assume CS:code,DS:data,SS:stack
- 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' ;以上是表示21年的21个字符串 ;字节类型 BX+0~83(0~53H)
- ;这一组数据用SI表示,这组偏移过后,SI指向下一组数据时,SI归零,重来 CX=15H
- dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 ;双字类型
- dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;双字类型
- ;以上是表示21年公司总收入的21个dword型数据 BX+84~168(就是54H~0A8),这一组21个数据,用SI表示
- ;CX=15H
- dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 ;字类型
- dw 11542,14430,15257,17800 ;以上是表示21年公司雇员人数的21个WORD型数据 ;字类型
- ;这一组21个数据,也用SI表示; CX=15H
- dw 0,0
- data ends
- table SEGMENT
- db 21 DUP ('year summ ne ?? ')
- table ends
- STACK segment
- db 7 DUP ('year summ ne ?? ')
- STACK ends
- ;编程,将data段中的数据按图上格式写入到table段中,并计算21年终的人均收入(取整),结果也按照图上的
- ;格式保存在table段中;
- code SEGMENT
- start: MOV AX,DATA
- MOV DS,AX
- MOV AX,TABLE
- MOV ES,AX
- MOV AX,STACK
- MOV SS,AX
- MOV SP,112
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>年份&总收入收入开始>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- MOV CX,15H
- YEARMONEY: MOV DS:[210],CX
- MOV CX,2
- YEARMONEY1: MOV AX,[BX].0[SI] ;将年份读入一个字
- MOV ES:[BP].0[DI],AX ;将一个字的年份写入
- MOV AX,[BX].54H[SI] ;将总收入读入一个字
- MOV ES:[BP].5[DI],AX ;将总收入写入一个字
- PUSH AX ;将总收入,入栈;
- ADD SI,2
- ADD DI,2
- LOOP YEARMONEY1
- MOV BYTE PTR ES:[BP+4],' '
- MOV BYTE PTR ES:[BP+9],' '
- ADD BP,10H
- MOV DI,BX
- MOV CX,DS:[210]
- LOOP YEARMONEY
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>年份&总收入结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>雇员人数&人均收入结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- MOV SI,2AH ;退着走
- MOV BP,140H ;BP也退着走,
- MOV DI,BX ;DI清零
- MOV BX,0A6H ;BX偏移了,就用不到IDATA了.
- MOV CX,15H ;循环次数依然是21次
- S: MOV AX,[BX+SI] ;定位到最后一个雇员人数读入
- MOV ES:[BP+0AH],AX ;将雇员人数写入对应字单元中;
- POP DX
- POP AX
- DIV WORD PTR ES:[BP+0AH] ;除雇员人数-----
- MOV ES:[BP+0DH],AX ;将人均收入写入指定字单元
- MOV BYTE PTR ES:[BP+0CH],' ' ;在写完雇员人数后写入一个空格
- MOV BYTE PTR ES:[BP+0FH],' ' ;在最后面写入一个空格
- SUB SI,2
- SUB BP,10H ;BP每次-10,就是退一行
- LOOP S
- MOV AX,4c00h
- INT 21h
- code ENDS
- END start
复制代码 |
|