[2013-08-11 18:53] 课程设计1
assume cs:code
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
buf segment
db 160 dup (0)
buf ends
code segment
start:mov ax,data
mov es,ax
mov ax,buf
mov ds,ax
mov si,0
mov cl,7
;显示年份
mov dx,0303H
mov di,0
mov cx,21
yr:push cx
mov bp,0
mov ax,es:[di]
mov ds:[bp],ax
add di,2
add bp,2
mov ax,es:[di]
mov ds:[bp],ax
mov cl,7
call show_str
add di,2
add bp,2
inc dh
pop cx
loop yr
;显示总工资
mov dx,030bH
mov cx,21
sum:push cx
push dx
mov ax,es:[di]
add di,2
mov dx,es:[di]
add di,2
call dtoc
mov cl,7
pop dx
call show_str
inc dh
pop cx
loop sum
;显示人数
mov dx,0316H
mov cx,21
num:push cx
push dx
mov ax,es:[di]
mov dx,0
add di,2
call dtoc
mov cl,7
pop dx
call show_str
inc dh
pop cx
loop num
;显示平均工资
sub di,42
mov bp,di
sub di,84
mov dx,031fH
mov cx,21
avg:push cx
push dx
mov ax,es:[di]
add di,2
mov dx,es:[di]
add di,2
mov cx,es:[bp]
add bp,2
call divdw
call dtoc
mov cl,7
pop dx
call show_str
inc dh
pop cx
loop avg
stop:jmp stop
mov ax,4c00h
int 21h
show_str:push bp
push si
push es
push ax
push bx
push cx
mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bl,dl
mov bh,0
add bl,bl
add bx,ax
mov bp,sp
show_str_again:mov cx,0
mov cl,[si]
jcxz show_str_ok
mov es:[bx],cl
inc bx
mov al,[bp]
mov es:[bx],al
inc bx
inc si
jmp show_str_again
show_str_ok:pop cx
pop bx
pop ax
pop es
pop si
pop bp
ret
dtoc:push ax
push cx
push si
push dx
push di
mov di,1
dtoc_positive:mov cx,10
call divdw
add cx,30H
push cx
mov cx,ax
or cx,dx
jcxz dtoc_ret
inc di
jmp dtoc_positive
dtoc_ret:mov cx,di
dtoc_store:pop dx
mov [si],dl
inc si
loop dtoc_store
mov byte ptr [si],0
pop di
pop dx
pop si
pop cx
pop ax
ret
divdw:push bx
mov bx,ax ;低16位在bx
mov ax,dx
mov dx,0
div cx
push ax ;存储结果
mov ax,bx ;低16位在ax
div cx
mov bx,dx ;余数在bx
pop dx
mov cx,bx
pop bx
ret
code ends
end start
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
buf segment
db 160 dup (0)
buf ends
code segment
start:mov ax,data
mov es,ax
mov ax,buf
mov ds,ax
mov si,0
mov cl,7
;显示年份
mov dx,0303H
mov di,0
mov cx,21
yr:push cx
mov bp,0
mov ax,es:[di]
mov ds:[bp],ax
add di,2
add bp,2
mov ax,es:[di]
mov ds:[bp],ax
mov cl,7
call show_str
add di,2
add bp,2
inc dh
pop cx
loop yr
;显示总工资
mov dx,030bH
mov cx,21
sum:push cx
push dx
mov ax,es:[di]
add di,2
mov dx,es:[di]
add di,2
call dtoc
mov cl,7
pop dx
call show_str
inc dh
pop cx
loop sum
;显示人数
mov dx,0316H
mov cx,21
num:push cx
push dx
mov ax,es:[di]
mov dx,0
add di,2
call dtoc
mov cl,7
pop dx
call show_str
inc dh
pop cx
loop num
;显示平均工资
sub di,42
mov bp,di
sub di,84
mov dx,031fH
mov cx,21
avg:push cx
push dx
mov ax,es:[di]
add di,2
mov dx,es:[di]
add di,2
mov cx,es:[bp]
add bp,2
call divdw
call dtoc
mov cl,7
pop dx
call show_str
inc dh
pop cx
loop avg
stop:jmp stop
mov ax,4c00h
int 21h
show_str:push bp
push si
push es
push ax
push bx
push cx
mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bl,dl
mov bh,0
add bl,bl
add bx,ax
mov bp,sp
show_str_again:mov cx,0
mov cl,[si]
jcxz show_str_ok
mov es:[bx],cl
inc bx
mov al,[bp]
mov es:[bx],al
inc bx
inc si
jmp show_str_again
show_str_ok:pop cx
pop bx
pop ax
pop es
pop si
pop bp
ret
dtoc:push ax
push cx
push si
push dx
push di
mov di,1
dtoc_positive:mov cx,10
call divdw
add cx,30H
push cx
mov cx,ax
or cx,dx
jcxz dtoc_ret
inc di
jmp dtoc_positive
dtoc_ret:mov cx,di
dtoc_store:pop dx
mov [si],dl
inc si
loop dtoc_store
mov byte ptr [si],0
pop di
pop dx
pop si
pop cx
pop ax
ret
divdw:push bx
mov bx,ax ;低16位在bx
mov ax,dx
mov dx,0
div cx
push ax ;存储结果
mov ax,bx ;低16位在ax
div cx
mov bx,dx ;余数在bx
pop dx
mov cx,bx
pop bx
ret
code ends
end start
评论次数(1) |
浏览次数(451) |
类型(汇编作业) |
收藏此文 |