|
主题 : : 看看高手是怎么写试验7代码的!!!强烈推荐中... [待解决] |
回复[ 104次 ]
点击[ 9699次 ] | |
|
|
|
|
[帖 主] [ 发表时间:2008-10-10 02:55 ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-03 00:18 |
DATAS SEGMENT
DB '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
DB '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
DB '1991', '1992', '1993', '1994', '1995'
DD 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
DD 345980, 590827, 803530, 118300, 184300, 2759000, 3753000, 4649000, 5937000
DW 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
DW 11542, 14430, 15257, 17800
DATAS ENDS
TABLE SEGMENT
DB 21 DUP ('year summ ne ?? ')
TABLE ENDS
STACKS SEGMENT
DB 16 DUP (0)
STACKS ENDS
ASSUME CS:CODES,DS:DATAS,SS:STACKS
CODES SEGMENT
START:
;相关寄存器初始化
MOV AX,DATAS
MOV DS,AX
MOV AX,TABLE
MOV ES,AX
MOV AX,STACKS
MOV SS,AX
MOV SP,16
MOV BX,0
MOV BP,0
MOV DI,0
MOV SI,0
MOV CX,21
cycle: ;使用栈复制年份
PUSH [DI].0
PUSH [DI].2
POP ES:[BP].2
POP ES:[BP].0
;使用栈复制收入
PUSH 54H.[DI].0
PUSH 54H.[DI].2
POP ES:[BP].7
POP ES:[BP].5
;使用栈复制雇员数
PUSH 0A8H.[SI]
POP ES:[BP].0AH
;计算人均收入
MOV AX,ES:[BP].5
MOV DX,ES:[BP].7
DIV WORD PTR ES:[BP].0AH
MOV ES:[BP].0DH,AX
ADD SI,2H
ADD DI,4H
ADD BP,10H
loop cycle
MOV AH,4CH
INT 21H
CODES ENDS
END START
-------------------------------------------------------------------
栈的使用、结构化程序设计的思想...
话就不多说了,自己体会吧 | | |
|
|
|
|
[第32楼] [ 回复时间:2010-07-14 20:11 ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
调试了一天,经master老大提醒,完成了。
assume cs:codesg,ds:data,ss:stacksg
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个字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;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年雇员人员的word型数据
data ends
table segment
db 21 dup('year summ ne ?? ')
table ends
stacksg segment
dw 4 dup (0,0,0,0);16个word型数据作为暂存
stacksg ends
codesg segment
start: mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov ax,stacksg
mov ss,ax
mov sp,20h
mov ax,0h
mov di,0h
mov si,0h
mov bx,0h
mov cx,15h
s0: push cx;保护cx
push si;si为雇员
mov di,0h
mov si,ax;si为年份
mov cx,2h
s1: mov ax,ds:[si]
mov es:[bx+di],ax;年份
mov ax,ds:[si+54h]
mov es:[bx+5h+di],ax;总收入
add si,2h
add di,2h
loop s1
pop ax;保护雇员
push si;保护年份,此时ss:p为年份,ss:p+2为cx
mov si,ax;雇员
mov ax,ds:[si+0a8h]
mov es:[bx+0ah],ax;雇员
add si,2h
push si;保护雇员,此时ss:p是雇员,ss:p+2为年份,ss:p+4为cx
mov dx,es:[bx+7]
mov ax,es:[bx+5]
div word ptr es:[bx+0ah]
mov es:[bx+0dh],ax;人均收入
add bx,10h
pop si;si为雇员
pop ax;ax为年份
pop cx;此时sp=20h
loop s0
mov ax,4c00h
int 21h
codesg ends
end start | | |
|