. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据处理的两个基本问题
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第八章 监测点 不对之处 忘批评指正  [待解决] 回复[ 2次 ]   点击[ 443次 ]  
dustym
[帖 主]   [ 发表时间:2014-09-22 13:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-08-07 13:06
assume cs:ym
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'  ;每个字符串4字节总共21个 4X21=84转换54H
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'  ;年份 字节从0开始0-53H
db '1993','1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514  ;dd双字8个字节 共21X8=168转换0a8;
dd 345980,590827,803530,1183000,1843000,2759000,3759000,4649000,5937000; 年份后面开始写入54H-0a7
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 
dw 11542,14430,15257,17800 ;一个字2字节 共21X2=42转换2a+0a7=0d1 从收入后面写入雇佣:0a8-0d1
data ends

tabil segment
db 21 dup ('year sume ne    ')
tabil ends

ym segment
     start:mov ax,data   ;ax与data挂钩
      mov ds,ax   
          
          mov ax,tabil  ;ex与tabil挂钩
          mov es,ax
          
          mov si,0 
          mov di,0
          mov bx,0
          mov cx,21  ;循环 21次
          ;取年份         
        s:mov ax,ds:[si]  ;偏移0=si十六位寄存器ds:si的数据送入ax得到19
          mov bx,ds:[si+2];偏移2=si十六位寄存器ds:si的数据送入bx得到75
          ;入年份
          mov es:[si],ax  ;将取到的数据17送入es:0处
          mov es:[si+2],bx ;将取到的数据75送入es:si+2处
            ;取收入  
          mov ax,ds:54h[si] ;取ds中的收入位置 ds:54h[si] 00 00
          mov bx,ds:54h[si+2];四个字节 取值方法同上’年份‘ 00 16
             ;入收入
          mov es:54h[si],ax ;将取到的收入 四字节送入es:054处00 00 
          mov es:54h[si+2],bx ;00 16
            
          mov ax,ds:0a8h[di] ;取雇员数 
          mov es:0a8h[di],ax ;入雇员数 送入es:0a8处
    ;平均收入开始          
    mov ax,ds:[si+54h];最高收入超过65536 取一个字低位送入ax
          mov dx,ds:[si+54h+2];取一个字高位送入dx
         div word ptr ds:[di+0a8h];除以ds:di+0a8h的人数
          mov es:[di+0d2h],ax;收入送入es:di+0d2h处

          add di,2
          add si,4
          loop s  ;循环尾        
        mov ax,4c00h   ;返回  
                int 21h 
                ym ends
          end start
        
          ;仔细想了1天,
          ;遇到一大堆问题,各种调试
          ;总算写好了。
wsh19931001
[第1楼]   [ 回复时间:2014-10-07 02:32 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-10-07 02:07
这样不会搞混吗?你可以把es和di来一起用把ds和bx一起用啊   本来ds就是和bx一起用的,何必这么复杂?
dustym
[第2楼]   [ 回复时间:2014-10-07 09:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-08-07 13:06
也对哈,谢谢指点
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved