13C4:0005 B80000 MOV AX,0000
13C4:0008 90 NOP
13C4:0009 90 NOP
13C4:000A BF0800 MOV DI,0008
13C4:000D BE2000 MOV SI,0020
13C4:0010 2E CS:
13C4:0011 8B04 MOV AX,[SI]
13C4:0013 2E CS:
13C4:0014 8905 MOV [DI],AX
13C4:0016 EBF0 JMP 0008
13C4:0018 B80000 MOV AX,0000
13C4:001B CD21 INT 21
13C4:001D B80000 MOV AX,0000
13C4:0020 EBF6 JMP 0018
13C4:0022 90 NOP
13C4:0023 B8C805 MOV AX,05C8
从“13C4:0020 EBF6 JMP 0018 ”看F6表示的距离应该是18-22=-4(标号处的地址-jmp指令后的第一个字节的地址。但从补码上看F6又是-10
不解
请指点
------------------
回复:不可能把s1:mov ax,0 ;占3个字节
int 21h ;占2个字节
mov ax,0 ;占3个字节
s2:jmp short s1 ;占2个字节
s2处的指令执行后跳至s1处指示的指令,向前偏移10个字节,即-10。在机器码中使用补码来表示负数的。
同学“13C4:0020 EBF6 JMP 0018 ”看F6表示的距离应该是18-22=-4算法是错的,因为因为这里的18和22都是十六进,18h-22h=-(22h-18h)其中被减数个位上的2要比减数8小,向被减数高位上2的借位,因为是十六进制,借来的1相当于16,而16+2-8=A(即十进制的10),所以最后结果为-AH或者-10。 |