首页 > 代码库 > 汇编课程设计

汇编课程设计

技术分享
assume cs:codesg,ss:stackdata 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       ;以上是表示21年的21个字符串       dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514       dd 245980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000       ;以上是表示21年公司总收入的21个dword型数据       dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226       dw 11542,14430,15257,17800       ;以上是表示21年公司雇员人数的21个word型数据data endstable segment       db 21 dup (year summ ne ?? )table endsstack segment       dw 32 dup (0)stack endsbuffer segment       db 32 dup (0)buffer endscodesg segmentstart:    mov ax,data    mov ds,ax    mov di,0    mov si,4*21+4*21    ;指向员工    mov ax,table    mov es,ax           ;es存表    mov bx,0    call finishing      ;将data段格式化到es段了    mov ax,stack    mov ss,ax    mov sp,64    mov ax,buffer   ;数据缓冲区,接受转换后的每一个字符    mov ds,ax    mov si,0        ;ds:si指向缓冲区    mov ax,table    mov es,ax    mov bx,0        ;ex:bx指向table    mov dh,5        ;第一行    mov cx,21    s:        push cx        mov ax,es:[bx]        mov ds:[si],ax        mov ax,es:[bx+2]        mov ds:[si+2],ax          ;向缓冲区中写入一条年信息        mov byte ptr ds:[si+4],0        mov dl,20                 ;显示年份        mov cl,2        call show_str        push dx        mov ax,es:[bx+5]          ;读取一条总收入信息        mov dx,es:[bx+7]        call dtoc                 ;调用dtoc将数值转换成字符串到缓冲区中        pop dx        mov dl,30                 ;显示员工        call show_str        push dx        mov ax,es:[bx+0ah]        ;读取一条总人数信息        mov dx,0        call dtoc                 ;调用dtoc将数值转换成字符串到buffer中        pop dx        mov dl,40       ;显示字符串        call show_str        push dx        mov ax,es:[bx+0dh]       ;读取一条人均收入信息        mov dx,0        call dtoc         ;调用dtoc将数值转换成字符串到buffer中        pop dx        mov dl,50       ;显示字符串        call show_str        add dh,2         ;每隔一行打印一条数据        add bx,10h     ;让es:bx指向table的下一行数据        pop cx        loop s    mov ax,4c00h    int 21hdtoc:       push ax       push bx       push cx       push dx       push bp       push si       mov bp,0  dtoc_s0:       mov cx,10d       call divdw       push cx       inc bp       mov cx,ax        ;除到商为0为止       inc cx       loop dtoc_s0       mov cx,bp  dtoc_s:       pop bx       add bl,30h       mov ds:[si],bl       inc si       loop dtoc_s       mov byte ptr ds:[si],0       pop si       pop bp       pop dx       pop cx       pop bx       pop ax       retdivdw:  ;子程序定义开始       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       retshow_str:    push ax    push bx    push cx    push dx    push es    push bp    push si    mov ax,0b800H    mov es,ax    mov al,80*2     ;一行160个字节    mul dh          ;刚开始是第五行;高位是行,低位是列    mov dh,0    add ax,dx       ;列数*2    add ax,dx    mov bp,ax    mov al,cl       ;颜色    mov cx,0    mov cl,ds:[si]  ;ds:[si]为缓冲区指针    inc si    show_str_s:        mov es:[bp],cl  ;低位ascii        inc bp        mov es:[bp],al  ;高位属性        inc bp        mov cl,ds:[si]  ;如果这个字节是0,退出循环        inc si        inc cx    loop show_str_s    pop si    pop bp    pop es    pop dx    pop cx    pop bx    pop ax    retfinishing:    push ax    push bx    push cx    push di    push si    push bp    mov cx,21    finishing_s:    ;填充时间    mov ax,ds:[di]    mov es:[bx],ax    mov ax,ds:[di+2]    mov es:[bx+2],ax    ;填充收入,收入是双字节的    mov ax,ds:[di+4*21]    mov dx,ds:[di+4*21+2]   ;高位    mov es:[bx+5],ax    mov es:[bx+5+2],dx    ;填充人数    mov bp,ds:[si]    mov es:[bx+0aH],bp    ;填充人均收入    div bp    mov es:[bx+0dH],ax    add bx,16   ;table换一行    add di,4    ;年份换一个    add si,2    ;员工修改两个字节    loop finishing_s    pop bp    pop si    pop di    pop cx    pop bx    pop ax    retcodesg endsend start
View Code

 

汇编课程设计