汇编网首页登录博客注册
youthangel的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
文章收藏

[2013-03-11 19:18] 课程设计一(修改)

图片载入中
;#mode=dos
assume cs:code,ds:data,ss:stack
data segment
db        '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
db        '1985','1986','1987','1988','1989', '1990','1991','1992','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 21 dup('year summ ne ?? ')
table ends
stack segment
dw 16 dup(0)
stack ends
temp segment
dw 16 dup(0)
temp ends
code segment
start:
mov ax,temp
mov ax,table
mov es,ax
mov di,0;destination
mov ax,data
mov ds,ax
mov bx,0
mov si,168;source
mov ax,stack
mov ss,ax
mov sp,32

call calc;calculate
call clear;clear screen
call show;show resourt


mov ah,0
int 16h

mov ax,4c00h
int 21h
;--------------------------------------
;
;--------------------------------------
show:
push ax
push bx
push cx
push dx
push ds
push si
push di


mov bx,0
mov dh,2;行

mov cx,21
again:
mov ax,table
mov ds,ax
push cx
mov dl,4;列


mov ax,[bx]
call show_memory_str;显示字符串
add dl,2
mov ax,2[bx]
call show_memory_str;显示字符串,年份显示完毕

push dx
mov ax,5[bx]
mov dx,7[bx]
call dtoc
pop dx
mov ax,temp
mov ds,ax
mov si,0
add dl,18
mov cl,2;属性
call show_str;收入显示完毕

push dx
mov ax,table
mov ds,ax
mov ax,10[bx]
mov dx,0
call dtoc
pop dx
mov ax,temp
mov ds,ax
mov si,0
add dl,20
mov cl,2;属性
call show_str

push dx
mov ax,table
mov ds,ax
mov ax,13[bx]
mov dx,0
call dtoc
pop dx
mov ax,temp
mov ds,ax
mov si,0
add dl,20
mov cl,2;属性
call show_str

add bx,16
inc dh
pop cx
loop again


pop di
pop si
pop ds
pop dx
pop cx
pop bx
pop ax
ret
;--------------------------------------
;
;--------------------------------------
show_memory_str:
        push ax
        push es
        push di
        push dx
        
        push ax
        
        mov ax,0b800h
        mov es,ax
        mov al,160
        mul dh
        add dl,dl
        mov dh,0
        add ax,dx
        mov di,ax
        
        pop ax
        
        mov ch,2
        mov cl,al
        mov es:[di],cx        
        add di,2
        mov cl,ah
        mov es:[di],cx        
        add di,2

        pop dx
        pop di
        pop es
        pop ax
        ret        
;--------------------------------------------------
;功能:把内存中的数转换成对应数值的ASCII
;--------------------------------------------------
dtoc:
push ax
push bx
push cx
push dx
push ds

mov bx,'$'
push bx

divagain:
call div32
push cx
mov cx,dx
jcxz dxzero
jmp short divagain
dxzero:
mov cx,ax
jcxz movetotemp
jmp short divagain
movetotemp:
mov ax,temp
mov ds,ax
mov bx,0
popagain:
pop cx
sub cx,'$'
jcxz retdtoc
add cx,'$'+30h
mov [bx],cl
inc bx
jmp short popagain
retdtoc:
mov cl,0
mov [bx],cl;flag

pop ds
pop dx
pop cx
pop bx
pop ax
ret

;功能解决32位除法溢出
;参数:被除数dxax
;返回:商dxax,余数cx
div32:
push bx
mov bx,10
push ax
push bx
mov ax,dx
mov dx,0
div bx;商在ax中,余数在dx中
mov cx,ax
pop bx
pop ax
div bx;商在ax中,余数在dx中
xchg cx,dx
pop bx
ret
;------------------------------------
;function:clear screen
;values:no
;return:no
;------------------------------------
clear:
push ds
push bx
push cx
push ax

mov ax,0b800h
mov ds,ax
mov bx,0
mov cx,25*80*2
mov al,0
s2:
mov [bx],al
add bx,2
loop s2
call setSursor;set sursor
pop ax
pop cx
pop bx
pop ds
ret

setSursor:
push ax
push bx
push dx

mov ah,2
mov bh,0
mov dh,0
mov dl,0
int 10h

pop dx
pop bx
pop ax
ret

;功能在指定位置以指定格式显示字符,字符串结尾为 db 0
;参数: ds:si ,行dh,列dl,属性cl
;返回:无
show_str:
push ax
push es
push di
push dx

mov ax,0b800h
mov es,ax
mov al,160
mul dh
add dl,dl
mov dh,0
add ax,dx
mov di,ax
mov dl,cl
s0:
mov cl,[si]
mov ch,0
jcxz ok
mov es:[di],cl
mov es:[di+1],dl
add di,2
inc si
jmp short s0
ok:
pop dx
pop di
pop es
pop ax
ret

;--------------------------------------
;function:calculate in memory
;values:data address
;return:data in table segment
;--------------------------------------
calc:
push ax
push bx
push cx
push dx
push si
push di
push ds
push es

mov cx,21
s:
mov ax,[bx]
mov dx,[bx+2]
mov es:[di],ax
mov es:2[di],dx;年份

mov ax,84[bx]
mov dx,86[bx]
mov es:5[di],ax
mov es:7[di],dx;收入

div word ptr [si];计算
mov es:13[di],ax;平均
mov ax,[si]
mov es:10[di],ax;人数

add bx,4
add si,2
add di,10h
loop s

pop es
pop ds
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret 
code ends
end start
评论次数(0)  |  浏览次数(798)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码