首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

loop 的纳闷

2013-03-06 
loop 的疑惑程序:assume cs:codecode segmentmov ax,2mov cx,11flag: add ax,axloop flagmov ax,4c00hint2

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反编译一下看看就明白了:)

热点排行