貌似明白了,前面的是安装程序是把offset得出的数字用到cx,现在是调用程序中出现了offset,使用bx,得出的是用s的地址减去se的地址,因为s的地址比se的要大,所以得出负数。在中断程序中要做到返回就要做逆向运算。就像a-b=c,这是在调用程序里,在中断程序中变成了c+b=a,而且由于是栈的关系,执行int时候执行了:pushf,push cs,push ip.这时的cs是s标号的段地址,ip是se的偏移地址,se和s的段地址一样的,可以说cs是s和se的段地址。中断程序中push bp,就压到了ip也就是se的偏移地址上面,现在要返回到s的偏移地址出就要,bp+2指到ip也就是se处,[bp+2]=se的偏移地址,这样加上前面mov bx,offset s-offset se得出的负数,[bp+2]+bx=s的偏移地址。完成了Loop的功能。
呼呼,不知理解的对不对啊 |