|
楼主 |
发表于 2018-9-17 15:54:32
|
显示全部楼层
问题已经解决了。小甲鱼说,灵活寻址就像数组,我还真把它用成数组下标了,把增量写成了+1。bp应该是+4才对。
正确代码如下
- assume cs:codesg,ds:table,ss:stacksg,es:datasg
- 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 24580,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 11542,14430,15257,17800
- datasg ends
- table segment
- db 21 dup('year summ ne ?? ')
- table ends
- stacksg segment
- dw 8 dup(0)
- stacksg ends
- codesg segment
- start:
- mov ax,datasg
- mov es,ax
- mov ax,table
- mov ds,ax
- mov ax,stacksg
- mov ss,ax
- mov sp,20H
-
- mov bx,0
- mov bp,0
- mov di,0
- mov cx,21
- s1: mov si,0
- push cx
- mov cx,2
- s2: mov ax,es:[bp+0+si]
- mov [bx+0+si],ax
- inc si
- inc si
- loop s2 ;存放年份,4个字节
-
- mov si,0
- mov cx,2
- s3: mov ax,es:[bp+84+si]
- mov [bx+5+si],ax
- inc si
- inc si
- loop s3 ;存放收入,4个字节
-
- mov ax,es:[di+168]
- mov [bx+10],ax ;存放人数,2个字节
-
- mov dx,[bx+5+2]
- mov ax,[bx+5]
- div word ptr[bx+10]
- mov [bx+13],ax ;计算人均收入
-
- add bp,4 ;增量是4不是1
- add di,2
- add bx,16
- pop cx
- loop s1 ;一年复制完成
-
- mov ax,4c00H
- int 21h
-
- codesg ends
- end start
复制代码
对代码有问题,可以找我。
谢谢楼上的答案,但是人都是不喜欢读别人代码的,况且没有注释,不好意思 |
|