马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
|