|
主题 : : 课程设计一 [已解决] |
回复[ 2次 ]
点击[ 528次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-04-15 11:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:18
信誉值:0
注册日期:2009-04-04 22:58 |
逃了一天课总算是把课程设计一 完成了,我知道程序还能简化,可你们得知道我大脑都快受不了 我只想让大家知道我已经完成了课程设计一,我过段时间会把程序优化的~ 呵呵,还有谢谢给我留言的那个游客,你应该是在给我做课程设计一提意见吧,不过现在我什么问题都不敢想了,就把作业交了吃饭去~ 我会好好消化你的意见的!
电脑调试结果: http://www.asmedu.net/blog/user/bigimg.jsp?neighborId=20202&pic=post_1239764898828.jpg
我的学习博客:http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=20202&kindId=30785&postId=34494&readSg=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'
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 11542,14430,15257,17800
dw 21 dup (0)
data ends
stack segment
dw 16 dup (0)
stack ends
code segment
p: mov ax,4c00h
int 21h
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,20h
mov ax,0b800h
mov es,ax
mov bp,0 ;用为显示时的行指针
mov cx,2000h
call s ;清屏
mov dh,4 ;从第4行开始显示
mov si,0
mov di,0
mov bx,0
mov al,10
mul dh
add ax,0b800h
mov es,ax
mov cx,21
call s2 ;显示年份
mov cx,21
call s5 ;显示总收入
mov cx,21
call d ;求人均收入
mov cx,21
call d2 ;显示公司职员人数
mov cx,21
call d7
jmp p
s: push bp ;清屏
s1: mov ax,0
mov es:[bp],ax
add bp,2
loop s1
pop bp
ret
s2: push di
push bp
s3: push cx
push si
mov cx,4
s4: mov al,[di] ;取年份的ASCII码
mov ah,7
mov es:[bp+si].20,ax ;从第10列开始显示年份
inc di
add si,2
loop s4
pop si
pop cx
add bp,160 ;换行
loop s3
pop bp
pop di
ret
s5: push dx
push bx
push si
push bp
s6: mov si,0
push cx
mov ax,[bx].54h
mov dx,[bx].56h
s7: push ax
mov cx,10
mov ax,dx
mov dx,0
div cx
mov di,ax
pop ax
div cx
add dx,30h
push dx
mov dx,di
inc si
mov cx,dx
jcxz s8
jmp short s7
s8: mov cx,ax
jcxz s9
jmp short s7
s9: mov cx,si
mov si,0
s0: pop ax
mov ah,7
mov es:[bp+si].40,ax
add si,2
loop s0
pop cx
add bx,4
add bp,160
loop s6
pop bp
pop si
pop bx
pop dx
ret
d: push dx
push bx
push si
d1: push cx
mov ax,[bx].54h
mov dx,[bx].56h
div word ptr [si].0a8h
mov [si].0d2h,ax
add si,2
add bx,4
pop cx
loop d1
pop si
pop bx
pop dx
ret
d2: push bp
push bx
push si
d3: push cx
mov si,0
mov ax,[bx].0a8h
d4: mov cx,10
mov dx,0
div cx
add dx,30h
push dx
inc si
mov cx,ax
jcxz d5
jmp short d4
d5: mov cx,si
mov si,0
d6: pop ax
mov ah,7
mov es:[bp+si].70,ax
add si,2
loop d6
pop cx
add bx,2
add bp,160
loop d3
pop si
pop bx
pop bp
ret
d7: push bp
push bx
push si
d8: push cx
mov si,0
mov ax,[bx].0d2h
d9: mov cx,10
mov dx,0
div cx
add dx,30h
push dx
inc si
mov cx,ax
jcxz d0
jmp short d9
d0: mov cx,si
mov si,0
q: pop ax
mov ah,7
mov es:[bp+si].100,ax
add si,2
loop q
pop cx
add bx,2
add bp,160
loop d8
pop si
pop bx
pop bp
ret
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-04-15 22:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:18
信誉值:0
注册日期:2009-04-04 22:58 |
优化后的程序~
呵呵,本人表达能力有限不能完全把我的程序给大家注释,希望大家能耐心的看下,谢谢~
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'
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 11542,14430,15257,17800
dw 23 dup (0)
data ends
stack segment
dw 16 dup (0)
stack ends
code segment
p: mov ax,4c00h
int 21h
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,20h
mov ax,0b800h
mov es,ax
mov bp,0 ;用为显示时的行指针
mov cx,2000h
call s ;清屏
mov dh,3 ;从第3行开始显示
mov di,0
mov bx,0
mov al,10
mul dh
add ax,0b800h
mov es,ax
mov si,20
mov cx,21
call s2 ;显示年份
mov cx,21
call d ;求人均收入
mov si,70
mov bx,0a8h
mov cx,21
call d2 ;显示人员总数
mov si,100
mov cx,21
mov bx,0d2h
call d2 ;显示人均收入
mov cx,21
mov bx,0
mov si,40
call s5 ;显示总收入
jmp p
s: push bp ;清屏
s1: mov ax,0
mov es:[bp],ax
add bp,2
loop s1
pop bp
ret
s2: push di
push bp
s3: push cx
push si
mov cx,4
s4: mov al,[di] ;取年份的ASCII码
mov ah,7
mov es:[bp+si],ax
inc di
add si,2
loop s4
pop si
pop cx
add bp,160 ;换行
loop s3
pop bp
pop di
ret
s5: push bp
s6: mov word ptr ds:[0fch],0
push si
push cx
mov ax,[bx].54h
mov dx,[bx].56h
s7: push ax
mov cx,10
mov ax,dx
mov dx,0
div cx
mov word ptr ds:[0feh],ax
pop ax
div cx
add dx,30h
push dx
mov dx,word ptr ds:[0feh]
inc word ptr ds:[0fch]
mov cx,dx
jcxz s8
jmp short s7
s8: mov cx,ax
jcxz s9
jmp short s7
s9: call show
add bx,4
add bp,160
pop cx
pop si
loop s6
pop bp
ret
d: push dx
push bx
d1: push cx
mov ax,[bx].54h
mov dx,[bx].56h
div word ptr [di].0a8h
mov [di].0d2h,ax
add di,2
add bx,4
pop cx
loop d1
pop bx
pop dx
ret
d2: push bp
d3: push si
push cx
mov word ptr ds:[0fch],0
mov ax,[bx]
d4: mov cx,10
mov dx,0
div cx
add dx,30h
push dx
inc word ptr ds:[0fch]
mov cx,ax
jcxz d5
jmp short d4
d5: call show
pop cx
pop si
add bx,2
add bp,160
loop d3
pop bp
ret
show: mov cx,word ptr ds:[0fch] ;显示字符的子程序
pop ax
mov word ptr ds:[0feh],ax
q: pop ax
mov ah,7
mov es:[bp+si],ax
add si,2
loop q
push word ptr ds:[0feh] ;由于在执行call后ip会入栈,在这里我让ip先保存在已定义的一个内存单元中,再入栈就可以正确返回现场
ret
code ends
end start | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-04-26 19:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:18
信誉值:0
注册日期:2009-04-04 22:58 |
此贴由 贴主 于 [ 2009-04-26 19:44 ] 结贴。 结贴原因:问题已解决 | | |
|