|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 avatar10010 于 2014-10-3 23:33 编辑
- ;初学汇编,希望给点意见,将代码更加精{:1_1:}
- assume cs:code
- code segment
- year db '19751976197719781979198019811982198319841985',
- '1986198719881989199019911992199319941995'
- income dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,
- 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
- member dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,
- 2793,4037,5635,8226,11542,14430,15257,17800
- start:
- mov ax,0b800h+160*4/16 ;4代表行号
- mov es,ax
- mov bh,2 ;设置颜色(绿色)
- xor si,si
- xor di,di
- xor bp,bp
- mov cx,21 ;设置循环次数
- line:
- ;Year
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov bl,year[di]
- mov es:[bp],bx
- mov bl,year[di+1]
- mov es:[bp+2],bx
- mov bl,year[di+2]
- mov es:[bp+4],bx
- mov bl,year[di+3]
- mov es:[bp+6],bx
- ;Income
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- add bp,12
- mov ax,word ptr income[di]
- mov dx,word ptr income[di+2]
- call dtoc
- ;Member
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- add bp,18
- mov ax,member[si]
- xor dx,dx
- call dtoc
- ;Average
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- add bp,14
- push cx
- mov ax,word ptr income[di]
- mov dx,word ptr income[di+2]
- mov cx,member[si]
- call divdw
- call dtoc
- add si,2
- add di,4
- add bp,116
- pop cx
- loop line
- mov ax,4c00h
- int 21h
- dtoc:
- push si
- push cx
- xor si,si
- s:
- mov cx,10
- call divdw
- add cl,30h
- mov ch,bh
- push cx
- inc si
- mov cx,ax
- jcxz return1
- jmp s
- return1:
- mov cx,si
- mov si,bp
- return2:
- pop es:[si]
- add si,2
- loop return2
- pop cx
- pop si
- ret
- divdw:
- push bx
- push ax ;保存低16位
- mov ax,dx ;此时ax的值是高16位
- xor dx,dx
- div cx ;H/N
- mov bx,ax ;bx的值为(int)H/N,dx的值是(rem)H/N
- pop ax
- div cx ;L/N
- mov cx,dx
- mov dx,bx
- pop bx
- ret
- code ends
- end start
复制代码
|
|