| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2480 人关注过本帖
标题:王爽汇编 有一段话不能理解
取消只看楼主 加入收藏
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
结帖率:50%
收藏
 问题点数:0 回复次数:2 
王爽汇编 有一段话不能理解
汇编指令        机器代码
mov cx,6       B9 06 00
mov ax,10h     B8 10 00
s:add ax,ax   01 C0
loop s          E2 FC
这段程序装在内存中的不同位置都可正确执行,因为loop s在执行时只涉及s的位移(-4,前移4个字节,补码表示为FCH),而不是s
的地址。如果loop s的机器码中包含得是s的地址,则就对程序段在内存中得偏移地址有了严格得限制,因为机器码中包含的是s的地
址,如果s处的指令不在目的地址处,程序执行就会出错。而loop s 的机器码中包含的是转移的位移,就不存在这个问题了,因为,                           
无论s处的指令的实际地址是多少,loop指令的转移位移是不变的                          我不能明白的是  “就对程序段在内存中得偏移地址有了严格得限制,因为机器码中包含的是s的地址,如果s处的指令不在目的地址处,程序执行就会出错。”这句话 假设包含的是地址 ,程序装在内存中的不同位置,地址也就会不同啊 ,为什么会找不到呢
搜索更多相关主题的帖子: 王爽 汇编 
2008-08-28 10:19
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
收藏
得分:0 
谢谢了,ONEPROBLEM你说的多少我还是能理解的,段内转移是这样,但是我又有个疑问,就是如果是段间转移,他所对应的 机器码就是转移的目的地址啊 ,这个也应该是编译的时候就固定了把,这个就不是位移,难道如果一段程序里面使用了 段间转移的话 ,把着段程序放到内存的不同位置就会出错吗 ,不理解

[[it] 本帖最后由 toyix 于 2008-8-30 07:01 编辑 [/it]]
2008-08-30 00:55
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
收藏
得分:0 
谢谢 又帮我解答了下 ,可以我感觉  你说的好象有问题,第一     jmp far ptr 标号对应 的 机器码对应的就是 目的地址  ,不是偏移。我debug看过了     第二  :你 是说  一个程序代码  段 ,数据段 ,堆栈段  都是只能是 最大为64KB吗?你说的 知识 杂在代码段中的跳转  ,cs当然不会变了 ,你看这个程序     assume cs:code,ds:data,ss:stack
data segment
    a db 8Bh,0C3h,0B8h,00h,4Ch,0CDh,21h
data ends
stack segment b
    b db 8Bh,0C3h,0B8h,00h,4Ch,0CDh,21h
stack ends
code segment
 start:mov ax,1111h
       mov bx,2222h
   
      ;jmp far ptr a
     jmp far ptr b
      
     
code ends
end start代码段   可以 跳转到数据段和堆栈段  然后执行。
2008-09-01 07:17
快速回复:王爽汇编 有一段话不能理解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016585 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved