|
主题 : : 课程设计1,大功告成! 欢迎同仁们共同学习指教,这个却实有够费事的…… [待解决] |
回复[ 3次 ]
点击[ 454次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-02-22 22:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2008-12-12 00:18 |
assume cs:codesg
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
data ends //原公司数据
table segment
db 16 dup(0)
table ends //定义16字节数据空间用于暂存对公司数据的相关转换
codesg segment
start:mov ax,data
mov es,ax //设原数据在es段
mov ax,table
mov ds,ax //设转换为要显示在屏幕上的数据的空间为数据段
mov dh,3
mov dl,10 //初始化在3行10列显示第一个数据
mov di,0 //读取双字单元数据的变址
mov si,0 //要显示的数据偏移地址的首地址
mov bp,0 //读取字单元数据的变址
call clear //调用清屏子程序,先清空屏幕
mov cx,21 //程序下面将循环21次,每次显示公司一条记录
main:push cx
mov cl, //显示在屏幕上字符的颜色
mov ax,es:[di]
mov ds:[0],ax
mov ax,es:2[di]
mov ds:[2],ax
call show_str //以上实现年份的字段的显示
add dl,15 //列数增加15,拉开距离,以便显示下一字段
push dx
mov ax,es:84[di]
mov dx,es:86[di]
call dtoc
pop dx
call show_str //以上实现总收入字段的显示
add dl,15 //同上,改变列的显示位置
push dx
mov ax,es:168[bp]
mov dx,0
call dtoc
pop dx
call show_str //以上实现雇员数字段的显示
add dl,15 //同上,改变列的显示位置
push dx
mov ax,es:84[di]
mov dx,es:86[di]
mov bx,es:168[bp]
div bx
mov dx,0
call dtoc
pop dx
call show_str //以上实现人平收入字段的显示
add bp,2
add di,4
inc dh //行数加1,实现换行准备显示下一条记录
mov dl,10 //重设列数为10,准备显示下一条记录,并对齐上一条
pop cx
loop main //返回main,去显示下一条记录
mov ax,4c00h
int 21h
dtoc:push ax //以下是双字型转十进制字符串的子程序
push bx
push cx
push dx
push si
push di
mov bx,0
push bx
mov di,1
s:mov cx,10
call divdw
mov bx,cx
mov cx,ax
add bl,30h
push bx
inc di
jcxz oka
jmp short s
oka:mov cx,dx
jcxz ok
jmp short s
ok:mov cx,di
oo:pop [si]
inc si
loop oo
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
show_str:push ax //以下是字符串显示的子程序
push bx
push cx
push dx
push es
push si
mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax
mov ch,0
s1:push cx
mov cl,[si]
jcxz ok1
mov es:[bx],cl
pop cx
mov es:[bx+1],cl
inc si
add bx,2
jmp short s1
ok1:pop cx
pop si
pop es
pop dx
pop cx
pop bx
pop ax
ret
divdw:push bx //以下是防除法溢出子程序
mov bx,ax
mov ax,dx
mov dx,0
div cx
push ax
mov ax,bx
div cx
mov cx,dx
pop dx
pop bx
ret
clear:push ax //以下是清空屏幕的子程序
push es
push bx
push cx
mov ax,0b800h
mov es,ax
mov bx,0
mov cx,2000
cls:mov word ptr es:[bx],0720h
add bx,2
loop cls
pop cx
pop bx
pop es
pop ax
ret
codesg ends //代码结束
end start //OK!大功告成... | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-02-22 22:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2008-12-12 00:18 |
" mov cl, //显示在屏幕上字符的颜色 "
不好意思,这里应该是mov cl,2 //显示在屏幕上字符的颜色 ,不小心抹掉了!!!这儿设为绿色的 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-02-26 16:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07 |
楼主继续加油啊~
我觉得能做出来就是一大胜利,至于代码的精简可以以后在做~ | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-04-05 00:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2008-12-11 08:43 |
|
|