|
发表于 2012-9-3 13:28:21
|
显示全部楼层
呵呵 楼主 ~
代码上有几点小提示 :
1, 在寻址上, 过多使用 idata, 使程序的灵活性变低, 而且这种寻址方式有时会造成不必要的错误
2, 结构上, 有一点小小的逻辑错误
提示: 这个逻辑错误造成内存错误
改正后的代码:
- assume cs:codesg, ds:datasg, es:table, ss:pau ;pau == pause 暂停 因为在汇编中pause也是个指令 所以缩写
- 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' ;表示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,8226
- dw 11542,14430,15257,17800 ;表示21年公司员工数
- datasg ends
- table segment
- db 21 dup ('year summ ne ?? ')
- table ends
- pau segment
- dw 0 ;栈
- pau ends
- codesg segment
- start:mov ax, datasg
- mov ds, ax
- mov ax, table
- mov es, ax
- mov ax, pau
- mov ss, ax
- mov sp, 16
- mov cx, 15
- mov bx, 0
- mov di, 0
- mov bp, 0
- s0:push cx
- mov si, 0
- s1:mov cx, 1
- mov ax, [di]
- mov es:[bx+si], ax
- mov ax, [di+2]
- mov es:[bx+si+2], ax
- add si, 5
- mov ax, [di+84]
- mov es:[bx+si], ax
- mov ax, [di+86]
- mov es:[bx+si+2], ax
- add si, 5
- mov ax, ds:[bp+168]
- mov es:[bx+si], ax
- add si, 3
- mov dx, [di+86]
- mov ax, [di+84]
- div word ptr ds:[bp+168]
- mov es:[bx+si], ax
- add di, 4
- add bp, 2
- loop s1
- add bx, 16
- pop cx
- loop s0
-
- mov ax, 4c00h
- int 21h
- codesg ends
- end start
复制代码
|
|