马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- assume cs:codesg
- 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'
- 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 sumn ne ?? ')
- table ends
- stack segment
- dw 0,0,0,0,0,0,0,0
- stack ends
- codesg segment
- start:
- mov ax,stack
- mov ss,ax
- mov sp,16
-
- mov ax,table
- mov ds,ax
- mov bx,0
- mov ax,data
- mov es,ax
- mov si,0
- mov cx,21
- s:
- push cx
-
- mov cx,4
- s0:
- mov al,es:[si]
- mov [bx+si],al
- add si,1
- loop s0
-
- pop cx
- add bx,10h
- loop s
- mov bx,0
- mov cx,21
- s1:
- mov ax,es:[si]
- mov [bx+5],ax
- add si,2
- mov ax,es:[si]
- mov [bx+7],ax
- add si,2
- add bx,10h
- loop s1
- mov bx,0
- mov cx,21
- s2:
- mov ax,es:[si]
- mov [bx+10],ax
- add bx,10h
- loop s2
-
- mov bx,0
- mov cx,21
- s3:
- mov ax,[bx+5]
- mov dx,[bx+7]
- div word ptr [bx+10]
- mov [bx+13],ax
- add bx,10h
- loop s3
- mov ax,4c00h
- int 21h
- codesg ends
- end start
复制代码
在s和s0循环结束时,si的值应该是84,但是每次都只有81。
以下是我尝试的结果:
1.debug单步跟踪的结果,外层循环s中的cx逐渐减为0,si增长到81就不再增加。
2.将所有si改成di,结果不变。
3.将外层循环s中的cx改成1-20,si显示的结果正确。
4.增加一个‘1996’字符串,外层循环s中cx仍为21,si显示出错,只能到81;将外层循环s中的cx改成1-20,si显示的结果正确。
5.去掉内层s0循环,将代码改成
mov al,es:[si]
mov [bx+si],al
add si,1
mov al,es:[si]
mov [bx+si],al
add si,1
mov al,es:[si]
mov [bx+si],al
add si,1
mov al,es:[si]
mov [bx+si],al
add si,1
si结果依旧出错,但是显示为83。
在此种代码下,将外层循环s中的cx改成1-20,si显示正确。
求助:问题出在哪里~
大概看了一下结果,应该是没有问题了,我没有认真检查结果
- assume cs:codesg
- 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'
- 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 sumn ne ?? ')
- table ends
- stack segment
- dw 0, 0, 0, 0, 0, 0, 0, 0
- stack ends
- codesg segment
- start:
- mov ax, stack
- mov ss, ax
- mov sp, 16
- mov ax, table
- mov ds, ax
- mov ax, data
- mov es, ax
- mov bx, 0
- mov si, 0
- mov cx, 21
- s:
- push cx
- mov cx, 4
- mov di, 0
- s0:
- mov al, es:[si]
- ;mov [bx + si], al ; 这里bx不能加si
- mov [bx + di], al
- add si, 1
- add di, 1
- loop s0
- add bx, 10h
- pop cx
- loop s
- mov bx, 0
- mov cx, 21
- s1:
- mov ax, es:[si]
- mov [bx + 5], ax
- add si, 2
- mov ax, es:[si]
- mov [bx + 7], ax
- add si, 2
- add bx, 10h
- loop s1
-
- mov bx, 0
- mov cx, 21
- s2:
- mov ax, es:[si]
- mov [bx + 10], ax
- add si, 2 ; 这里忘记加si了
- add bx, 10h
- loop s2
-
- mov bx, 0
- mov cx, 21
- s3:
- mov ax, [bx + 5]
- mov dx, [bx + 7]
- div word ptr [bx + 10]
- mov [bx + 13], ax
- add bx, 10h
- loop s3
- mov ax, 4c00h
- int 21h
- codesg ends
- end start
复制代码
|