. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->汇编语言学习交流区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  CS和DS有什么不同  [已解决] 回复[ 6次 ]   点击[ 473次 ]  
luyingdzx
[帖 主]   [ 发表时间:2011-08-06 21:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:7
注册日期:2011-08-05 17:58
在基础知识里我们学过:CS为代码段寄存器,IP为指令指针寄存器
但是现在学到第三章,mov传递的偏移地址 例如mov ax,[0]
这个[0]代表了内存偏移地址 也就是说是IP
为什么都说他对应的是DS段寄存器呢
搞不懂.
luyingdzx
[第1楼]   [ 回复时间:2011-08-06 21:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:7
注册日期:2011-08-05 17:58
我知道DS 是data S....意思就是数据段 但是还是分不清楚
chinatree
[第2楼]   [ 回复时间:2011-08-06 23:18 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
错了,不是的,Ds是data段的段地址寄存器,它的全称不是data segment,ip是和cs相关的,它与ds没有关系,寻址的时候也不是用它的。[0]表示ds:[0],表示数据段的第一个字节下的内容,可以表示内存偏移的寄存器有bx,bp,sp(一般不用它),si,di,但是绝对不会是ip
chinatree
[第3楼]   [ 回复时间:2011-08-06 23:19 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
错了,不是的,Ds是data段的段地址寄存器,它的全称不是data segment,ip是和cs相关的,它与ds没有关系,寻址的时候也不是用它的。[0]表示ds:[0],表示数据段的第一个字节下的内容,可以表示内存偏移的寄存器有bx,bp,sp(一般不用它),si,di,但是绝对不会是ip
luyingdzx
[第4楼]   [ 回复时间:2011-08-07 00:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:7
注册日期:2011-08-05 17:58
那么我们学过的CS * 16 + IP = 物理地址
意思是:基础地址+偏移地址=真实地址
任何时候CPU都是从CS:IP开始读取指令的 这句怎么讲呢?
他和DS 也就是你说的"data段的段地址寄存器"是什么关系呢?
小菜鸟期待你的教诲 嘿嘿
chinatree
[第5楼]   [ 回复时间:2011-08-07 09:19 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
它们是两个不同的段,在内存中数据和代码长的都一样,如果在你的代码中有Mov ax,0  mov cs,ds  jmp ax这三句,程序就会从数据段的第一个字节开始执行,如果对于机器指令不是很了解的话,有可能会然cpu遇到无效指令,然后退出。或许楼主只是对cs与ds的关系不清楚,只需要记住cs是代码段,它指向的地址的内容会以指令来执行,而ds所指向的地址的内容是数据,相当于草稿纸用来被cpu来读读写写,严格来说,它们俩都是一种寄存器,它们的内容是地址,只是对于cpu来说有不同的用处,其他还有几个段寄存器,如es,ss,fs,gs,如果是在弄不明白就算了,因为在32位汇编中就没有段寄存器这个概念了,因为eip是32位的
luyingdzx
[第6楼]   [ 回复时间:2011-08-07 21:29 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:7
注册日期:2011-08-05 17:58
此贴由 贴主 于 [ 2011-08-07 21:29 ] 结贴。 结贴原因:问题已解决
得分情况: 5楼(chinatree):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved