xh4528 发表于 2015-12-13 13:50:57

042-试验七-代码

试着做了下

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

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,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,11542,14430,15257,17800
data ends

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

code segment
start:       
                mov ax,data
                mov ds,ax
                mov ax,table
                mov es,ax
                mov si,0                ;用来data段偏移
                mov di,0                ;用来table段偏移
                mov bx,0                ;用来人数偏移
                mov cx,21                ;循环次数
               
        y:        mov ax,ds:        ;年份复制
                mov es:,ax
                mov ax,ds:        ;钱数复制
                mov es:,ax
                add si,2               
                add di,2                ;
                mov ax,ds:        ;年份复制
                mov es:,ax
                mov ax,ds:        ;钱数复制
                mov es:,ax        ;因为年份和钱数都是4字节数据,而ax一次只能存储2字节,所以每次偏移2字节,分两次来移动数据
               
                mov ax,ds:        ;人数复制
                mov es:,ax

                mov ax,es:        ;除法
                mov dx,es:
                div word ptr es:
                mov es:,ax
               
                add bx,2        ;人数的下一个字型数据?
                add si,2        ;年份/钱数的下一个字型数据
                add di,14        ;table的下一行               
        loop y
                mov ax,4c00h
                int 21h               
code ends
end start

yundi 发表于 2015-12-14 11:58:39

add di,14      ;table的下一行
为什么不是16?
页: [1]
查看完整版本: 042-试验七-代码