当前位置: 代码迷 >> 汇编语言 >> loop 的纳闷
  详细解决方案

loop 的纳闷

热度:687   发布时间:2016-05-02 04:56:52.0
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反编译一下看看就明白了:)
  相关解决方案