assume cs:codesg
codesg segment
mov ax,4c00H
int 21H
start:
mov ax,0
s:
nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0:
jmp short s
s1:
mov ax,0
int 21H
mov ax,0
s2:
jmp short s1
nop
codesg ends
end start
如上,我将s2处的"jmp short s1"换成了"jmp far ptr s1",但是在debug里面-u发现 "jmp far ptr s1"的机器码同样是EBF6(与"jmp short s1"所显示机器码一样)
这是什么原因呢?"jmp far ptr"应该是传递地址而不是位移啊?
我想原因可能是jmp short s1是2字节,而jmp far ptr s1是5字节的原因,随后将S的nop设为5个,又修改了S内的"mov ax,cs:[si]"使其将"jmp far ptr s1"能够传至S内,但debug内-u显示的机器码仍然是EBF3...
菜鸟求解 |