. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  9.9位移的意义,看不出来啊  [待解决] 回复[ 6次 ]   点击[ 384次 ]  
dadakou
[帖 主]   [ 发表时间:2012-11-25 21:11 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-11-25 20:54
start: mov cx,2
    s: add,bx,1
       loop s
       mov ax,4c00h
       int 21h
如上,这个程序载入内存,ip是0,s如果是目的地址也不会出错啊
sbjcm33
[第1楼]   [ 回复时间:2012-12-03 23:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-11-13 22:06
“add,bx,1”add 后多了个“,”
xuer2016
[第2楼]   [ 回复时间:2012-12-12 17:35 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-10-16 16:56
不明白LZ的意思,你觉得哪里该出错呢?
ufo
[第3楼]   [ 回复时间:2014-09-06 21:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-06 21:18
lz想问什么的是“9.9节”根据位移进行转移的意义,有一段内容不好理解,即:

这段程序装在内存中的不同位置都可正确执行,因为loop s在执行时只涉及s的位移,而不是s的地址。如果loop s的机器码中包含的是s的地址,则就对程序段在内存中的偏移地址有了严格的限制,因为机器码中包含的是s的地址,如果s处的指令不再目的地址处,程序的执行就会出错。

目前我也不懂,研究中。。。
gyq
[第4楼]   [ 回复时间:2014-09-07 01:00 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2014-08-02 21:25
不明飞行物同学:
“如果s处的指令不再目的地址处”中“再”改为“在”。
另外,提示:
自己举一个实际的例子来说明,这样便于理解。
比如loop s指令包含偏移地址40H。那么程序段就不能开始于40H之后,就不能止于40H之前。因为这两种情况出现,程序段就不包含40H这个偏移地址,那么loop s就跳转到非程序段的地方,去执行不是程序的数据。这便是对程序段的偏移地址有了严格的限制。
剩下的教材原话,ufo可以去继续代入到例子中去理解。
mervym
[第5楼]   [ 回复时间:2015-02-15 18:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-02-08 19:33
我的理解是:根据位移进行转移 和 根据目标地址进行转移 这两种方式,如果编译后执行EXE文件,都不会有问题,但如果编译后的EXE文件在不同的系统环境下执行,后者就会出问题。不知对不对。
ackzoro
[第6楼]   [ 回复时间:2015-09-25 17:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-01-07 21:39
如果写目的地址,就失去了灵活性,那段汇编代码放在其他地方就会出错。如果使用相对的位移,那么只要那一段汇编代码的长度不变,都是正确的。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved