|
主题 : : 问题7.9新方法,贴代码,望高手指点 [已解决] |
回复[ 8次 ]
点击[ 533次 ] | |
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21 |
ASSUME CS:CODESG
DATASG 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个字符串
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型数据
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型数据
DATASG ENDS
TABLE SEGMENT
DB 21 DUP ('YEAR SUMM NE ?? ')
TABLE ENDS
CODESG SEGMENT
START:
MOV AX,DATASG
MOV DS,AX
MOV DI,0
MOV BX,0
MOV AX,TABLE
MOV ES,AX
MOV SI,0
MOV CX,21
S:MOV AX,[DI]
MOV ES:[SI],AX ;把年份前两位赋值给ES:[SI]
MOV AX,[DI+2]
MOV ES:[SI+2],AX ;把年份后两位赋值给ES:[SI+2]
MOV AX,[DI+84]
MOV ES:[SI+5],AX ;把收入前两位赋值给ES:[SI+5]
MOV AX,[DI+86]
MOV ES:[SI+7],AX ;把收入后两位赋值给ES:[SI+7]
MOV AX,[BX+168]
MOV ES:[SI+10],AX ;把雇员人数赋值给ES:[SI+10]
MOV AX,ES:[SI+5] ;收入为32位数据,低位赋值给ax,高位赋值给dx,除数为16为数据,故用word ptr,运算结束后商存在ax中,再赋值给ES:[SI+13]
MOV DX,ES:[SI+7]
DIV WORD PTR ES:[SI+10]
MOV ES:[SI+13],AX
ADD BX,2 ;雇员人数为word型数据,故每次累加2
ADD DI,4 ;年份和收入都是4字节数据,故每次累加4
ADD SI,16 ;Table数据里每行16字节,故累加16以完成换行
LOOP S
MOV AX,4C00H
INT 21H
CODESG ENDS
END START
上次发了次代码,比较长,用了多次循环,这次改进了,只用一次循环。 | | |