. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据处理的两个基本问题
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验7  [已解决] 回复[ 4次 ]   点击[ 458次 ]  
static
[帖 主]   [ 发表时间:2010-12-26 18:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12
发上来看看
;实验7,将data段中的数据按要求填入table段中
assume ds:datasg,cs:codesg,es:table
datasg 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,8226   
    dw 11452,14430,15257,17800   

datasg ends

table segment
        db 21 dup ('year sume ne ?? ')
table ends

codesg segment
        start:
        mov ax,datasg
        mov ds,ax
        mov ax,table
        mov es,ax
        mov bx,0
        mov di,0
        mov cx,21
        s0:
    mov ax,[bx];年份输入
    mov word ptr es:[bx],ax
    mov ax,[bx+2]
    mov word ptr es:[bx+2],ax
   
    
    mov ax,54h[bx];收入输入
    mov word ptr es:5[bx],ax
    mov ax,54h[bx+2]
    mov word ptr es:5[bx+2],ax
    
    mov ax,0a8h[di];人数输入
    mov word ptr es:0ah[di],ax
    
    mov ax,54h[bx];人均收入输入
    mov dx,54h[bx+2]
    div word ptr 0a8h[di]
    mov es:0dh[bx],ax
   
    add bx,4
    add di,2
    loop s0
 
        mov ax,4c00h
        int 21h
        
codesg ends
end start
ares313
[第1楼]   [ 回复时间:2010-12-29 15:32 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-16 17:02
仔细看了一遍,存在2个问题:
第一:bx变量作为data数据段中,每次递增4,指向下一个数据,在年份和收入段中没错,但在雇员段就错了,因为雇员段每个数据是2个字节,递增2就指向下一个数据。递增4指向第3个数据了。
第二:当bx变量作为es,既table段的偏移地址时,两个数据间的差距是16,比如,1975-1976间的地址差距是16,而不是data段的存储排序方式递增4就可以了,这里bx共用,估计很难实现。
其它细节好像处理很好,解决这2个问题,应该可以实现,
呵呵,个人意见,供参考!
static
[第2楼]   [ 回复时间:2010-12-29 18:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12
bx 管4字节的
di 管2字节的啊
况且我调试了  应该没问题的啊
static
[第3楼]   [ 回复时间:2011-01-03 12:46 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12
谢谢ares313  我的错了  现将修改后的发上来

assume ds:datasg,cs:codesg,es:table 
datasg 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,8226    
    dw 11452,14430,15257,17800    

datasg ends 

table segment 
        db 21 dup ('year sume ne ?? ') 
table ends 

codesg segment 
        start: 
        mov ax,datasg 
        mov ds,ax 
        mov ax,table 
        mov es,ax 
        mov bx,0 
        mov di,0 
        mov cx,21 
        xor si,si
        s0: 
    mov ax,[bx];年份输入 
    mov word ptr es:[si],ax 
    mov ax,[bx+2] 
    mov word ptr es:[si+2],ax 
    
     
    mov ax,54h[bx];收入输入 
    mov word ptr es:5[si],ax 
    mov ax,54h[bx+2] 
    mov word ptr es:5[si+2],ax 
     
    mov ax,0a8h[di];人数输入 
    mov word ptr es:0ah[si],ax 
     
    mov ax,54h[bx];人均收入输入 
    mov dx,54h[bx+2] 
    div word ptr 0a8h[di] 
    mov es:0dh[si],ax 
    
    add bx,4 
    add si,16
    add di,2 
    loop s0 

    mov ax,4c00h 
    int 21h 
         
codesg ends 
end start
static
[第4楼]   [ 回复时间:2011-01-03 16:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12
此贴由 贴主 于 [ 2011-01-03 16:33 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved