assume cs:code
code segment
start:
mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw: push ax
mov ax,dx
mov dx,0000h; 或者0
div cx
mov bx,ax
pop ax
div cx; 低16位放在ax中
mov cx,dx; 余数放在cx中
mov dx,bx; 高16位放在dx中
ret
code ends
end start
=======================================
DEBUG上结果:
AX=86A0 BX=0001 CX=000A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0C6F ES=0C6F SS=0C7F CS=0C7F IP=001E NV UP EI PL NZ AC PO NC
0C7F:001E 8BCA MOV CX,DX
-u
0C7F:001E 8BCA MOV CX,DX
0C7F:0020 8BD3 MOV DX,BX
0C7F:0022 C3 RET
0C7F:0023 4B DEC BX
0C7F:0024 1083C406 ADC [BP+DI+06C4],AL
0C7F:0028 8B1E5607 MOV BX,[0756]
0C7F:002C D1E3 SHL BX,1
0C7F:002E D1E3 SHL BX,1
0C7F:0030 A13A21 MOV AX,[213A]
0C7F:0033 8B163C21 MOV DX,[213C]
0C7F:0037 8987BE22 MOV [BX+22BE],AX
0C7F:003B 8997C022 MOV [BX+22C0],DX
-g23
Program terminated normally
-r
AX=86A0 BX=0001 CX=000A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0C6F ES=0C6F SS=0C7F CS=0C7F IP=001E NV UP EI PL NZ AC PO NC
0C7F:001E 8BCA MOV CX,DX
-
————按理说,这时结果应该即为:(AX=86A0 CX=0000 DX=0001),但事实不是。疑点1?
+++++++++++++++++++++++++++++++++++++++++++
继续单步执行DEBUG:
0C7F:0037 8987BE22 MOV [BX+22BE],AX
0C7F:003B 8997C022 MOV [BX+22C0],DX
-g23
Program terminated normally
-r
AX=86A0 BX=0001 CX=000A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0C6F ES=0C6F SS=0C7F CS=0C7F IP=001E NV UP EI PL NZ AC PO NC
0C7F:001E 8BCA MOV CX,DX
-t
AX=86A0 BX=0001 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0C6F ES=0C6F SS=0C7F CS=0C7F IP=0020 NV UP EI PL NZ AC PO NC
0C7F:0020 8BD3 MOV DX,BX
-t
AX=86A0 BX=0001 CX=0000 DX=0001 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0C6F ES=0C6F SS=0C7F CS=0C7F IP=0022 NV UP EI PL NZ AC PO NC
0C7F:0022 C3 RET
-t
AX=86A0 BX=0001 CX=0000 DX=0001 SP=0000 BP=0000 SI=0000 DI=0000
DS=0C6F ES=0C6F SS=0C7F CS=0C7F IP=7212 NV UP EI PL NZ AC PO NC
0C7F:7212 97 XCHG DI,AX
-
————到这时才出现正确结果:(AX=86A0 BX=0001 CX=0000 DX=0001 )。但RET指令后转移到
mov ax,4c00h
int 21h
此时,AX应为4C00而不再是86A0吧? 疑点2. |