zoukankan      html  css  js  c++  java
  • 汇编课程设计

    内容:显示一个公司的信息,计算人均收入;

    Source Code:

    assume cs:codesg,ss:stack
    
    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'
           ;以上是表示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 ends
    
    table segment
           db 21 dup ('year summ ne ?? ')
    table ends
    
    stack segment
           dw 32 dup (0)
    stack ends
    
    buffer segment
           db 32 dup (0)
    buffer ends
    
    codesg segment
    start:
        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 21h
    
    dtoc:
           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
           ret
    
    
    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
    
    show_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
        ret
    
    finishing:
        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
        ret
    
    
    codesg ends
    end start
    View Code

    思路:

    1、首先将数据格式化到es:bx中

    2、将格式化的数据先加载到ds:si中;

    3、根据不同的数据采取不同的措施,年份直接转换字符串,其他的数值数据,先转换为字符;

    4、转换字符的时候,将余数加到栈中保存,然后覆盖到原来的缓冲区中;

    5、显示字符,要控制每种数据的位置;

  • 相关阅读:
    Enterprise Library 3.0 – April 2007 Released
    Static methods can not be called remotely
    BizTalk: 提高 BizTalk 编程能力的 8 点技巧和窍门(MSDN Magazine)
    Calling Stored Procedures Using the SQL Adapter
    BizTalk: Difference between (PassThruReceive, PassThruSend) and (XmlReceive, XmlSend) Biztalk Pipelines (For Beginners)
    BizTalk Exception: Cannot access a disposed object && Failed to serialize the message part "BankQuoteRequest" into the type "BankQuoteRequest"
    Oneway web service call in BizTalk Orchestration
    Create route in crossserver SSB
    BizTalk: PublisherSubscriber model and Binding
    BizTalk Exception: Calling web services with Mixed OneWay and SolicitResponse Operations
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6961979.html
Copyright © 2011-2022 走看看