我在用单步调试下面代码时,所遇到的问题:
源代码:
assume cs:codesg
codesg segment
a: db 1,2,3,4,5,6,7,8
b: dd 0
start:
mov si,0
mov cx,8
s:
mov ax,a[si]
add b,ax
adc b,0
add si,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
调试的过程如下:
-r
AX=0000 BX=0000 CX=0022 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=000A NV UP EI PL NZ NA PO NC
0B85:000A BE0000 MOV SI,0000
-u
0B85:000A BE0000 MOV SI,0000
0B85:000D B90800 MOV CX,0008
0B85:0010 8A840000 MOV AL,[SI+0000]
0B85:0014 B400 MOV AH,00
0B85:0016 01060800 ADD [0008],AX
0B85:001A 46 INC SI
0B85:001B E2F3 LOOP 0010
0B85:001D B8004C MOV AX,4C00
0B85:0020 CD21 INT 21
0B85:0022 21BC0072 AND [SI+7200],DI
0B85:0026 16 PUSH SS
0B85:0027 03D3 ADD DX,BX
0B85:0029 13C8 ADC CX,AX
-t
AX=0000 BX=0000 CX=0022 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=000D NV UP EI PL NZ NA PO NC
0B85:000D B90800 MOV CX,0008
-t
AX=0000 BX=0000 CX=0008 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=0010 NV UP EI PL NZ NA PO NC
0B85:0010 8A840000 MOV AL,[SI+0000] DS:0000=CD
-t
AX=00CD BX=0000 CX=0008 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=0014 NV UP EI PL NZ NA PO NC
0B85:0014 B400 MOV AH,00
-t
AX=00CD BX=0000 CX=0008 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=0016 NV UP EI PL NZ NA PO NC
0B85:0016 01060800 ADD [0008],AX DS:0008=F01D
-t
AX=00CD BX=0000 CX=0008 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=001A NV UP EI NG NZ AC PO NC
0B85:001A 46 INC SI
-t
AX=00CD BX=0000 CX=0008 DX=0000 SP=0000 BP=0000 SI=0001 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=001B NV UP EI PL NZ NA PO NC
0B85:001B E2F3 LOOP 0010
-t
AX=00CD BX=0000 CX=0007 DX=0000 SP=0000 BP=0000 SI=0001 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=0010 NV UP EI PL NZ NA PO NC
0B85:0010 8A840000 MOV AL,[SI+0000] DS:0001=20
-t
AX=0020 BX=0000 CX=0007 DX=0000 SP=0000 BP=0000 SI=0001 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=0014 NV UP EI PL NZ NA PO NC
0B85:0014 B400 MOV AH,00
-t
AX=0020 BX=0000 CX=0007 DX=0000 SP=0000 BP=0000 SI=0001 DI=0000
DS=0B75 ES=0B75 SS=0B85 CS=0B85 IP=0016 NV UP EI PL NZ NA PO NC
0B85:0016 01060800 ADD [0008],AX DS:0008=F0EA
-t
很明显的是这里面a[si]所取得的值根本就不对,a[si]取得的是ds:a[si]中的值,究竟是为什么?按照书上说来应该是取的cs:a[si]中的值啊。敬请各位高手解 答!! |