. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->INT指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  13.3有个问题不理解  [待解决] 回复[ 13次 ]   点击[ 503次 ]  
y5023
[帖 主]   [ 发表时间:2011-08-17 23:39 ]   [引用]   [回复]   [ top ] 
荣誉值: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节内容冲突。
tily
[第1楼]   [ 回复时间:2011-08-17 23:46 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:1
注册日期:2011-06-04 00:01
栈往下的是高地址,IP进栈后,BP也进栈了,SP就指向BP栈顶地址了,要得到IP必须加2使指针指向栈中IP的位置

不知道这样解释你明白没有,最好画进栈的图就知道了
chaplinyip
[第2楼]   [ 回复时间:2011-08-17 23:48 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:1
注册日期:2011-07-28 10:58
bx=offset s-offset se
乃一负数,故add
y5023
[第3楼]   [ 回复时间:2011-08-17 23:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-07-24 16:39
我明白,要使用ss:[BP+2]是se的IP地址
但是为什么是加bx,不是减去吗?
y5023
[第4楼]   [ 回复时间:2011-08-17 23:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-07-24 16:39
回复:[第2楼]
------------------
额,为什么是负数的?
chaplinyip
[第5楼]   [ 回复时间:2011-08-17 23:58 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:1
注册日期:2011-07-28 10:58
bx=offset s-offset se 
[BP+2]=offset se
上下两式相加,得到offset s,不就跳转到s语句了嘛
tily
[第6楼]   [ 回复时间:2011-08-17 23:59 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:1
注册日期:2011-06-04 00:01
因为S标号处的偏移地址比SE处的偏移地址小啊 S 标号在前 SE标号在后
chaplinyip
[第7楼]   [ 回复时间:2011-08-18 00:00 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:1
注册日期:2011-07-28 10:58
s在se前,所以offset s<offset se
y5023
[第8楼]   [ 回复时间:2011-08-18 00:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-07-24 16:39
哦,谢谢了,明白了,
我看错了
看成:mov bx,offset se - offset s
了,哎,真是粗心大意,看书不认真啊
非常感谢大家
嘿嘿,差不多学2个月了,有空就看,每天看几节。
好快看完了,后面的感觉快点了,准备学32位咯
qq67656467
[第9楼]   [ 回复时间:2011-10-08 16:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-10-03 16:25
别看太快,看的越快,你越不能理解!后面的那些内容都是跟硬件打交道的,最好认真理解,而且去上机调试一下!不然很难理解透的,我就是,以为自己基础够牢,结果被逼无奈,又重新研究了好几个星期!T_T
meizuo
[第10楼]   [ 回复时间:2011-10-12 11:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-29 22:13
实验十三第三道题是不能编译的题目,难道是理论性的题目?
etangyushan
[第11楼]   [ 回复时间:2012-08-23 13:34 ]   [引用]   [回复]   [ top ] 
荣誉值: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的功能。

呼呼,不知理解的对不对啊
fpamc
[第12楼]   [ 回复时间:2012-08-24 07:55 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:4
注册日期:2012-01-01 16:36
对的 ,简单说就是正数+负数就会返回前面那个正数
dasa
[第13楼]   [ 回复时间:2017-07-27 16:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2017-07-20 09:18
为什么是加bx而不是减bx
我认为你太纠结具体的数是正还是负
试想相对的偏移量是可以向后也可以向前移动啊,那么意味着这个偏移的值是正值或者是负值。
移动的量是负数,那么相加之后就往前跳转了
移动的量是正数,那么相加之后就往后跳转了
很简单的道理哦
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved