汇编语言(第三版)课设一贼详细版

;1、年份:放入数据段,显示
;2、收入:进行除法运算,转化为ascii码,放入数据段,显示
;3、雇员数:进行除法运算,转化为ascii码,放入数据段,显示
;4、人均:主程序进行人均运算,除法溢出,转ascii码,放入数据段,显示

assume cs:code

;收入段在data中只能看到机器码和......,所以需要除以10
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,11542,14430,15257,17800
data ends
;0-10,10-30,30-40,40-49
table segment
      db 49 dup(20h),0
table ends

code segment
start:        mov ax,data
            mov es,ax
            mov ax,table     
            mov ds,ax     ;都要用table,所以把table段给统一规定为ds
            mov si,0
            mov bx,0
            mov di,0
            mov bp,0
            mov dx,0303h
            mov cx,21
;==============================================

GGG:        add dh,1        ;dx换行
            push cx
            push dx
            mov bp,0
;年份入table段            
            mov ax,es:[si]      
            mov ds:[bp],ax
            mov ax,es:[si+2]
            mov ds:[bp+2],ax
;===============================================
;收入入table段
            mov bp,10
            mov ax,es:[si+84]
            mov dx,es:[si+86]    
            call divdw
;===============================================
;人数入table段
             mov bp,30
             mov ax,es:[bx+168]
             mov dx,0
             call divdw
;================================================
;人均入table段,因为题中已经给出人均占俩字节,所以不考虑溢出。先算出来人均,放入ax中,再进行转化ASCII码运算
            mov bp,40
            mov cx,es:[bx+168]
            mov ax,es:[si+84]
            mov dx,es:[si+86]
            div cx
            mov dx,0
            call divdw
;================================================
;显示一行的数据
            mov di,0
            pop dx         ;dx在此时恢复原来的行列,准备在下一次循环换行

            mov cl,2
            call showstart
;================================================
;显示后进行table段的清空操作,即为全写为空格。防止前面的数对后面的数产生影响(并不一定后面的数一定能把前面的数覆盖)
            call clearly
            add si,4
            add bx,2
            pop cx
            loop GGG


            mov ax,4c00h
               int 21h


;==============================================
;清零操作,20h为空格键的ASCII码
clearly:    push si
            mov si,0
            mov al,20h
            mov cx,49

clearly1:    mov [si],al
            add si,1
            loop clearly1
            pop si
            ret 
;==============================================
;显示
showstart:    push si
            push es
            push dx
            mov ax,0b800h
            mov es,ax
            mov al,160
            mul dh
            mov di,ax
            dec dl
            add dl,dl
            mov dh,0
            add di,dx
            mov si,0

show:        mov al,[si]
            push cx
            mov ch,0
            mov cl,[si]
            jcxz show1
            pop cx            
            mov ah,cl
            mov es:[di],ax
            inc si
            add di,2
            jmp short show

show1:        pop cx
            pop dx
            pop es
            pop si    
            ret

;=============================================
;转化为ASCII码放入table段
dtoc:    
            mov cx,di

s:            pop ax
            add al,30h
            mov ds:[bp],al
            inc bp
            loop s
            pop bx
            ret
            

;==============================================
;防止除法溢出操作
divdw:      mov di,0
            push bx
divdw1:        push ax
            mov ax,dx
            mov dx,0
            mov cx,10
            div cx
            mov bx,ax
            pop ax
            div cx
            mov cx,dx
            mov dx,bx
            inc di     
            push cx
            mov cx,ax
            or cx,dx 
            jcxz dtoc
            jmp short divdw1

               
code ends
end start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值