实验8的问题
本帖最后由 king嗜血法师 于 2011-6-22 04:02 编辑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:
mov cs:,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复制到s:中,按照思路这条指令是IP+(-10),所以执行s:jmp short s1这条指令
ip+(-10)就跳到上面的mov ax,4c00H。但是到了检测点11.3又让我迷惑了。
mov ax,0f00H
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s: mov al,
cmp al,32
jb s0
cmp al,128
ja s0
inc dx
s0:inc bx
loop s
按照第一个代码段的思路jb跳到s0"当前"IP=ip+(x)为偏移地址,那么ja也应该跳到“当前”ip=ip+(x)的偏移地址才对啊,为什么ja也会也会跳到s0?
第一个例子你还是没能明白
首先要记住一点,跳转的是 IP+当前IP到目标的偏移值
说下第一个题
s1 : mov ax,0
int 21H
mov ax,0
s2 : jmp short s1
s2这条指令,在编译时,就已经把s2至s1的偏移算出来了,比如是-10,那在程序里,它表示为jmp -10
那当s2这条指令被复制到s处时,它的指令还是jmp -10,所以才能执行到mov ax,4c00H处
再看第二题
比如jb s0这条指令到s0的距离为10,ja s0这条指令到s0的距离为6
那它们的偏移值分别就是10和6,再加上它们各自的IP,所以都能跳到s0
谢谢,弄明白了。
页:
[1]