|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- assume cs:codesg,ss:stack,ds:data
- 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'
-
- 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,5635,8226
- dw 11542,14430,15257,17800
- data ends
- stack segment
- dd 16 dup(0) ;40h 空间
- stack ends
- codesg segment
- start: mov ah,9
- int 10h
- mov ax,data
- mov ds,ax
- mov ax,stack
- mov ss,ax
- mov sp,40h
- mov si,0 ;数据段的偏移地址
-
- mov ax,0b828h ;显存的段地址
- mov es,ax
-
-
- call yaer ;先取出年份,一共20个年份
-
- mov cx,21
- add si,54H
- mov bp,54H
-
- mov di,ax
- s1: push cx
-
- mov ax,ds:[bp] ;总工资
- mov dx,ds:[bp+2]
- mov bx,28h
- call dtoc
-
- mov cx,ds:[si] ;公司人数
- push ax
- push dx
- push cx
- mov ax,cx
- mov dx,0
- mov bx,50h
- call dtoc
- pop cx
- pop dx
- pop ax
-
- div cx ;得到最后的人均值 ax
- mov dx,0
- mov bx,78h
- call dtoc
-
- add bp,4
- add si,2
- add di,0ah
- mov es,di
- pop cx
- loop s1
-
- mov ax,4c00h
- int 21h
-
-
-
-
- ;保存年
- yaer:
- mov cx,21
-
- mov bx,0
- push ax
- y:
- mov dx,ds:[si]
- mov es:[0],dl
- mov byte ptr es:[1],07h
- mov es:[2],dh
- mov byte ptr es:[3],07h
- mov dx,ds:[si+2]
- mov es:[4],dl
- mov byte ptr es:[5],07h
- mov es:[6],dh
- mov byte ptr es:[7],07h
- add si,4
-
- add ax,0ah ;跳转到下一行
- mov es,ax
- loop y
- pop ax
- mov es,ax
- ret
-
- dtoc: push ax
- push dx
- push si
-
- mov si,0
- mov cx,10
- s2: ;取余
- call divdw ; dx高位 ax 低位 cx余数
- push cx
- mov cx,ax
- inc si
- jcxz ok_dtoc1 ;完成取余工作inc si
- mov cx,0bH
- loop s2
- ok_dtoc1:
- mov cx,si ;开始颠倒刚开始取余的值
- mov si,0
-
- ss1: pop ax
- add ax,30h
- mov ah,07h
- mov es:[bx+si],ax
- add si,2
- loop ss1
- mov word ptr es:[bx+si],0h ;表示已经结束
- pop si
- pop dx
- pop ax
- ret ;已经完成对字量常数的转变
-
-
- ;16位不溢出除法
- divdw: push bx
- push ax ;底地址入栈s
- mov ax,dx
- mov dx,0
- div cx ;除以高地址
- mov bx,ax ;将结果保存
- pop ax ;取出低地址进行剩下的16位计算
- div cx
- mov cx,dx ;保存余数
- mov dx,bx ;保存高位
- pop bx
- ret
- codesg ends
- end start
复制代码
野路子,除了溢出除法不是自己写的其他的都是自己独立完成(除法那个实在是思考不出来,或则说 路 走错了)
如果不加前面的mov ah,9 int 10h 中断,那就无法显示(或者说显示了,但是太快了)
其他的都还好,一步一步debug还是能发现自己构思的过程中的一些不严谨的地方.然后加以改成,
好的程序是改出来的, |
|