| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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
 
  复制代码 
 
 |   
 
 
 
 |