|
发表于 2015-4-17 19:48:09
|
显示全部楼层
本帖最后由 KTMONREK 于 2015-4-21 09:45 编辑
- <div class="blockcode"><blockquote>assume cs:codesg,ds:data,es:table,ss:stacksg
- data segment ;错误的地方我在下方注释了
- db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985'
- db '1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
- dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
- dd 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
- dw 11542,14430,15257,17800
- data ends
- table segment
- db 21 dup ('year summ ne ?? ')
- table ends
- stacksg segment
- dw 0,0,0,0,0 ;栈的定义用dw,不然后面会出错
- stacksg ends
- codesg segment
- start:mov ax,table
- mov es,ax
- mov ax,data
- mov ds,ax
- mov ax,stacksg
- mov ss,ax
- mov sp,10 ;修改栈顶指针
- mov di,0
- mov si,0 ;si的位置改到这里
- mov cx,21
- s:push cx
- mov cx,4
- mov bx,0
- ;你原本mov si,0写在这里,每次进入循环都只是读data段第一个字节
- s1: mov al,byte ptr ds:[si] ;更改s1的位置
- mov byte ptr es:[bx+di],al
- mov al,byte ptr ds:[si+84]
- mov byte ptr es:[bx+di+5],al
- inc bx
- inc si
- loop s1
- pop cx
- add di,16
- loop s
-
-
- mov si,0
- mov di,0
- mov cx,21
-
- s2:push cx
- mov bx,0 ;把这句放到这里,不然每次进入循环都会置bx为0
- mov cx,2
- s3: ;把 mov bx,0放在这里的话,你后面的inc bx就没有意义了
- mov al,byte ptr ds:[168+di]
- mov byte ptr es:[si+10+bx],al
- inc bx
- inc di
- loop s3
- pop cx
- add si,16 ;table段的下一行,是16,不是4
- loop s2
-
- mov bx,0
- mov cx,21
- s4:mov ax,es:[5+bx] ;高低位你弄反了,所以会发生除法溢出
- mov dx,es:[7+bx] ;把5和7换过来
- div word ptr es:[10+bx]
- mov es:[13+bx],ax
- add bx,16
- loop s4
- mov ax,4c00h
- int 21h
- codesg ends
- end start
复制代码
|
|