| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
assume cs:codesg,ds:datasg,ss:stacksg 
 
stacksg segment 
        db 64 dup (0) 
stacksg ends 
 
datasg segment 
        db 16 dup (0)                ;存放待显示字符串 
         
        db '1975','1976','1977','1978','1979','1980','1981' 
        db '1982','1983','1984','1985','1986','1987','1988' 
        db '1989','1990','1991','1992','1993','1994','1995' 
        ;以上是表示21年的21个字符串 
         
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479 
        dd 140417,197514,345980,590827,803530,1183000,1843000 
        dd 2759000,3753000,4649000,5937000 
        ;以上是表示21年公司总收入的21个dword型数据 
         
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793 
        dw 4037,5635,8226,11542,14430,15257,17800 
        ;以上是表示21年公司雇员人数的21个word型数据 
         
datasg ends 
 
codesg segment 
;名称:show_str 
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串 
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),(cl)=颜色,ds:si指向字符串的首地址 
show_str:        push es 
                push ax 
                push cx 
                push dx 
                push si 
                push di 
                mov ax,0b800h 
                mov es,ax 
                mov al,160 
                mul dh 
                mov di,ax 
                add dl,dl 
                mov dh,0 
                add di,dx 
                mov ah,cl 
                mov ch,0 
                show:        mov cl,[si] 
                        jcxz show0 
                        mov al,[si] 
                        mov es:[di],ax 
                        inc si 
                        add di,2 
                        jmp short show 
                show0:        pop di 
                        pop si 
                        pop dx 
                        pop cx 
                        pop ax 
                        pop es 
                        ret 
 
;名称:divdw 
;功能:进行不会产生溢出的除法运算,被除数为 dword 型,除数为 word 型,结果为 dword 型。 
;参数:(ax)=dword 型数据的低16位,(dx)=dword 型数据的高16位,(cx)=除数 
;返回:(ax)=结果的低16位,(dx)=结果的高16位,(cx)=余数 
divdw:        push bx 
        push ax 
        mov ax,dx 
        mov dx,0 
        div cx 
        mov bx,ax 
        pop ax 
        div cx 
        mov cx,dx 
        mov dx,bx 
        pop bx 
        ret 
 
;名称:dtoc 
;功能:将 dword 型数据转变为表示十进制数的字符串,字符串以0为结尾符。 
;参数:(ax)=dword型数据低16位,(dx)=dword型数据高16位,ds:si指向字符串的首地址 
dtoc:        push ax 
        push bx 
        push cx 
        push dx 
        push si 
        mov bx,0 
        dtoc1:        mov cx,10 
                call divdw 
                inc bx 
                add cx,30h 
                push cx 
                mov cx,dx 
                jcxz dtoc2 
                jmp short dtoc1 
        dtoc2:        mov cx,ax 
                jcxz dtoc3 
                jmp short dtoc1 
        dtoc3:        mov cx,bx 
                dtoc4:        pop ax 
                        mov [si],al 
                        inc si 
                        loop dtoc4 
                mov byte ptr [si],0 
                pop si 
                pop dx 
                pop cx 
                pop bx 
                pop ax 
                ret 
 
start:        mov ax,stacksg 
        mov ss,ax 
        mov sp,64          ;栈顶 
        mov ax,datasg 
        mov ds,ax 
        mov si,0          ;待显示字符串首地址 
        mov bx,16          ;指向年份 
        mov di,184        ;指向人数 
        mov bp,3          ;显示行数 
        mov cx,21 
        s:        push cx 
                mov ax,[bx] 
                mov [si],ax 
                mov ax,[bx+2] 
                mov [si+2],ax 
                mov byte ptr [si+4],0      ;年份字符串后面填0 
                mov ax,bp 
                mov dh,al          ;3行 
                mov dl,25          ;25列 
                mov cl,2          ;黑底绿字 
                call show_str 
                mov ax,[bx+84]          ;总收入低16位 
                mov dx,[bx+86]          ;总收入高16位 
                call dtoc 
                mov ax,bp 
                mov dh,al 
                mov dl,32 
                call show_str 
                mov ax,[di]        ;人数 
                mov dx,0 
                call dtoc 
                mov ax,bp 
                mov dh,al 
                mov dl,42 
                call show_str 
                mov ax,[bx+84] 
                mov dx,[bx+86] 
                div word ptr [di]          ;(ax)=人均收入 
                mov dx,0 
                call dtoc 
                mov ax,bp 
                mov dh,al 
                mov dl,50 
                call show_str 
                add bx,4 
                add di,2 
                inc bp 
                pop cx 
                loop s 
         
        mov ax,4c00h 
        int 21h 
codesg ends 
end start |   
 
 
 
 |