;初学汇编,希望给点意见,将代码更加精{: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