记录王爽汇编实验7推导过程

assume cs:code,ds:data
data  segment
  DB '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
  DB '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
  DB '1991', '1992', '1993', '1994', '1995'

  DD 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
  DD 345980, 590827, 803530, 118300, 184300, 2759000, 3753000, 4649000, 5937000

  DW 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
  DW 11542, 14430, 15257, 17800
data  ends

table  segment
    DB 21 dup ('year summ ne ?? ')
table  ends

code segment
start:         
comment*                            
            si            si+4            si+8    
si        年份1     年份2         年份3 ...
            si+84        si+84+4        si+84+8
            收入1     收入2         收入3 ...
            si+168    si+168+2    si+168+4
            人数1     人数2         人数3 ...
                    
            di            di+4            di+5            di+9            di+10             di+12            di+13         di+15 
di        年份1     空格            收入1       空格            人数1          空格            人均1         空格
            di+16     di+16+4        di+16+5        di+16+9        di+16+10    di+16+12    di+16+13    di+16+15
            年份2        空格             收入2       空格            人数2          空格            人均2         空格
            di+32        di+32+4        di+32+5        di+32+9        di+32+10     di+32+12    di+32+13    di+32+15
            年份3     空格             收入3       空格            人数3          空格            人均3         空格
            ...    
                                        
                                                                        
    第一次循环
            年份    si                         ->         di                            
            收入    si+84                    ->         di+5                        
            人数    si+168                ->         di+10                    
    第二次循环
            年份    si+4                    ->         di+16                
            收入    si+84+4                ->         di+16+5            
            人数    si+168+2            ->         di+16+10            
    第三次循环
            年份    si+8                    ->         di+32
            收入  si+84+8                ->         di+32+5
            人数    si+168+4            ->         di+32+10                        
                        ...
                        
注意: 【年份】和【收入】占4个字节,每次加4,【人数】占两个字节, 每次加2.                            
*comment
        
        mov ax, data
        mov ds, ax        
        mov ax, table
        mov es, ax
        
        mov ax, 0
        mov bx, 0
        mov di, 0
        mov si, 0
        mov bp, 0
        
        mov cx, 21
    begin_copy:
        mov ax, [si]
        mov es:[di], ax
        mov ax, [si+2]
        mov es:[di+2], ax
        mov byte ptr es:[di+4], 20h    ;空格
        mov ax, [si+84]
        mov es:[di+5], ax
        mov ax, [si+86]
        mov es:[di+7], ax
        mov byte ptr es:[di+9], 20h    ;空格
        mov ax, ds:[bp+168]    ; !!!使用bp, 必须指定寄存器 !!!
        mov es:[di+0Ah], ax
        mov byte ptr es:[di+0Ch], 20h    ;空格
        mov ax, [si+84]
        mov dx, [si+86]
        mov bx, es:[di+0Ah]
        div bx
        mov word ptr es:[di+0Dh], ax
        mov byte ptr es:[di+0Fh], 20h    ;空格        
        
        add di, 16
        add si, 4
        add bp, 2
        loop begin_copy
                
        mov ax, 4c00h
        int 21h
code ends

end start
原文地址:https://www.cnblogs.com/Jiaojiawang/p/14375993.html