|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:codesg ;实验7 寻址方式在结构化数据访问中的应用
;应该是完成了
;这里是只用了一个段寄存器,写的很麻烦。实际上利用两个段寄存器的话,代码能简化很多。可以用ds+es这个组合。就不特别再写一次了.
data 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'
;以上是21年
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上是21年的总收入
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8826
dw 1152,14430,15257,17800
;以上是21年的公司员工
data ends
table segment
db 21 dup ('year sume ne ?? ')
table ends
stack segment
db 0,0,0,0,0,0,0,0
stack ends
codesg segment
start:mov ax , data
mov ds , ax
mov ax , stack
mov ss , ax
mov bx , 0
mov dx , 0
mov si , 0
mov di , 0
mov cx , 4
s2:
push si
push cx
mov cx , 21
s1:
push ds
mov dl , [si]
mov ax , table
mov ds , ax
mov [bx+di] , dl
pop ds
add si , 4
add bx , 10H
loop s1
mov bx , 0
pop cx
pop si
inc si
inc di
loop s2
mov si , 54H
mov di , 5
mov cx , 4
s4:
push si
push cx
mov cx , 21
s3:
push ds
mov dl , [si]
mov ax , table
mov ds , ax
mov [bx+di] , dl
pop ds
add si , 4
add bx , 10H
loop s3
mov bx , 0
pop cx
pop si
inc si
inc di
loop s4
mov si , 00a8H
mov di , 000aH
mov cx , 2
s6:
push si
push cx
mov cx , 21
s5:
push ds
mov dl , [si]
mov ax , table
mov ds , ax
mov [bx+di] , dl
pop ds
add si , 2
add bx , 10H
loop s5
mov bx , 0
pop cx
pop si
inc si
inc di
loop s6
;上面把人均收入以外的都放好了。下面要弄的人均收入循环思路要变一下
mov bx , 0
mov cx , 21
mov bp , 54H
mov di, 0a8H
s7:
push bp
push di
push cx
mov ax , data
mov ds , ax
mov si , bp
mov al , [si]
inc si
mov ah , [si]
inc si
mov dl , [si]
inc si
mov dh , [si];把收入都取出来放到AX.DX里去了
mov si , di
mov cl , [si]
inc si
mov ch , [si];人数也取出来了
mov di , 000dH
div cx
mov cx , table
mov ds , cx
mov [bx+di] , al
inc di
mov [bx+di] , ah
add bx , 10H
pop cx;重新得到循环值
pop di
pop bp
add di , 2
add bp , 4
loop s7
;这一段是人均收入
mov ax , 4c00H
int 21H
codesg ends
end start |
|