. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->INT指令
主题 : :  13.3有个问题不理解  [待解决] 回复[ 13次 ]   点击[ 503次 ]  
y5023
[帖 主] [ 发表时间:2011-08-17 23:39 ] 
荣誉值:0
信誉值:0
注册日期:2011-07-24 16:39
257页就是
add [bp+2],bx
不是
sub [bp+2].bx

程序不是一条条向下执行,Ip就减去上一条指令的字节
如:
s: 假如5个字节指令,IP=0
se: 2个字节指令     IP=5
那么
s偏移地址=se-5

为什么书中是加bx,和书中2.10节内容冲突。
etangyushan
[第11楼] [ 回复时间:2012-08-23 13:34 ] 
荣誉值:0
信誉值:0
注册日期:2012-08-14 12:33
貌似明白了,前面的是安装程序是把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的功能。

呼呼,不知理解的对不对啊
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved