loop 的疑惑
程序:
assume cs:code
code segment
mov ax,2
mov cx,11
flag: add ax,ax
loop flag
mov ax,4c00h
int 21h
code ends
end
loop flag如果cx的值不等于0,IP将会指向flag所标识的偏移地址. 请问flag所标识的地址它放在什么地方,loop它如何找到这个地址的? 是放在哪个寄存器中吗??
[解决办法]
就在loop那条指令的机器码里。机器码里有一个偏移量,符合条件时跳转到的地方就是那条指令所在的地方加上指令中的那个偏移量。
[解决办法]
这个地址不用存放在任何寄存器里啊~flag就是一个标志而已,它就代表当前代码的地址,编译器编到loop flag的时候就自动把地址值替换进去了。通俗点说就是:假如add ax,ax这句代码编译后的起始地址为12345,那么loop flag这句代码编译后就变成了loop 12345 。你可以自己把程序编译以后用Olldbg反编译一下看看就明白了:)