王爽汇编语言实验7问题求助
assume cs:codesgdata 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:
mov ,al
add si,1
loop s0
pop cx
add bx,10h
loop s
mov bx,0
mov cx,21
s1:
mov ax,es:
mov ,ax
add si,2
mov ax,es:
mov ,ax
add si,2
add bx,10h
loop s1
mov bx,0
mov cx,21
s2:
mov ax,es:
mov ,ax
add bx,10h
loop s2
mov bx,0
mov cx,21
s3:
mov ax,
mov dx,
div word ptr
mov ,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:
mov ,al
add si,1
mov al,es:
mov ,al
add si,1
mov al,es:
mov ,al
add si,1
mov al,es:
mov ,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:
;mov , al ; 这里bx不能加si
mov , 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:
mov , ax
add si, 2
mov ax, es:
mov , ax
add si, 2
add bx, 10h
loop s1
mov bx, 0
mov cx, 21
s2:
mov ax, es:
mov , ax
add si, 2 ; 这里忘记加si了
add bx, 10h
loop s2
mov bx, 0
mov cx, 21
s3:
mov ax,
mov dx,
div word ptr
mov , ax
add bx, 10h
loop s3
mov ax, 4c00h
int 21h
codesg ends
end start 人造人 发表于 2020-1-10 13:17
大概看了一下结果,应该是没有问题了,我没有认真检查结果
太谢谢您了!!!!!!!!!!!!!!!!!!!!!我思考了好久,没想到是寄存器搞混了,终于能睡个好觉了!!!!!!!!!!!!!!! z827901654 发表于 2020-1-10 17:04
太谢谢您了!!!!!!!!!!!!!!!!!!!!!我思考了好久,没想到是寄存器搞混了,终于能睡个 ...
思考半天也不如调试一遍,学会调试程序
人造人 发表于 2020-1-10 17:21
思考半天也不如调试一遍,学会调试程序
好!少了一点一步一步调试的耐心,我的。 {:10_334:}
页:
[1]